终于在网上建了个家
用开源的java博客程序--Pebble搭建个人博客
记得我刚开始学网页就是一个简单的想法,给自己弄个个人站。
于是开始学习 html,css,photoshop,dreamweaver,javascript,flash。然后又知道用静态html做出来的 网站很难维护,最好是用程序做成动态的。于是又学习asp,php,数据库,java,linux。结果这一下误入歧途,回不来了。法律专业也不搞了,转行写程序了。几年来给别人也做了好些网站程序,但自己最初的那个想法还没实现。本来是想抽空自己写个简单的个人博客用的,但这个想法一直处于构想当中。最 后还是找个现成的单用户blog程序吧。既然喜欢java,那也应该找个java的。找来找去,就找到了这个blog程序---pebble,官方网站 --http://pebble.sourceforge.net/ 。咱买不起房子,但在网上给自己搭个家还行吧。
pebble的数据采用xml方式储存,没有用数据库,搭建方便,功能也不错。
对中文支持完全没问题。刚搭建之后,发现查询中文tag的时候会有乱码问题,它的url路径里出现中文了:http://jolestar.com/tags/开源项目/.但后来才发现那是我的mod_jk的配置问题。应该加上
JkOptions +ForwardURICompatUnparsed +ForwardDirectories
这两项。第一项是让apache不要解码,把url提交给tomcat处理。第二项是让apache把目录直接提交给tomcat处理。
这样就没问题了。
好了,开始转我的博客吧。但刚一转就发现,编辑器少个功能:插入代码。pebble默认是用FCKEditor编辑器,弄了一下,发现FCKEditor的插件体系不好,网上找到的FCKEditor的代码插入插件都不太好用,很多是直接把代码格式化成html的格式高亮。这种方式不好,因为这样格式化,用户复制代码的时候会很不方便,会复制上冗余的东西,以后编辑也不方便。好的方式就是用js动态实现高亮,而不是直接用html格式化。看了一下javaeye的代码插入功能,觉得不错。javaeye的编辑器用的是tiny_mce,于是就把博客的编辑器替换成了tiny_mce,又把javaeye的tiny_mce的代码插入插件搬了过来。嘿,还挺好用。在此感谢javaeye。
代码插件有了,然后就是代码高亮。javaeye用的是SyntaxHighlighter, http://alexgorbatchev.com ,但它好像用的是旧版本,或者是它的修改版本,不太好用。于是下载了最新的SyntaxHighlighter,实验了一下,嘿,效果不错。但又发现一个问题。新版本的SyntaxHighlighter把每种语言的高亮js都放在单独文件里,必须提前把需要用到的需要高亮的语言的js都加载进来。但页面模板里没法知道博客的内容会插入那些语言的代码,如果把所有的语言的js都加载进来,会严重影响页面加载速度。于是又写了个动态加载语言js的脚本。
var syntaxhighlighter_url = "/scripts/syntaxhighlighter/";
var brushLibs = {js:"JScript",jscript:"JScript",javascript:"JScript",
bash:"Bash",shell:"Bash",css:"Css",actionscript3:"AS3",as3:"AS3",cpp:"Cpp",c:"Cpp",
csharp:"CSharp",groovy:"Groovy",java:"Java",javafx:"JavaFX",jfx:"JavaFX",
perl:"Perl",pl:"Perl",php:"Php",text:"Plain",plain:"Plain",
py:"Python",python:"Python",
ruby:"Ruby",ror:"Ruby",rails:"Ruby",scala:"Scala",sql:"Sql",xml:"Xml",html:"Xml",
xhtml:"Xml",xslt:"Xml"
};
function loadBrushLibs(){
var pres = document.getElementsByTagName("pre");
for(var i=0;i<pres.length;i++){
var pre = pres[i];
var className = pre.className;
var brush = null;
className = className.toLowerCase();
if(className.indexOf('brush:')==0){
brush = className.substr(className.indexOf(':')+1);
}//为了兼容从javaeye转过来的博客的高亮代码
else if(pre.getAttribute('name')=='code'){
brush = className;
pre.className='brush:'+className;
}
if(brush==null)
continue;
if(eval("brushLibs."+brush)){
loadBrushLib(brush);
}else{
pre.className='brush:text';
loadBrushLib('text');
}
}
}
function loadBrushLib(brush){
var libName = eval("brushLibs."+brush);
var id = "brush_"+libName;
var scriptTag = document.getElementById(id);
if(scriptTag)
return;
var oHead = document.getElementsByTagName('HEAD').item(0);
var oScript= document.createElement("script");
oScript.id = id;
oScript.type = "text/javascript";
oScript.src=syntaxhighlighter_url+"scripts/shBrush"+libName+".js";
// oScript.onload=function(){alert("load"+brush)};
oHead.appendChild(oScript);
}
(上面这种方式有问题,因为无法控制js的加载顺序,页面经常会报错。新的方式参看本人的这篇文章:javascript库的延迟加载 )
最后又修改了一下页面模板以及样式,精简了一些js。花了半天时间把以前写的一些在javaeye的博客都转过来了。
我的这个在互联网上的家就搭建起来了。
ps:另外发个牢骚,就简单搞了个个人博客,还非要备案。备案就备案吧,但那个工业和信息化部的备案网站实在太烂了,firefox下干脆用不了。提供个帮助文档,还是word格式的。前一段时间反盗版日,大家都批评盗版软件,但连政府网站都不能起个表率作用,非逼着用户装盗版软件。
Related Posts
微软对google说:不要把手伸到我媳妇怀里
javascript库的延迟加载
参加了一下Android技术大会
Javascript(Ajax)开发测试工具
Javascript对象中使用setTimeout和setInterval的问题
css强制换行问题