Drupal

关于Drupal的安装、使用、问题、修改等的讨论。也是目前唯一的Drupal中文交流论坛。

Drupal + Wiki 的应用 (二)

总算有时间实现 (一) 中的构想了,网站的框架在 http://wiki.kzeng.info ,还在 alpha 状态。有一段时间想用 mediawiki 和 它的 extension 来实现 (一)中的设想,但是研究了一下,发现 Mediawiki 处理扩展(模块)的能力与 Drupal 相比差了很远,同时它的扩展插件也不如 Drupal 丰富,所以最终还是回到了 Drupal 上来,轻车熟路。目前的wiki站的搭建只完成了基础工作和两个最重要的功能的实现。

首先在基建方面,选用了 wikitoolsfreelingking 模块来实现 wiki 的基本功能,同时也使用了 bbcode 模块来帮助编辑,因为觉得就 rich 文本编辑而言,wiki 与 bbcode 相比,不一定会快到哪里,并且 bbcode 支持的效果更丰富。另外用了 quicktag 来实现简单的 bbcode 按钮添加功能。现在 Drupal 模块之间的协调工作做得不错,很多不同作者的模块都能无缝的配合使用;

其次,主题方面,用了系统自带的主题,并选择“时间的灰尘”色调,不打算在这方面投入过多的时间,实用主义嘛;

再次,用 biblio 模块将本地的 bibtex 格式的 reference 引入,实现了自己的 online citation manager 的功能,这个功能非常的必要,因为经常会看到一篇以后可能会需要的文章,如果不能有一个集中方便的地方储存,很快马上就会忘了地方,同时 biblio 模块为reference 新建了一种 node type,方便管理,并且可以快速的利用 wiki 组建添加评论和批注,biblio 模块可以利用 bibtex 里的关键词自动生成 tag,结合 Drupal 本身的 freetagging,非常的好用;

第四,用 tasklist 模块实现了 online project manager 的功能,把一些大的工作分割处理,方便时间安排;

第五, 用 frontpage 模块只做了首页简单的 shortcut;

第六,用 access control 来控制内容的呈现;

下一步的构想:

首先,利用 views 模块进一步优化整个网站的组织结构;

其次,加强 tag 组织网站的能力,利用主要的tag来方便快捷的组织网站的内容;

再次,利用 views, data api,和 calendar 做好自己的 online calendar,记录project相关的重要的 deadline,并和网站的其他部分相结合

继续修正中, 如果一切 OK,可以利用 profile 把整套网站做成一个 package 来发布。

当然,最后还要叹服一句 Drupal 的强大功能。本来这个网站是想和 blog 相结合的,但是考虑到这个网站对于稳定性的需要,所以单独安装了一套 drupal,如果一切运行良好,估计会维持现状而不会迅速的跟着 drupal 升级而升级。

Blog分类: 

Drupal 6.0 Beta 1 发布

其实昨天晚上就在 feed 订阅里看到了这则消息,最近惫懒(现在经常用词拿不准,所以勤翻字典,《金山词霸》里对“惫懒”的解释是:涎皮赖脸;调皮。这个解释是如何来的?有些吃惊,还是觉得惫懒,就是惫与懒的意思),所以没有提笔评论,今天才补上。Drupal 6 的特色,发布消息中已经说明,本地安装测试了一下,第一眼印象没有太大的变化,保持了 Drupal 5 以来的连贯性,不过内部的改动不少,性能也有不错的提高,譬如主题系统,几乎是大变革了。其实 Drupal 相关的开发中,还是比较喜欢研究主题系统,虽然 blog 的灵魂是内容,但是”衣服”也要常换。Drupal 6.0 的 Theme 系统已经在向  Module 系统靠拢,不仅在结构上有所变化,在可用的函数与 JS 特性上也有不少进步,呵呵,打算把现在的主题升级以后,就把  Blog 升级为 Drupal 6,因为现在其实用的附加模块并不多,所以可以紧跟时代潮流:)

Blog分类: 

Windows Live Writer Beta 3 发布

