恶心的代码是如何形成的
上一篇我贴出了一段令人恶心的代码,自然要思考一下这样的代码是如何形成的。显示,每个人都不希望这样的代码出自自己的手中,所以我更倾向于认为这种代码的出现是一种迫不得已的结果。 Read more…
上一篇我贴出了一段令人恶心的代码,自然要思考一下这样的代码是如何形成的。显示,每个人都不希望这样的代码出自自己的手中,所以我更倾向于认为这种代码的出现是一种迫不得已的结果。 Read more…
论坛软件到底应该做成什么样的?我认为永远不要忘记论坛的核心:发表和回复。但如今感觉到越来越多的人在追求一些华而不实的东西。 Read more…
Discuz新的制件机制已经开始进行开发体验了。和以前的相比,新的插件核心要好得多,起码不用动不动就改模板代码了。新版本的Discuz在模板里预留了很多的插件输出位置,这样用户在升级时就不用一个个修改原来的代码,再把插件重新安装一次。 Read more…
当在后台设置Discuz的默认编辑器模式为“所见即所得模式”时,在对某一楼帖子进行回复时(帖内左下方点回复),应该显示该发帖人的楼号和ID,如1# admin 这样的模式,但是却显示源码,且右侧源码框是没有勾选的。将源码框勾选后再取消,才会显示发帖人信息。如图:
这个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记在这里,一方面是为了我自己的记录,另一方面也是为了在新版本尚未发布时能给大家一个解决方案,避免等待新版本的无奈。