新弄了一个digg类站:cssass的分享
digg类程序以前有玩过国产的wodig,那是在其第三季的时候,那时bug很多,自己还给官方贡献过几个bug修改方法呢。弄了一段时间后,就被遗弃了。
事隔一年有余,又想起digg类程序的好处来:聚合,分享,内容为王,民主推荐。
这回则找了几个国外程序来玩。首先是找了PHPDug,这个在一年前是和wodig做过对比选择的,当时还是0.7版,这个程序功能很简单,就是这个原因当时就选择了wodig,同样因为这个原因现在我拿他做首选。可惜,安装在服务器上却无法工作。(所谓的服务器,只虚拟主机耳。相信是主机系统之过也。)
首选遭毙,第二选乃是据说有“digg类中的wordpress”之称的pligg。
不过,也是问题重重,特别是对于我们中文环境下。
凭着不断摸索,总结了一些安装搭建的注意事项,希望对后来者有用。
1,我安装在服务器上之后(本人服务器之过,应属个别问题),_modules表中无法写入数据,即后台无法启用modules(类似wordpress中的plugins)。其他的modules也就算了,其中却有一个Rss Importer。可以导入RSS数据,我觉得是必不可少的。
既然,无法通过后台PHP程序插入数据库,那在MYSQL中直接使用SQL语句插入总没问题吧。果然,可以启用。
SQL语句,以启用Rss Importer为例:
- INSERT INTO `pligg_modules` (`id`, `name`, `version`, `latest_version`, `folder`, `enabled`) VALUES
- (2, 'RSS Importer', 0.9, 0, 'rss_import', 1);
2, 我在本地安装的时候,发现中文数据是乱码(有众多???号)。在服务器上安装没问题。其实这是因为我本地创建数据库的时候选择的charset等有问题,我选择的是默认default(我本地的SQL工具为SQLyog)。
正确的设置是charset:utf8;collation:utf8_general_ci;
3,RSS Importer的用法。虽然启用了这个module。但用的时候,刚开始却没摸到门路。其实我很质疑rss importer的界面设计。rss importer参数设置有三步。
第一步:填Feed Name和URL。
第二步:点edit进入,按需要修改一些参数。
第三步:(我所忽略的就是这一点)点Add a new field link 。对应XML数据标记和pligg的变量,可以点击Examine this feed 做参考。一般是title——link_title;link——link_url;description——link_content
4,如何将本地和主机上的数据互搬。本来也只需把导出的SQL,搜索替换一下域名就可以了。但如果本地或主机上有一个安装目录,就需要多做一步了。
- Location Installed', '$my_pligg_base', '/digg', '', '/(folder name)', 'Pligg Base Folder',
其中的digg就是安装目录了。如果是根目录,则留空。
这个设置的在settings.php中$my_pligg_base = ”;但如果修改这里,却是无效的,反而会被SQl数据所重置。
另外补充一个,数据库连接的设置在/libs/dbconnect.php中。
如果,要将本地或空间的文件覆盖对方,这个文件是不能拿去覆盖的。settings.php也不要拿去覆盖。
一个仍无头绪,但绕道解决的问题——汉化问题。
本来这个汉化,只需修改language.conf文件就可以的,但我修改后,中文却是显示乱码。而在后台language选项下修改也不行。修改后中文显示的是Hex码。。。
最后,我无奈直接在tpl文件中修改,工作量大了很多。
几个程序上的修改。
1,于中文信息的输入,往往出现link_title_url too long的问题。
我们找到link.php中。
- $link_title = $db->escape($this->title);
- $link_title_url = $db->escape($this->title_url);
- if($link_title_url == ""){$link_title_url = makeUrlFriendly($this->title);}
再搜索makeUrlFriendly这个函数,找到utils.php。
在makeUrlFriendly这个函数下第二行,
- $output = utf8_substr($input, 0, 240);
这个数值改大一点就可以了。
然后可能还需修改sql数据库的结构,将_inks表下link_url_title数据项的Len值留空或改大。
2,虽然可以在后台设置文章允许的html tags。但通过rss importer导入的文章显示的缩略文却是屏蔽标签的。所以如果要让首页显示的缩略文也支持html tags。可以在modules/rss_import/templates/import_fields_center.tpl中去除strip_tags函数。
- $linkres->link_summary = close_tags(utf8_substr(strip_tags($linkres->content), 0, StorySummary_ContentTruncate - 1));
去除后:
- $linkres->link_summary = close_tags(utf8_substr($linkres->content, 0, StorySummary_ContentTruncate - 1));
3,缩略文允许html tags之后,就有了一个问题:缩略文是截取原文中前400个字符的(默认),假如截取的末尾是
<a href=”abcde
这半个”号就会引发html闭合问题。
解决方法就是搜索文中的”和’号,替换为空。我们将这个代码加在close_tags的函数定义中。
找到html1.php 中的close_tags函数。
在第一行,加上
- $html=preg_replace ("/\'|\"/","", $html);
除此之外,colse_tags函数虽然可以闭合有开始没结束的标签(事后发现,对于复杂的html结构,这个闭合并不能生效,函数需要大改进…)。对于
<p class=”begin”
这样的半个开始标签,函数却没有解决闭合问题。
修改:
- if (preg_match_all('/<([a-z]+)(?: .*)?(?<![\/|\/ ])>/iU', $html, $m))
- $opened_tags = $m[1];
改为:
- if (preg_match_all('/<([a-z]+)(?: .*)?(?<![\/|\/ ])>/iU', $html, $m))
- {
- $opened_tags = $m[1];
- preg_match_all('/<([a-z]+)(?: .*)?(?<![\/|\/ ])>/iU', $html, $m);
- $opened_tags2=$m[1];
- if(count($opened_tags2)!=count($opened_tags))
- $html .= '>';
- }
整个函数变为:
- function close_tags($html)
- { $html=preg_replace ("/\'|\"/","", $html);
- $single_tags = array('meta','img','br','link','area');
- if (preg_match_all('/<([a-z]+)(?: .*)?(?<![\/|\/ ])>/iU', $html, $m))
- {
- $opened_tags = $m[1];
- preg_match_all('/<([a-z]+)(?: .*)?(?<![\/|\/ ])>/iU', $html, $m);
- $opened_tags2=$m[1];
- if(count($opened_tags2)!=count($opened_tags))
- $html .= '>';
- }
- else
- return $html;
- if (preg_match_all('/<\/([a-z]+)>/iU', $html, $m))
- $closed_tags = $m[1];
- else
- $closed_tags = array();
- if (count($closed_tags) == count($opened_tags))
- return $html;
- for ($i=count($opened_tags)-1; $i>=0; $i--)
- {
- if (!in_array($opened_tags[$i],$single_tags))
- {
- if (!in_array($opened_tags[$i], $closed_tags))
- $html .= '</'.$opened_tags[$i].'>';
- }
- }
- return $html;
- }
整个函数对于
- $html = " <p><b>bold text</b>sdasd<a href='howdy.html";
可以完好闭合,
但复杂点的,如
- $html = "<p>s<a href='as' >asd</a>adasd</p><p><b>bold text</b>sdasd<a href='howdy.html";
就不能完好闭合了。
待续改进。
兄弟,我很想用PLIGG做个站,但我不是学计算机的,希望你能帮我汉化下,你的博客我已经订阅了,希望你以后能有更多有关PLIGG修改的文章出来,谢谢! 我QQ308808755
回复
oneboys 回复:
四月 29th, 2009 at 08:01
@笨笨郎,
恩,这个汉化我用的不是常规方法。一来,工作量大,二来汉化不完全。
等我觉得自己的程序没什么大碍了,汉化的也差不多了。我可以把修改的程序发布出来。
回复
笨笨郎 回复:
五月 6th, 2009 at 07:55
@oneboys, 兄弟 ,程序有进展么
回复
PLIGG 回复:
七月 27th, 2009 at 21:37
@笨笨郎, PLIGG官方最新版有中文。安装中可选。
回复
谢谢,非常期待,坐等:)
回复
又遇一高手也是个CODER…谢谢…我就不怎么会用rss importer..是不是自动更新呢?如果加一个FEED??谢谢.
回复
oneboys 回复:
九月 17th, 2009 at 17:01
@rexsky,
rss importer可以通过RSS源批量导入文章。
增加一个feed的步骤关键点在我文章里都提到了。
回复
搭建pligg的注意事项和几个程序修改 | CSSASS…
新弄了一个digg类站:cssass的分享 …
看博主写的文章已经快一年了,我还刚接触到这个,先研究下,谢谢分享!
回复