在 Joomla! 网站上搭建 Wiki 知识库,实现多人在线联编(译)功能是无法回避的一个实际需求。我们已经实现了 通过自定义页头 + CSS 实现 Joomla! 与 Tikiwiki 的外观整合。不过,萝卜白菜、各有所爱,尽管从“架设多语种联合翻译平台”的角度讲,Tikiwiki 是最合适的选择;但是如果仅仅需要一个小型的、单语种的资料库式 wiki,那么 Tiki 的体积就过于庞大了。况且,到目前为止,还没有实现 Joomla! 与 Tikiwiki 的用户整合。而另一个维基程序 Dokuwiki 则已经拥有了与 Joomla! 用户同步的功能。因此,对于后一种简单维基需求,我推荐安装 Dokuwiki。本文将演示 Joomla! 1.5.10Dokuwiki 2009-02-14 版本之间的整合过程。

Dokuwiki


整合所需软件:

  1. Joomla! 1.5.10 中文版
  2. Dokuwiki 2009-02-14 中文版
  3. Dokuwiki Bridge 桥接器

本教程演示的安装环境:

  • 服务器:XAMPP 1.7
  • Joomla 1.5 安装在 http://localhost/1510
  • Dokuwiki 安装在 http://localhost/1510/dokuwiki

 

详细整合步骤:

第一步:安装 Joomla 1.5.10

参看:《7步完成 Joomla! 1.5 安装》

在本例中,安装 Joomla 时管理员帐号为 admin,密码为 000000 。

安装成功后,访问 http://localhost/1510 即可看到 Joomla 前台首页。

第二步:安装 Dokuwiki

在 xampp\htdocs\1510 目录下新建一个子目录名为 dokuwiki,把 Dokuwiki 的安装包文件解压进去。然后通过浏览器访问如下地址:

http://localhost/1510/dokuwiki/install.php