写 blog ,离不开一个方便的离线 blog 编辑工具,其实这块市场蛮大的,但是之前只有少数几个公司在做,后来微软来了,就有了一统江湖的阵势。Windows Live Writer 挺不错的,和 Drupal 等各种 Blog 工具结合的很好,并且功能强大,单单图片处理一项,就现实出了巨人的实力。 Beta 3 今天发布,修正了一些bug,增加了一些功能。只是安装麻烦了不少,并且一不小心会被装上 Windows Live 家族的所有的产品,不过用起来还是一样的方便(潜台词:还没有发现什么大的变化),可以看到的是右边的工具栏里多了 “Insert Video” 的选项,还有就是支持把图片传上 Picasaweb (!)。呵呵,可以安装体验一下。

Blog分类: 

抵御 Spam 的进攻

网络的 spam 如幽灵般的细沙,一旦在网站里发现一个空隙,就源源不断的涌入。虽然 Drupal 的 akismet 和 spam 模块可以近乎完美的识别 spam 评论,但是他们在实施上有一个问题:spam 先提交给数据库再进行过滤。这样以来每次 cron 运行的时候都要删除数以万记的 spam ,加重了服务器端的压力,所以最好的办法是能够在 spam bot 留下评论之前就可以阻止它,于是有了各种各样的 captcha。 先用图像的 captcha, 这也是时下最流行的一种方式,但是有时图像里的数字字母过于难识别,即便是真人看到,也未必能辨别出来,所以又改用了算术题 captcha,留言是必须做一道的加法题,这种方法虽然方便了访客,但是却很容易被 spam bot 破解,因此仍然无法有效的阻止 spam 评论,所以最好有一种介于图像与简单数学题之间的辨别方式,于是就有了 Captcha Riddler 模块,可以自己设计一个问题,让访客留言的时候解答,以判断其是否是“人类”。这个模块还可以配合 i18n ,适合多语言网站使用。至于我这里,因为访客都是使用中文的,所以设置的问题很简单“一年有多少个月”,为了方面没有汉语输入法的访客输入,因此答案用阿拉伯数字即可。问题虽然简单,但是最近一段时间来成功的阻挡了 spam bot 的侵袭,也减轻了 akismet 和spam 模块的压力,效果很好,如果有同样的问题,不妨一试。

Blog分类: 

Drupal + Wiki 的应用 (一)

很早以前就结合过 Drupal 和 Wiki。但是由于 Wiki 模块的“死亡”,网站里留下了不少无法更新的残骸。譬如历史年表,现在还有一些杂乱无章的内容,有经验的 Drupal 使用者能够看出那是 Filter 失效后的残留 (Drupal 考古学 ^_^)。对于第三方的模块的使用从那时起就有些担忧,万一它不再更新了,一部分网站的内容就死掉了。所以坚决不把网站的核心重点内容放在对第三方模块的依赖上。但是现在 Drupal 小组的设立对于模块的开发是一个很大的帮助,把个人的努力转化成团队的合作,对于模块的持续支持来说是一件好事。

所以重新想再在 Drupal 的框架下搭建一个 Wiki。准确的说是一个 Private Wiki,主要是方便自己使用的。但是它随时也可以转换为公开的 Wiki。目前的用途,大概主要是为了管理学术文献(当然同时也可以做其它用途)。现在的学术,已经发展成为了一种“考古”行业,任何一个想法,在真正付诸于实践之前都要翻看 20 年的期刊,防止别人已经做过,或者做的更好了。诚然, Hal Varian 在 How to Build an Economic Model in Your Spare Time(PDF) 里说开始做东西以前不要看 Literature,我老板也这么说,但是却又是不得不看的,倒不是因为牛顿说过要站在巨人的肩上,是因为 Time Constraint,毕竟还没有达到既有闲又有钱的境界。写 Paper,就像在地里种庄稼,只有不在意收获才能悠哉游哉的试试石头边偶然发现的一棵杂草能不能培育成一种味道有些像烤的七分焦的咖啡豆的小麦。真正的农民都是直接去种子站查找良种的。

