终于解决了auto-syntaxhighlighter和simple-tag之间的冲突问题
时间:2010年09月23日作者:Winson查看次数:查阅:706评论次数:10
对于一个以编程技术为主的博客站,auto-syntaxhighlighter这类代码高亮插件是必不可少的,之前一直在用wp-code,感觉还可以,只是样式总觉得不太像样,于是想尝试一下整合自 syntaxhighlighter 的 auto-syntaxhighlighter,这款插件出来的样式效果比较好也比较接近 vs 里的配色(当然自己可以更改,只是如果相差太远改起来就麻烦了),而且 auto-syntaxhighlighter 还有个好处就是,已将按钮整合到 WP 的编辑器里了,这样就不用每次去记什么代码(wp-code就要手工输入,总是不记得格式
).
不过 auto-syntaxhighlighter 还是有其缺点,最重要的个问题就是与我现有的 simple-tag 的 auto link功能之间有冲突,只要在代码框里包含了当前日志的标签,那就会直接在里面代码里把超链的源码显示出来,弄得非常难看,代码里的格式也乱了。举个例子,我的日志里有一个名为 Provider 的标签,同时在我的代码框里也用到了此单词,于是就会将此单词的智能标签链接的源码也在代码框里显示出来了
曾去过 auto-syntaxhighlighter 作者网站问过,他觉得应该是 simple-tag 去处理这问题,应该过滤掉 <pre> 标签里的代码不加自动链接,但我又有另一个问题,就是之前我使用 wp-code 时也一样使用了 <pre> 标签来框住代码的,为什么 wp-code 以很正常呢?
呵,于是我只好自己想办法解决了,虽然不知道真正的原因是什么,但从原理上来讲,只需在代码输出时,将 simple-tag 生成的链接代码替换掉不就得了吗? 我对 PHP 并不熟悉,但为了解决这个问题,只好硬着头皮看看代码了,只要是代码有,一定能解决的 :wink:
首先了解了下 WP 的插件机制,找到在注册插件模块时,原来是有个先后次序的参数的(默认为10,而wp-code的为12),即 add_filter 函数,要替换掉 simple-tag 生成的代码,就必须保证 auto-syntaxhighlighter 运行于 simple-tag 之后,所以要先修改其 add_filter 函数:
1、修改 auto-syntaxhighlighter.php 文件,将以下代码
111 |
改为
111 |
2、然后开始使用正则对相关的代码进行替换,由于对PHP不熟,这部分花了我好长时间 :unsure:
找到 function getContentLang($content) 这个函数进行修改,在最后返回 $content 之前添加以下代码以替换掉生成的链接代码:
123 124 125 126 127 128 129 130 131 132 133 134 | //replace the simple-tag auto link tag by Winson(coderblog.in) ==== begin ===== preg_match_all('/<pre[^>]*>([\s\S]*?)<\/pre>/i', $content, $result); $match = array_unique($result[1]); if(!empty($match)) { foreach($match as $r) { $tmp = $r; $r = preg_replace("/<a href=[\'\"]?.+[\'\"]?(\s.+)? class=\"st_tag internal_tag\" rel=[\'\"]?.+[\'\"]?(\s.+)?title=[\'\"]?.+[\'\"]?(\s.+)?>(.+)<\/a>/i", '$4', $r); $content = str_replace($tmp, $r, $content); } } //replace the simple-tag auto link tag by Winson(coderblog.in) ==== end ===== |
只要完成以上2步,问题就解决了,就这么简单
为了方便些,我还修改了一下其插入代码的窗口,添加了直接设置高亮行数和起始行数的功能,只需修改 tinymce\window.php 文件即可。
OK, 最后我想说说我个人感觉 auto-syntaxhighlighter 的一些优缺点:
让我放弃wp-code而想迟办法要使用 auto-syntaxhighlighter 的原因,除了其样式比较漂亮外,还有其整合的直接插入的按钮功能,而且使用auto-syntaxhighlighter还可以高亮指定某行代码进行高亮显示,并且也能指定起始行数等。
至于其缺点嘛,感觉就是加载特别慢,不知道是否与加载的CSS过多有关,因 syntaxhighlighter 本身对CSS的渲染效率就不太高 :sad: ,希望以后会有所改善吧(不过看syntaxhighlighter好像也很长时间没有更新过了……)
你用的3D标签云插件叫什么来的?
那个叫 WP-Cumulus
我用的Google-syntax-highlighter也和simple-tags冲突了,对php很不懂。暂时把simpletags禁用了。我在考虑换成你的搭配,不过那样的话,以前的代码都不高亮了。
嗯,是的,不过我当时换后,也把所有文章的代码都修改了一次,感觉找到一个好用的,换一次也就算了,以后方便就行,呵
主页图片看不到,
嗯?什么图片?
你到底用了几个插件?
呵,这个与我使用插件多少有关系吗?不过说真的,我现在使用的插件还不少,将近30个吧,我是比较喜欢研究这东西的
就问问,我用不到15个就怕空间受不了了
呵,我用的是自己的服务器,所以就不用担心这问题啦