轻量级论坛程序Vanilla的一些修改
也确实很需要捣鼓一番,用惯了Discuz这类论坛的一定会觉得不好上手。
需要对文件进行大改的时候,我不得不下载安装TC了(Total Commander),可以很方便地搜索关键词。
像中文支持之类的,Vanilla官方论坛上有讨论,这里不重复了。
简单记录一下对Vanilla非核心功能的修改。
支持视频网站网址
Vanilla默认支持youtube和Vimeo,发帖时直接贴上视频网址即可。
但是至少在我用的论坛会有冗余代码出现,显示效果也不对劲,我没有修正这个问题,直接给改成支持土豆和优酷了。
用TC搜一下就能找到需要修改的文件是\library\core\class.format.php,522行起,修改为:
protected static function LinksCallback($Matches) {
$Pr = $Matches[1];
$Url = $Matches[2];
if (preg_match(‘/v.youku.com\/v_show\/id_([^&]+).html/’, $Url, $Matches) && C(‘Garden.Format.YouTube’)) {
$ID = $Matches[1];
$Width = 480;
$Height = 400;
$Result = <<<EOT
<div class="Video"><embed src="
EOT;
} elseif (preg_match(‘/www.tudou.com\/programs\/view\/([^&]+)/’, $Url, $Matches) && C(‘Garden.Format.Vimeo’)) {
$ID = $Matches[1];
$Width = 480;
$Height = 400;
$Result = <<<EOT
<div class="Video"><embed src="
EOT;
} else {
$Result = <<<EOT
<a href="$Pr$Url" rel="nofollow">$Pr$Url</a>
EOT;
}
return $Result;
}
修改重点粗体标出。
修改后,在发帖时直接粘贴土豆或优酷的视频网址,就能嵌入视频了。
AboutMe插件
Vanilla默认的个人信息页可能是太简单了,AboutMe插件可以自由增加扩展项目,但这个插件问题比较多。
主要问题是两个:插件无法启动,以及启动后找不到查看入口。
插件启动:
如果出现启用插件时报错,就将插件文件夹修改为AboutMe,然后打开文件夹下的class.aboutme.plugin.php,对文件开头的这一行进行修改:
$PluginInfo[‘About Me’] = array(
改为
$PluginInfo[‘AboutMe‘] = array(
此时在后台应可启动该插件了。
增加标签页:
激活AboutMe之后,在个人资料页的侧边栏可以看到编辑个人资料的按钮,但编辑之后却找不到查看的入口。
在火狐浏览器下可以发现空标签,查看源代码会发现的确是新增了标签,而且链接是正常的,也可以点开,但<a></a>之间没有任何文字。
那就手动在<a>标签之间添加提示文字。
仍然是打开class.aboutme.plugin.php,来到 Add to profile @ tabs – link to view page 这块区域进行修改。
$Sender->AddProfileTab(Translate("AboutMe_ProfileTab"), "/profile/aboutme/view/".$Sender->User->UserID."/".GDN_Format::Url($Sender->User->Name));
在Translate("AboutMe_ProfileTab"), 加上T(‘AboutMe),如果是加了中文,则将文件保存为UTF8格式。
我自己该文件的习惯不太好,经常不是在语言包中添加条目,而是直接在文件中修改的……
所以这一行我是改成了:
$Sender->AddProfileTab(Translate("AboutMe_ProfileTab", T(‘关于我’)), "/profile/aboutme/view/".$Sender->User->UserID."/".GDN_Format::Url($Sender->User->Name));
此时查看用户个人资料,应可看到在“动态”“通知”“讨论”等标签后多了一个“关于我”。
项目修改:
AboutMe当中提供的项目可能并不是你想要的,最简单的修改方法是“汉化”的时候把提示文字改掉。
比如,把“职业信息”之类的改成主页、微博等等,把“兴趣爱好”中的电影、音乐什么的改成QQ、MSN之类的。
这类修改涉及到的是views文件夹下的两个文件,打开就该知道怎么改了。
但这样一来,可能会造成论坛会员填写的内容超过字数限制,需要把字数限制放宽了。
修改的仍然是class.aboutme.plugin.php,在文件最后的那一堆Column()。
格式差不多就是:Column(‘RealName’, ‘varchar(64)’, FALSE)
其中RealName表示的是这一列所填写的项目,varchar(64)表示的是字符数限制,FALSE表示这是必填项,改为TRUE则不是必填。
但是Column(‘BD’, ‘date’, FALSE)这一行改成TRUE也是没用的,生日必须是必填。
至于修改字数限制,改的就是varchar(64),把64换成想要的数字就行了。
这样,AboutMe这个插件算是差不多了……
就是每次修改都要重新输入生日,这个比较麻烦。
Spoiler插件
有剧透或不打算让人一眼就看到的内容时,可以用这个插件隐藏一些文字,此时会出现一个Spoiler提示,点击旁边的“Show”按钮才会显示被隐藏的内容。
但这个东西的目的是防剧透以及有时候开开玩笑的,和Discuz这些论坛的“回复可见”、“注册可见”、“积分可见”之类限制查看强迫注册的Hide功能完全不是一回事。
插件汉化:
这个插件可能需要修改的地方主要就在于“汉化”了。
一般来说,汉化是在语言文件夹的captured.php文件中,添加需要汉化的文件即可:
$Definition[‘英文’] = ‘对应的中文’;
但Spoiler应该不可以这么改(我没尝试),到Spoilers文件夹下,打开class.spoilers.plugin,来到62行,改为:
$Attribution = T(‘隐藏内容:%s’);
保存时另存为UTF8。
接着是把Show也“汉化”了。
打开Spoilers\js\spoilers.js,第22行,改为:
SpoilerButton.value = ‘点击展开’;
保存时另存为UTF8。
标签修改:
这个插件默认是用[spoiler][/spoiler]标签来标出需要隐藏的内容,但我觉得spoiler不太“中式”,打起字来也麻烦些。
把spoiler标签修改为hide,对国人来说应该好用些。
打开class.spoilers.plugin.php,第57行和58行,改为:
$Data->Body = preg_replace_callback("/(\[hide(?:=\"?([\d\w_’,.? ]+)\"?)?\])/", array($this, ‘SpoilerCallback’), $Data->Body);
$Data->Body = str_replace(‘[/hide]’,'</div></div>’,$Data->Body);
其实就是把“spoiler”给改成“hide”而已……
其他
Vanilla默认的编辑器太简单了,得手动写HTML代码,倒是可以装所见即所得编辑器,但我一向讨厌所见即所得。
还好有个VanillaMIU可以周转一下……
但最后还是用了随见即所得==|||
签名档插件我觉得没必要,多了签名档反而影响帖子查看。
其他好像不记得啥了……
剩下的就是那几个大老爷们的事情了,我再不抓紧准备另一件事就有人不得不旷工了orz