Drupal 现在有两个并行的 wiki 项目,一个是 Wikitools;另一个是 Liquid。Wikitools 需要和 freelinking 或者 pearwiki filter一起使用;而 Liquid 独立的发展了一整套 wiki 的系统,它也可以和 pearwiki filter 等结合使用。但是 Liquid 的开发者曾经突然消失过很久,并且他的贡献也不是很稳定,所以决定用 Wikitools。因为 Wikitools 有自己的 group,至少还能和开发者保持着沟通,并且他的开发者一直非常积极的在维护着这个项目。这个 Wiki 小组已经做好了一个 Drupal 的 Wiki Installation Profile,可以直接快速的完成 Wiki 的设置。不过由于他们的这个安装配置是针对公共 Wiki 的,很多功能并不符合我的要求,所以还是打算自己从头来做。现在本地服务器上测试一下,如果有了比较稳定的结果,就可以正式上线了:)

Blog分类: 

The Age of Revolution

image在革命的纪念日前做完了Commune 这个主题 。看上去还不错。春天已经过去,再顶着“春天花花”有些不伦不类,所以火热的革命一下:)顺手找到了 Eugène Delacroix 的 Liberty Leading the People, 拿装点一下门面,算是为新的外观主题揭幕。尝试了按照 Zen 的标准去写这个主题,但是最后一步还是坐了一些改动。带着枷锁跳舞固然是一种享受,但是最终还不愿意被它束缚,去放弃页面下的 Related Blogs 的部分,以及不加区分的把 Tags 和分类放在一起。还是按照就的习惯来吧。其实我觉得 Zen 的框架设计的并不好。有些地方用起来不是很方便。

另外,对于 Blog 本身也做了些小小的改动,Blog 的正式名称更改为 寱语 。之所以把前面的 kzeng 去掉了,是因为我已经“垄断”了这个词在网络上的适用。在 Google 中文里搜索 “寱语” 会有 15500 个页面,搜索 “ 寱语 -kzeng ” (意思是包含 寱语  但是并不包含 kzeng)只有 1400 个页面。这个词大于 90% 的用途都在 kzeng 这里,所以就不必在重复了,//grin :-) 另外,网站的说明也改为“ kzeng's blog ” 了,写的东西挺杂的,不好再用一两个词来描述了。呵呵,翻开新的一页!:)

Blog分类: 

新版本的 Blog 外观主题

B2

2006 年 4 月 4 日开始使用“春田花花”主题;2006 年 12 月 9 日对春田花花做了改进,一直用到了现在,所以想换一下了,昨天大致在 Firework 里设计了一下, PNG 的草样已经做好(上图),现在需要做的就是移植到 Drupal 上。新的主题暂时命名为“公社 (commune)”吧,主要用深红,浅黄色和灰色三种颜色,有点革命的感觉?(^_^)。技术上没有太大的突破,不过想采用 Zen 的标准,所有的设计完全用 CSS 来控制,不再自己更改 *.tpl.php 和 PHPtemplate.php,这算得上是唯一的小挑战吧。新的主题会简洁很多,字也会大很多。呵呵,既然叫做 Commune,又赶在这个时间上,算是应景纪念了法国大革命吧。七月十四日攻陷巴士底狱。

Free Tags: 
Blog分类: 

轻松搭建强大的 Drupal 本地测试环境

<

p>

看到了 Cartson 的这篇在 Windows Vista 下手动配置 Apache + PHP + MySQL + PHPmyAdmin 的文章,非常的详尽,但是对于新手来说可能略为复杂了一些,所以介绍另外一种比较“傻瓜”的搭建方式,同样的适用于 Windows Vista 和 XP。搭建这样的本地服务器,需要用到一个叫做 Web-Developer Server Suit 的软件,这个软件是众多 WAMP 软件中的一款,它的独到之处在于直接整合 Drupal, Wordpress,PHPBB2,Mediawiki 等时下流行的内容管理和发布系统。

Web-Developer Server Suit 最新的一个版本是 1.95,它的核心部分包括:

  • Apache 2.2 HTTP Server
  • MySQL 5.0 Database
  • PHP 5.2 and Perl 5.8 Scripting Languages
  • GUI WAMP-stack Controller
  • Dynamic DNS Service

扩展应用程序包括:

  • Tomcat Servlet/JSP Container
  • mod_aspdotnet ASP.NET Host Interface
  • OpenSSL Cryptography Toolkit
  • mod_security Web Application Firewall
  • phpMyAdmin MySQL Administration

网络软件包括:

  • Joomla
  • Drupal
  • WordPress
  • MediaWiki
  • phpBB

到它的网站的下载界面下载安装包,Windows 下直接点击运行安装,不需要做任何的设置,安装结束后重新启动计算机就可以了运行本地服务器了。输入 local host,可以看到一个 dir 列表,点击 webdeveloper.php,显示了所有需要的信息,譬如 “组件”(components)中列出了所有安装的组件:

Components
  • Apache 2.2.4
    • httpd.conf (optimized and minimized, modular design, secured, setup for SSL, PHP5, CGI, mod_security, mod_fastcgi, mod_deflate, mod_perl, Access Control)
    • mod_ssl (OpenSSL 0.9.8e)
    • mod_deflate (zlib 1.2.3)
    • mod_fastcgi 2.4.2
  • OpenSSL 0.9.8e
  • Perl 5.8.8
    • libwww-perl
    • libwin32
    • NET::SSLeay
    • URI
    • HTML::Template
    • HTML::Parser
    • Compress::Zlib
    • FCGI
  • mod_perl 2.0.3
  • mod_security 2.1.0
  • PHP 5.2.1
  • MySQL 5.0.37
    • DBI
    • DBD::mysql
    • DBD::mysqlPP
    • Net::MySQL
  • phpMyAdmin 2.10.0.2 (Setup for multi-user environment; Relational Features enabled)
  • analog 6.0
Web Framework Applications
  • Joomla 1.0.12
  • Drupal 5.1.0
  • WordPress 2.1.2
  • MediaWiki 1.9.3
  • phpBB2 2.0.22

 Drupal 等软件以及准备好了,在 Server Information标题下,按照需要点击所要安装的网络软件即可,譬如 Drupal,只要点击 http://localhost/drupal/install.php 就可以完成安装了,直接跳过了输入数据库地址、数据库用户名、密码等普通安装所必须的步骤,非常的便捷。完成安装以后,就可以在 localhost/drupal 中运行你的 drupal 了。其他的内容管理程序也类似。

此外,这个页面还给出了数据库以及 PHPmyAdmin等的信息,譬如通用的用户名和密码,也方便你安装其他程序。而安装 Tomcat 等程序,只要按照提示即可完成。所以非常推荐新手使用:)

Blog分类: 

Views 模块教程(六):区块与 argument 的使用

通过利用 views 模块制作“按月归档”的页面和区块(block)来讨论一下 argument 的使用。Drupal 其实有按月归档这个模块,叫做 Monthly Archive , 是 Mars 做的,不过用 views 模块实现这样的功能也不难。我的 blog 的侧边栏就是一个实例,点击 “blog 归档” 下面的“更多”就可以进入按月归档的页面,看到所有 blog 内容的档案。

开工。 在 views 的管理界面下点击“add”标签,添加新的视图。名称是 Archive ,给所有的访客访问的权限,描述随意。然后“页面”项下选择 provide page view,提供页面视图, url 按照惯例是 archive。 viwe type 随意,我这里选择的是习惯的 teaser list,标题“按月归档”。使用 pager (分页)。其它的默认即可。

然后在“区块”项下选择 provide block,提供区块。view type 考虑到是在侧边栏现实,所以选择 List view (列表显示)。区块的标题“Blog 归档”,你想继续叫“按月归档”也行。一个区块现实的页面链接数,5 个。然后选择 [more] link。

Fields项下,只需要添加一个字段(field),Node:Title。Option 设为 As Link,不可sort。这里定义的是最基层的视图的显示,譬如这个链接下的显示:http://www.kzeng.info/archive/200704 。

过滤器项下,第一个过滤器, Node: Published 只选择发布的内容;第二个过滤器, Node: Type 只选择 Blog entry ,当然你可以按照你的需要选择显示的类型。

Sort项下选择 Node: Created Time 按照降序排列。

最后让我们来看 argument 项,这个argument实际上提供了按月归档的列表,是高一层的视图,这里选择 Node: Posted Month + Year ,然后 summary, sorted descending,标题“按月归档”。搞定。简单的说,这个 argument 帮助生成了子页面的链接,非常的方便。

按月归档的页面可以在 yoursite.com/archive 下访问,而相应的区块需要在区块管理中启用。你可以适当的更改 CSS 来美化这个列表。

下面的是导出的 views 的代码,可以直接导入 views 管理中使用和研究。

 $view = new stdClass();
  $view->name = 'Archive';
  $view->description = 'Monthly Archive';
  $view->access = array (
  0 => '1',
  1 => '2',
);
  $view->view_args_php = '';
  $view->page = TRUE;
  $view->page_title = '按月归档';
  $view->page_header = '';
  $view->page_header_format = '4';
  $view->page_footer = '';
  $view->page_footer_format = '4';
  $view->page_empty = '';
  $view->page_empty_format = '4';
  $view->page_type = 'teaser';
  $view->url = 'archive';
  $view->use_pager = TRUE;
  $view->nodes_per_page = '50';
  $view->block = TRUE;
  $view->block_title = 'Blog 归档';
  $view->block_header = '';
  $view->block_header_format = '4';
  $view->block_footer = '';
  $view->block_footer_format = '4';
  $view->block_empty = '';
  $view->block_empty_format = '4';
  $view->block_type = 'list';
  $view->nodes_per_block = '5';
  $view->block_more = TRUE;
  $view->block_use_page_header = FALSE;
  $view->block_use_page_footer = FALSE;
  $view->block_use_page_empty = FALSE;
  $view->sort = array (
    array (
      'tablename' => 'node',
      'field' => 'created',
      'sortorder' => 'DESC',
      'options' => 'normal',
    ),
  );
  $view->argument = array (
    array (
      'type' => 'monthyear',
      'argdefault' => '5',
      'title' => '按月归档',
      'options' => '',
      'wildcard' => '',
      'wildcard_substitution' => '',
    ),
  );
  $view->field = array (
    array (
      'tablename' => 'node',
      'field' => 'title',
      'label' => '',
      'handler' => 'views_handler_field_nodelink',
      'options' => 'link',
    ),
  );
  $view->filter = array (
    array (
      'tablename' => 'node',
      'field' => 'status',
      'operator' => '=',
      'options' => '',
      'value' => '1',
    ),
    array (
      'tablename' => 'node',
      'field' => 'type',
      'operator' => 'OR',
      'options' => '',
      'value' => array (
  0 => 'blog',
),
    ),
  );
  $view->exposed_filter = array (
  );
  $view->requires = array(node);
  $views[$view->name] = $view;

Blog分类: 

Views 模块教程(五):标签实例

继续我们解剖 tracker 视图的教程。我们知道 Tracker 模块提供的 trakcer 视图,除了能显示所有的最新文章外,还能显示已登录用户的所有文章,这两项内容在 tracker 页面下的两个标签(Tab)中显示。 其实,views 模块可以方便帮助我们制作标签。首先我们创建“所有最新文章”标签下的视图。这个与我们在上两个教程中讨论的 trakcer 视图的设置基本相同,但是需要做一个小的更改,首先把 url 改为 tracker/all ;同时,按照习惯,把这个 views 的名称命名为 tracker_all。然后在 menu 项下勾选: provide menu; provide menu as tab; make default menu tab。这是在告诉 views 模块,这个视图提供菜单,菜单输出为标签,把这个标签当作默认显示的标签。

然后我们需要创建 “我的文章”这个标签,首先 url 设定为 tracker/mine (这个其实随意,你把它设定为 tracker/mypost 也可以),名称命名为 tracker_mine ,同样勾选 provide menu; provide menu as tab,但是不要勾选 make default tab,因为只能有一个默认的显示。此外,如果想控制两个标签的先后顺序,可以通过 tab weight 来设定。Tab title 填写为 “My Posts”。因为这个视图是只显示现在登入的这个用户的,所以我们要过滤掉其它的作者的文章,这就需要设定 filter 了,在 filter 那里新添加一个 Node: Author is Current User 把它设定为  "Is Equal to " "currently logged in user" 即可。然后保存。工作完成。

现在通过 yoursite.com/tracker 来访问你的视图,你就可以看到两个标签页面了,呵呵,很方便吧!

Blog分类: