三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之
三人行必有我师焉,择其善者而从之,其不善者而改之

搭建pligg的注意事项和几个程序修改
作者:Neoxone    发表时间: 2009年04月28号,星期二     阅读:56,000 次

      新弄了一个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为例:

  1. INSERT INTO `pligg_modules` (`id`, `name`, `version`, `latest_version`, `folder`, `enabled`) VALUES 
  2. (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,搜索替换一下域名就可以了。但如果本地或主机上有一个安装目录,就需要多做一步了。

  1. 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中。

  1. $link_title = $db->escape($this->title);
  2. $link_title_url = $db->escape($this->title_url);
  3. if($link_title_url == ""){$link_title_url = makeUrlFriendly($this->title);}

再搜索makeUrlFriendly这个函数,找到utils.php。
在makeUrlFriendly这个函数下第二行,

  1. $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函数。

  1. $linkres->link_summary = close_tags(utf8_substr(strip_tags($linkres->content), 0, StorySummary_ContentTruncate - 1));

去除后:

  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函数。
在第一行,加上

  1. $html=preg_replace ("/\'|\"/","", $html);

除此之外,colse_tags函数虽然可以闭合有开始没结束的标签(事后发现,对于复杂的html结构,这个闭合并不能生效,函数需要大改进…)。对于

<p class=”begin”

这样的半个开始标签,函数却没有解决闭合问题。
修改:

  1. if (preg_match_all('/<([a-z]+)(?: .*)?(?<![\/|\/ ])>/iU', $html, $m))
  2.  $opened_tags = $m[1];

改为:

  1. if (preg_match_all('/<([a-z]+)(?: .*)?(?<![\/|\/ ])>/iU', $html, $m))
  2.         {
  3.           $opened_tags = $m[1];
  4.        preg_match_all('/<([a-z]+)(?: .*)?(?<![\/|\/ ])>/iU', $html, $m);
  5.        $opened_tags2=$m[1];
  6.        if(count($opened_tags2)!=count($opened_tags))
  7.         $html .= '>';
  8.    }

整个函数变为:

  1. function close_tags($html)
  2. {   $html=preg_replace ("/\'|\"/","", $html)
  3.    $single_tags = array('meta','img','br','link','area');
  4.    if (preg_match_all('/<([a-z]+)(?: .*)?(?<![\/|\/ ])>/iU', $html, $m))
  5.         {
  6.           $opened_tags = $m[1];
  7.        preg_match_all('/<([a-z]+)(?: .*)?(?<![\/|\/ ])>/iU', $html, $m);
  8.        $opened_tags2=$m[1];
  9.        if(count($opened_tags2)!=count($opened_tags))
  10.         $html .= '>';
  11.    }
  12.    else
  13.     return $html;
  14.    if (preg_match_all('/<\/([a-z]+)>/iU', $html, $m))
  15.        $closed_tags = $m[1];
  16.    else
  17.     $closed_tags = array();
  18.    if (count($closed_tags) == count($opened_tags))
  19.           return $html;
  20.    for ($i=count($opened_tags)-1; $i>=0; $i--)
  21.    {
  22.        if (!in_array($opened_tags[$i],$single_tags))
  23.        {
  24.            if (!in_array($opened_tags[$i], $closed_tags))
  25.                   $html .= '</'.$opened_tags[$i].'>';
  26.        }
  27.    }
  28.    return $html;
  29. }

整个函数对于

  1. $html = " <p><b>bold text</b>sdasd<a href='howdy.html";

可以完好闭合,
但复杂点的,如

  1. $html = "<p>s<a href='as' >asd</a>adasd</p><p><b>bold text</b>sdasd<a href='howdy.html";

就不能完好闭合了。

待续改进。

标签: , , ,

9 条评论 发表在“搭建pligg的注意事项和几个程序修改”上

  1. 笨笨郎 说:

    兄弟,我很想用PLIGG做个站,但我不是学计算机的,希望你能帮我汉化下,你的博客我已经订阅了,希望你以后能有更多有关PLIGG修改的文章出来,谢谢! 我QQ308808755

    回复

    oneboys 回复:

    @笨笨郎,
    恩,这个汉化我用的不是常规方法。一来,工作量大,二来汉化不完全。
    等我觉得自己的程序没什么大碍了,汉化的也差不多了。我可以把修改的程序发布出来。

    回复

    笨笨郎 回复:

    @oneboys, 兄弟 ,程序有进展么

    回复

    PLIGG 回复:

    @笨笨郎, PLIGG官方最新版有中文。安装中可选。

    回复

  2. 笨笨郎 说:

    谢谢,非常期待,坐等:)

    回复

  3. rexsky 说:

    又遇一高手也是个CODER…谢谢…我就不怎么会用rss importer..是不是自动更新呢?如果加一个FEED??谢谢.

    回复

    oneboys 回复:

    @rexsky,
    rss importer可以通过RSS源批量导入文章。
    增加一个feed的步骤关键点在我文章里都提到了。

    回复

  4. pligg.com 说:

    搭建pligg的注意事项和几个程序修改 | CSSASS…

          新弄了一个digg类站:cssass的分享      …

  5. Tuixy 说:

    看博主写的文章已经快一年了,我还刚接触到这个,先研究下,谢谢分享!

    回复

留下回复

):9:( ):8:( ):7:( ):6:( ):5:( ):4:( ):3:( ):2:( ):20:( ):1:( ):19:( ):18:( ):17:( ):16:( ):15:( ):14:( ):13:( ):12:( ):11:( ):10:(