Archive

Archive for April, 2009

我为什么要回帖

April 28th, 2009 Woody No comments

现在有太多的内容都在向你灌输“回帖是一种美德”之类的话了,甚至都恨不得让你在论坛里看帖子时,先回帖再看。我真的无语了,这样的回帖除了制造信息垃圾还能制造出什么来? Read more…

Categories: Misc Tags:

Discuz新插件机制

April 25th, 2009 Woody No comments

Discuz新的制件机制已经开始进行开发体验了。和以前的相比,新的插件核心要好得多,起码不用动不动就改模板代码了。新版本的Discuz在模板里预留了很多的插件输出位置,这样用户在升级时就不用一个个修改原来的代码,再把插件重新安装一次。 Read more…

Categories: Software Tags: ,

Discuz编辑器的一个Bug及解决方法

April 7th, 2009 Woody No comments

当在后台设置Discuz的默认编辑器模式为“所见即所得模式”时,在对某一楼帖子进行回复时(帖内左下方点回复),应该显示该发帖人的楼号和ID,如1# admin 这样的模式,但是却显示源码,且右侧源码框是没有勾选的。将源码框勾选后再取消,才会显示发帖人信息。如图:
dz_editor

这个Bug其实是由默认模板中的JavaScript引起的,原因在于没有对相应的情况进行正确的处理。因为涉及的代码不多,解决的方法也比较简单。

在Discuz的templates/default/post.htm文件中,找到openEditor函数(大约在814行附近),如下:

814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
function openEditor() {
	try {
	{if $action == 'reply' && !$message}
		if($('fastpostmessage') && $('fastpostmessage').value) {
			textobj.value = $('fastpostmessage').value;
			$('fastpostmessage').value = '';
		}
	{/if}
	{if $action == 'edit' || $action == 'reply' && $repquote}
		if(wysiwyg) {
			initialized = false;
			newEditor(1, bbcode2html(textobj.value));
		} else {
			newEditor(0);
		}
		setCaretAtEnd();
	{else}
		newEditor(wysiwyg);
		if(editbox) {
		{if ($action != 'edit' || !$attachments) && (!$swfupload || !$swfattachs)}
			editbox.className = 'autosave max';
		{else}
			editbox.className = 'autosave';
		{/if}
		}
	{/if}
	// ....
}

问题出在831行的newEditor(wysiwyg)上,并没有进行BBCode到HTML的转换,所以看到的仍然是BBCode的代码形式。把这一行改成下面五行就应该可以解决了:

if(wysiwyg) {
	newEditor(1, bbcode2html(textobj.value));
} else {
	newEditor(0, textobj.value);
}
setCaretAtEnd();

其中最后的setCaretAtEnd的作用是将光标定位到1# xxx这类的文字末尾,感谢kissmile的建议。

另外,以后我会挑选一些Discuz的Bug记在这里,一方面是为了我自己的记录,另一方面也是为了在新版本尚未发布时能给大家一个解决方案,避免等待新版本的无奈。

Categories: Software Tags: