不同主题高亮不统一问题
本站由于之前曾用不同编辑器插件编辑文章,因此代码高亮区域的 CSS 都点不同,不同主题之间对 <pre> 标签的处理也都不一样,造成每个主题都有不同的代码高亮形式。之前我的解决方法是改插件的 CSS 实现 CSS 内容统一,但这样面临两个问题:
感叹之前想得太麻烦,其实很简单解决这个问题,首先引入相关 js、css 代码(没有可在商店下载):
<link rel="stylesheet" type="text/css" href="/zb_users/plugin/FY_Prettify/prettify.css" /> <script src="/zb_users/plugin/FY_Prettify/prettify.js"></script>
然后通过 js 遍历标签节点强制更改 pre 标签为指定样式:
<script type="application/javascript"> var tags= document.getElementsByTagName("pre"); for (let s of tags) {s.setAttribute("class","fy-prettyprint linenums"); } </script>
最后将这段代码放在主题设置的统计代码中即可,即以下:
代码高亮代码
<link rel="stylesheet" type="text/css" href="/zb_users/plugin/FY_Prettify/prettify.css" /> <script src="/zb_users/plugin/FY_Prettify/prettify.js"></script> <script type="application/JavaScript"> var tags= document.getElementsByTagName("pre"); for (let s of tags) {s.setAttribute("class","fy-prettyprint linenums"); } prettyPrint(); </script>
其中本站已在 prettify.js 中调用了 prettyPrint()方法,因此可以删除 prettyPrint()避免重复调用。但是鄙人发现调用后还是没效果,发现可能是 jq 版本造成的错误,原错误代码:
/* 初始化 prettyPrint*/ jQuery(window).load(function(){ jQuery("pre").addClass("prettyprint"); prettyPrint();})
改成下列即可
/* 初始化 prettyPrint*/ $(window).on('load',function(){ jQuery("pre").addClass("prettyprint"); prettyPrint();})
代码复制功能
代码复制引用相关 js 即可。Z-Blog 用户可在应用商店搜索“复制代码”
<script src="/zb_users/plugin/copycode/clipboard.min.js"></script> <script src="/zb_users/plugin/copycode/copycode.js" type="text/javascript" /></script>
将如下代码放在网站任意共通页面中即可。
文章页面编辑功能
给每篇文章页面添加编辑功能,很简单,在文章显示页的 PHP 主题模板文件中添加:
<span>{if $user.ID>0}<i class="fi fi-edit"></i><a href="{$host}zb_system/cmd.php?act=ArticleEdt&id={$article.ID}" rel="nofollow">Edit </a>{/if}</span>
当然最简单是将上述封装成 js 文件直接引用就行,可以省去修改 PHP 模板的困扰,也减少代码侵入:
var tags = document.getElementsByTagName("pre"); for (let s of tags) {s.setAttribute("class", "fy-prettyprint linenums"); } function getCookie(cookieName) { var cookieValue = ""; if (document.cookie && document.cookie != '') {var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) {var cookie = cookies[i]; if (cookie.substring(0, cookieName.length + 2).trim() == cookieName.trim() + "=") {cookieValue = cookie.substring(cookieName.length + 2, cookie.length); break; } } } return cookieValue; } if (getCookie('username')) { var pathName = window.location.pathname; if (pathName.indexOf('post/') > -1) { var endNum = pathName.length - 5; var articleNo = pathName.substring(6, endNum); if (!$('.article-info .fr .edits').html()) { var editStr = '<span><i class="fi fi-edit"></i> <a href="/zb_system/cmd.php?act=ArticleEdt&id='+articleNo+'"rel="nofollow">Edit </a></span> '; $('.article-info .fr').prepend(editStr); } } }
以上代码思路也很简单,判断当前 cookie 中是否有用户名字段,有就在页面指定位置添加编辑按钮,这里编辑按钮的 articleNo 是根据当前页面 Url 来的,你的页面伪静态策略可能不一样,因此根据实际需求修改吧,关于编辑框插入位置的 css 选择器也根据实际情况进行修改即可。
- 代码高亮代码
- 代码高亮代码