就能看到 Dokuwiki 的安装画面。在右上角选择语言为 zh,就切换为简体中文安装界面(直接访问 http://localhost/1510/dokuwiki/install.php?l=zh 这个地址作用相同):

Dokuwiki installation page
Dokuwiki installation page

 

由于 Dokuwiki 是基于纯文本的 wiki 程序,不需要任何数据库支持。因此我们简单填写一下管理员帐号就能完成安装过程。为了与 Joomla 的用户帐号区别开,我们在安装 Dokuwiki 时创建的管理员帐号为 joomlagate,密码为 000000,将 wiki 类型选择为第二种:公开的维基(只有注册会员才能编辑):

Create Dokuwiki Admin Account
Create Dokuwiki Admin Account

 

填写了上述信息后,点击左下角的“保存”按钮,就完成了 Dokuwiki 的安装过程,接下来看到如下画面:

Dokuwiki installation finished
Dokuwiki installation finished

请按照屏幕提示,及时删除 install.php (在 dokuwiki 根目录下)。然后点击给出的链接就能看到安装好的 Dokuwiki 前台:

 

Dokuwiki Start Page
Dokuwiki Start Page
 

到这里就完成了 Dokuwiki 的安装。从安装路径可以看出来,我们是将 Dokuwiki 安装在 Joomla 根目录下,如果你的安装路径关系与此不同,请注意在后面的描述中不要照搬本文的设置,而需要按照你真实的安装路径来修改相关代码。

 

第三步:安装、设置 Dokuwiki 桥接器

用文本编辑器打开 dokuwiki/conf/dokuwiki.php 这个文件,在大约第69行,找到如下代码:

$conf['authtype']    = 'plain';

修改为:

$conf['authtype']    = 'joomla'; 

打开 Dokuwiki 桥接器,选择针对 Joomla 1.5 的压缩包,里面只有一个文件 joomla.class.php ,将这个文件解压到 xampp\htdocs\1510\dokuwiki\inc\auth 目录下。不要修改这个文件的名称。 

接下来要对桥接器文件进行修改,主要是输入 Joomla 的管理员帐号和安装路径。

用文本编辑器打开 joomla.class.php 这个文件,在大约第12行,可以看到如下代码:

        $conf['superuser'] = "admin";

如果你的 Joomla 管理员帐号正好是 admin,就不用修改了(本例正是如此);如果你的 Joomla 管理员用户名不是 admin,请修改这一行代码中的 admin 为你的真实帐号。

在这一行代码下方大约第14行,可以看到如下代码:

        include_once("../configuration.php");

这个指的是 Joomla 根木下的 configuration.php 文件的路径。表示的方法是 joomla/configuration.php 相对于 dokuwiki/index.php 文件的路径。请根据你安装 Joomla 和 Dokuwiki 的相对关系来设置这一项,本例中 Dokuwiki 安装在 Joomla 根目录下,正好符合这个默认设置,因此无需修改。

到此,Dokuwiki 桥接器的设置已经完成了。

第四步:进阶设置

现在请访问 http://localhost/1510/dokuwiki/doku.php 打开 Dokuwiki 的前台首页,点击右下角的“登录”按钮,可以看到如下的登录表单:

Dokuwiki Login Form
Dokuwiki Login Form

 

现在我们用 Dokuwiki 的管理员帐号 joomlagate 来登录,你会发现无法登录!这是因为桥接器已经生效了,Dokuwiki 现在认证会员身份的根据是 Joomla 的用户表,而不是 Dokuwiki 自身的用户表。

请再看上面的截图,在 Dokuwiki 的登录表单上仍然有“注册”链接,很显然这个链接将使用 Dokuwiki 的注册功能来创建新用户,而桥接之后 Dokuwiki 只“认”Joomla 里面的用户。因此,我们必须禁用 Dokuwiki 自身的注册功能。

Dokuwiki after Login in
Dokuwiki after Login in

我们使用 Joomla 的管理员帐号 admin 及密码 000000 登录,现在可以顺利登入 Dokuwiki(这足以证明已经桥接成功)。登入之后点击右下角的“管理”按钮(如上图所示),然后点击“配置设置”,可以看到比较长的一个页面,有很多参数。我们找到“停用 DokuWiki 功能”这一节(如下图所示),将“注册”勾选,然后点击页面左下角的“保存”。现在点击页面右下角的“退出”按钮,退出登录后再次点击“登录”按钮,就会发现在登录表单上不再显示“注册”链接了。

Disable Dokuwiki Registration
Disable Dokuwiki Registration

那么,我们在安装 Dokuwiki 时所创建的那个管理员帐号 joomlagate 岂不是作废了?也未必。你现在可以在 Joomla 后台的“用户管理”中手动创建一个新用户,用户名就是 joomlagate,密码还是原来的 000000,这样就可以让 joomlagate 这个帐号能够继续登录 Dokuwiki。

提醒:以上步骤是针对 Joomla! 1.5.10 描述的,对于 Joomla! 1.0.x 与 Dokuwiki 的整合,与这个过程完全一致,唯一不同的就是桥接器文件使用针对 J1.0 平台的那个版本。

第五步:外观整合

通过以上4步,我们完成了 Joomla 1.5.10 与 Dokuwiki 之间的用户整合。美中不足的是,访问 wiki 页面时就离开了 Joomla 的导航系统,如果用户想访问某个 Joomla 菜单,还必须回到网站首页才行。

幸运的是,我在测试这个桥接器过程中摸索到了实现外观整合的方法。通过外观整合,使得 Dokuwiki “看起来”像是嵌入在 Joomla 模板中,用户在使用 wiki 页面过程中也能够随时访问 Joomla 的顶部导航菜单(如果 Joomla 模板使用侧栏导航系统就不太适用此方法)。

下面简单介绍一下:

原理:

Dokuwiki 在自己的模板系统中已经预留了允许用户“自定义页头页脚”的功能。我们就是通过这个方法来将 Joomla 模板的页头(包括顶部水平导航菜单)和页脚(版权、备案信息、联系电话等)添加到 Dokuwiki 页面上去,从而实现 Joomla 与 Dokuwiki 的外观整合。

步骤:

  1. 从 Joomla 前台模板中剥离出页头和页脚。
  2. 打开 dokuwiki/lib/tpl/default/main.php ,在 <body> 标记之后插入页头代码。(或者,在同一个目录下创建一个 topheader.html 文件,里面仅有 Joomla 模板的页头代码即可);
  3. 在 dokuwiki/lib/tpl/default/main.php 文件的 <head> 部分插入 Joomla 模板中有关的的 JS 及 CSS 链接;
  4. 打开 dokuwiki/lib/tpl/default/footer.html 这个文件,在文件末尾插入 Joomla 模板的页脚代码(或者,在同一个目录下创建一个  dwtb.html 文件,里面仅有 Joomla 模板的页脚代码即可);
  5. 刷新前台的 Dokuwiki 页面,如果看到显示了 Joomla 模板的页头、页脚,但是中文有乱码,那么就是忘记了将上述修改的文件保存为 utf-8 编码格式;

结果:

下图演示的是我用 Joomla! 1.5.10 自带的默认模板 rhuk_milkyway 与 Dokuwiki 默认模板外观整合的结果。

 

Dokuwiki with Joomla Header and Footer
Dokuwiki with Joomla Header and Footer

 

讨论:Joomla! 1.5 与 Dokuwiki 整合的相关话题

  1. 本文介绍的整合方法之所以能成功,首先必须感谢 Dokuwiki 的作者 Andreas Gohr。如果不是他预先给 Dokuwiki 留下了允许通过外部用户数据表来验证登录身份的功能,那么这个整合过程就要复杂得多。

    请允许我多说一句:我想提醒所有喜爱开源事业的程序员,请在设计你的软件结构时,充分考虑到与其它软件的“挂接”,留下充足的扩展接口。就这一点来说,我非常赞赏 Andreas Gohr 的做法。
  2. 这个整合方法的缺陷是:用户需要分别在 Joomla 和 Dokuwiki 里面登录,尽管用户名和密码都是统一的;同时,退出 Joomla 或 Dokuwiki 时也不能同步退出另一方软件。曾经有人开发过一个 Dokuwiki Auto Login Plugin,但是测试时似乎不成功,因此本文未进行深入介绍。如果你是一位开发高手同时也喜欢 Dokuwiki,那么欢迎你完善这个整合方法。

 

 

{quickdown:541}

 {quickdown:831}

{quickdown:359}