终于在网上建了个家

用开源的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强制换行问题


分类 : 心情日记, java


Re: 终于在网上建了个家

大师,我也想建一个,但是偶不懂 (*^__^*) (刘晓燕)

Re: 终于在网上建了个家

呵呵。这个不难啊。找个开源程序搭上就好了。你不也搞网络呢么。