DokuWiki 命名空间管理插件

为了更好的组织结构,Dokuwiki提供了命名空间这个功能,那怎么管理命名空间的,其实可以安装插件去管理

Add New Page Plugin:新建界面

https://www.dokuwiki.org/plugin:addnewpage

Move Plugin:方便移动页面和命名空间

https://www.dokuwiki.org/plugin:move

Pagemove plugin:也是方便移动页面和命名空间

https://www.dokuwiki.org/plugin:pagemove

上面三个插件提供了创建和修改命名空间的功能。

当然如果不安装插件也可以创建,比如你有一个界面中的连接指向了一个新的截面,但是这个界面是在命名空间中,但是这个命名空间不存在,那么系统会自动创建一个命名空间。当然也可以使用Add New Page这个插件创建

参考:

http://www.ligenyuan.cn/wiki/reproduce:dokuwiki_page_name

https://www.dokuwiki.org/plugin:addnewpage

Dokuwiki主题/模板制作

Dokuwiki主题/模板制作

之前也有写过,不过已经删掉了,因为提到的方法什么的都过时了,很多内容也没说清楚。看评论时发现这方面的东西还是有人需要的,于是决定重新写一遍。对于主题/模板的制作,除了官方文档之外,也可以在符合 Dokuwiki 标准的 starter 模板基础上进行修改,不少不错的模板都是基于它的。和官方文档类似,这里以 Starter 模板为例。

先安装 Starter 模板,并将 lib/tpl/starter 重命名为 lib/tpl/[你的模板名称] (名称应仅包含 a-z 和 0-9),然后在配置管理器里选择这个新模板。

目录结构

Starter 模板的目录下有不少文件,其中必要的有:

  • main.php: 主要的页面布局文件,决定我们一般所看到的页面的布局
  • detail.php: 图片的详细信息页布局
  • mediamanager.php: 媒体管理器/选择器窗口的布局
  • style.ini: 样式控制文件,决定每个样式表应用的情形(屏幕、打印等),并定义一些全站通用的颜色
  • template.info.txt: 模板的信息文件,包括名字、作者的信息等。

页面布局 (HTML+PHP)

页面布局的三个文件中,通常只需要修改 main.php,因为它影响一般所看到的页面的布局。没有特别需求的话,detail.phpmediamanager.php 不必修改,也可以直接复制默认模板的。布局文件是HTML+PHP,可以调用 Dokuwiki 提供的模板函数来显示标题、维基内容等等,也可以调用全局变量。Starter 模板的 main.php 比较复杂,可以先看一个简单的例子

<html>
  <head><title><?php echo $conf['title']?></title></head>
  <body>
    <div class="dokuwiki">
      <?php tpl_content()?>
      <?php tpl_indexerWebBug()?>
    </div>
  </body>
</html>

这会在标题栏显示网站名称,在页面上显示维基的内容。其中 $conf 是一个全局变量,包含 Dokuwiki 的配置信息。而 tpl_content() 是一个模板函数,可以显示带目录的文章内容。另外一个tpl_indexerWebBug()是每个模板都必须有的函数,否则搜索的索引可能无法建立。

模板函数中的 tpl_includeFile() 可以引用模板目录下的其它文件,从而方便用户添加自定义的内容。比如在 main.php 中写

<head>
    <?php tpl_includeFile('meta.html') ?>
</head>

可以将当前目录下的 meta.html 的内容放入。另外,在被引用的文件中也可以使用 PHP 代码。默认模板和 Starter 模板都预先定义了一些钩子,参见 Include Hooks

页面样式 (CSS)

对于模板的样式,Dokuwiki 会先读取 style.ini 文件 (参考 devel:style.ini)。这个文件决定需要哪些 CSS/LESS 文件以及每个文件应该用于何种情形(屏幕,打印等),同时对全站通用的颜色占位符进行定义。比如

[stylesheets]
css/basic.css  = screen
css/design.less = screen
css/print.css  = print   [replacements]
__text__ = "#333" ; @ini_text

这表示 css/basic.csscss/design.less 将应用于屏幕显示,而 css/print.css 用于打印,同时定义了__text__占位符代表的颜色。之后只需编辑相应的 CSS/LESS 文件就可以了。在 CSS 中使用颜色占位符的示例如下

body {
    color: __text__;   
}

如果是 LESS 则是

body {
    color: @ini_text;
}

DokuWiki简介及插件推荐

DokuWiki简介及插件推荐

字数476 阅读5348 评论4 喜欢3

DokuWiki简介

一个简洁的Wiki系统,使用PHP+文本数据库,安装配置都比较简单,基本符合「够用就好」原则。唯一感觉不爽的就是媒体管理器,很不顺手。

在以往的工作实践中,常用它来进行公司内部的交流与协作,有效保障了信息的沟通。

官网地址是 http://www.dokuwiki.org,有中文界面,可以在左侧选择。

安装

下载、解压,浏览器访问后提示 「Setup Error」,选择 「 run the installer」继续。

一般来说,如果权限没问题的话,就会进入到 安装工具 页面,右上角可以更改语言为简体中文。

填写名称、超级用户帐号、内容发布许可协议等信息后保存继续即可。

配置

简单说一下管理页:

  • 用户管理器:添加和管理用户
  • ACL管理器:修改用户/组对于页面和命名空间的权限
  • 插件管理器:可以在这里更改插件,支持远程下载安装
  • 配置设置:关于Dokuwiki的设置,如模版、显示等设置项,一些插件安装后的设置项也在这里

模版

也就是常说的 主题,下载后解压到 lib/tpl 目录,然后在 管理 - 配置设置 中进行选择即可。

更多的主题可以在 官网的 Extensions页 找到

插件

插件可以通过 管理 - 插件管理器 进行安装,这里介绍几个个人比较喜欢的:

  • imgpaste:在编辑器直接粘贴就可以插入剪贴板中的图片,可以用来快速上传截图。
  • Note:可以在页面中插入醒目的提示文字,有几种默认图标和样式。

Dokuwiki插件与主题推荐

Dokuwiki插件与主题推荐

只是一个列表和简要的功能介绍,具体使用看相关文档

主题

Vector是模仿Wikipedia/Mediawiki最新样式的主题,自定义比较能力强。另外其实Dokuwiki现在的默认主题非常不错,也很适合写博客。

如果希望自己写,可以参考这里的文档以及Dokuwiki提供的一个初始模板

插件

外观

  • wrap:几乎涵盖大多数外观、排版上的要求。

交互

  • discussion:添加评论功能,需要pagelist插件的支持。
  • disqus: 添加评论功能,使用 DISQUS 的服务。
  • avatar:使用gravatar头像,多用于评论里的头像显示
  • captcha:验证码

标签

  • tag:用标签来组织内容
  • tagentry:在编辑栏下提供所有标签的列表,方便选择
  • cloud:标签云

导航

  • indexmenu:功能强大。但我不喜欢它默认的样式,又懒得去改。
  • indexmenu2:功能也不错,相对indexmenu略微逊色点
  • pagequery:前面两个主要用于生成树状结构的导航,这个完全不一样,非常值得一看。
  • simpleindex: 生成类似内置索引的简单导航,仅适用于顶层命名空间。
  • simplenavi: 生成一个简单的导航。

其他

还有很多看起来非常不错的,例如画图、化学、图片/视频浏览等,不过自己没用过。

tagentry – 编辑框下显示tag列表

tagentry – 编辑框下显示tag列表

tagentry用于在编辑框下面列出所有的tag,并带有复选框。

bug修补:

  • tag列表无法显示。
./action.php.old  2009-09-18 13:32:00.000000000 +0400
+++ ./action.php	2013-05-30 12:29:47.000000000 +0400
@@ -55,7 +55,7 @@
       $pos = $event->data->findElementByAttribute('type','submit');
       if(!$pos) return; // no button -> source view mode
       #echo "DEBUG: <pre>".print_r($event->data,true).'</pre>';
-      if (   !empty($event->data->_hidden['prefix'])
+      if (   empty($event->data->_hidden['prefix'])
           || !empty($event->data->_hidden['suffix'])) return;
       if ($event->data->findElementByType('wikitext')===false) return;
     }elseif(!$event->data['writable']){
@@ -72,7 +72,7 @@
     }
 
     if ($this->getConf('tagsrc') == 'All tags' && $thlp) {
-      $alltags=$this->_gettags($thlp);
+      $alltags=array_map('trim', idx_getIndex('subject', '_w'));
     } else {
       $alltags=$this->_getpages($tagns);
     }
  • 不兼容ACE编辑器。

尚无方案。

Gallery – 列出图片目录插件

Gallery – 列出图片目录插件

语法

{{gallery>namespace}}

{{gallery>namespace:someimage.jpg}}

{{gallery> namespace}} (right aligned)
{{gallery>namespace }} (left aligned)
{{gallery> namespace }} (centered)

{{gallery>http://www.23hq.com/rss/schabloni}}

参数

参数以?开头,用&分割,所有参数的否定在前面加no,比如:cache,nocache

{{gallery>images:vacation?image_*.jpg&80x80&crop&lightbox}}
// 所有
{{gallery>?crop&lightbox}}

<markdown> <table class=“inline”>

<tbody><tr class="row0">
	<th class="col0 leftalign"> Parameter                      </th><th class="col1 leftalign"> Default         </th><th class="col2 leftalign"> Description    </th>
</tr>
<tr class="row1">
	<td class="col0 leftalign"> <code><em>&lt;number&gt;</em>x<em>&lt;number&gt;</em></code>  </td><td class="col1"> <code>120x120</code> </td><td class="col2"> 设置缩略图大小, 除非设定了crop选项,会保持缩略图长宽比.</td>
</tr>
<tr class="row2">
	<td class="col0 leftalign"> <code><em>&lt;number&gt;</em>X<em>&lt;number&gt;</em></code>  </td><td class="col1"> <code>800X600</code> </td><td class="col2"> 设置<code>direct</code>模式下链接到的图片大小,会保持长宽比. 注意是大写 <code>X</code>.</td>
</tr>
<tr class="row3">
	<td class="col0 leftalign"> <code><em>&lt;number&gt;</em></code>               </td><td class="col1 leftalign"> <code>5</code>           </td><td class="col2"> 每行gallery表里可显示的图片数目. 如果指定为0不使用表格,所有缩略图顺序排列 </td>
</tr>
<tr class="row4">
	<td class="col0 leftalign"> <code>=<em>&lt;number&gt;</em></code>              </td><td class="col1 leftalign"> <code>=0</code>          </td><td class="col2"> 限制显示给定数目的图片. <code>0</code>代表所有. </td>
</tr>
<tr class="row5">
	<td class="col0 leftalign"> <code>+<em>&lt;number&gt;</em></code>              </td><td class="col1 leftalign"> <code>+0</code>          </td><td class="col2"> 跳过显示前面的number张图片. 和上面的选项一起很有用.</td>
</tr>
<tr class="row6">
	<td class="col0 leftalign"> <code>~<em>&lt;number&gt;</em></code>              </td><td class="col1 leftalign"> <code>~0</code>          </td><td class="col2"> Add a pagination for the thumbnails displaying the number of given thumbnails per page. <code>0</code> disables pagination. Pagination is added through JavaScript - when no JavaScript is available all thumbnails are displayed </td>
</tr>
<tr class="row7">
	<td class="col0 leftalign"> <code>cache</code>                      </td><td class="col1 leftalign"> enabled         </td><td class="col2"> Usually the output of the created gallery is cached. When the images in your selected namespace change, you have to manually force an update of the gallery page's <a href="http://www.unixtech.org/caching" class="wikilink2" title="caching" rel="nofollow">cache</a>. To disable the cache for the page showing the gallery, set <code>nocache</code> as option. </td>
</tr>
<tr class="row8">
	<td class="col0 leftalign"> <code>crop</code>                       </td><td class="col1 leftalign"> disabled        </td><td class="col2"> 使用给定的缩略图大小,不保持长宽比,裁剪多出部分 </td>
</tr>
<tr class="row9">
	<td class="col0 leftalign"> <code>direct</code>                     </td><td class="col1 leftalign"> disabled        </td><td class="col2"> 缩略图链接到给定大小的图片而不是图片描述页 </td>
</tr>
<tr class="row10">
	<td class="col0 leftalign"> <code>lightbox</code>                   </td><td class="col1 leftalign"> disabled        </td><td class="col2"> Show images in a fancy JavaScript modal browsing window, see below for details. Setting this option automatically implies the <code>direct</code> mode </td>
</tr>
<tr class="row11">
	<td class="col0 leftalign"> <code>reverse</code>                    </td><td class="col1 leftalign"> disabled        </td><td class="col2"> Reverse the order of the displayed images </td>
</tr>
<tr class="row12">
	<td class="col0 leftalign"> <code>recursive</code>                  </td><td class="col1 leftalign"> enabled         </td><td class="col2"> Find images in the given namespace and all sub namespaces </td>
</tr>
<tr class="row13">
	<td class="col0 leftalign"> <code>random</code>                     </td><td class="col1 leftalign"> disabled        </td><td class="col2"> Sort images randomly. You might want to use <code>nocache</code> as well </td>
</tr>
<tr class="row14">
	<td class="col0 leftalign"> <code>modsort</code>                    </td><td class="col1 leftalign"> disabled        </td><td class="col2"> Sort images by file modification date </td>
</tr>
<tr class="row15">
	<td class="col0 leftalign"> <code>datesort</code>                   </td><td class="col1 leftalign"> disabled        </td><td class="col2"> Sort images by EXIF date </td>
</tr>
<tr class="row16">
	<td class="col0 leftalign"> <code>titlesort</code>                  </td><td class="col1 leftalign"> disabled        </td><td class="col2"> Sort images by EXIF title </td>
</tr>
<tr class="row17">
	<td class="col0 leftalign"> <code>showname</code>                   </td><td class="col1 leftalign"> disabled        </td><td class="col2"> Show filename below thumbnails </td>
</tr>
<tr class="row18">
	<td class="col0 leftalign"> <code>showtitle</code>                  </td><td class="col1 leftalign"> disabled        </td><td class="col2"> Show the EXIF tag <code>Headline</code> as title below thumbnails </td>
</tr>
<tr class="row19">
	<td class="col0 leftalign"> anything containing a <code>*</code>    </td><td class="col1"> jpg,gif,png images </td><td class="col2"> This can be used to filter the list of files found in the given namespace. <code>*</code> work as simple wildcard symbol. </td>
</tr>

</tbody></table> </markdown>

关于lightbox

基于https://github.com/splitbrain/prettyphoto/tree/merged,源自PrettyPhoto

dw2pdf – 导出 pdf 插件

dw2pdf插件用于导出一个wiki页面为一个pdf文件。官网https://www.dokuwiki.org/plugin:dw2pdf

安装

  1. 下载并安装插件
  2. 下载mPdf库最新版,替换掉插件自带的
  3. 修改mpdf/config.php,大致44行,将useAdobeCJK改为true: 此时导出中文正常
  4. 修改Dokuwiki主题模版,添加导出按钮
// Dokuwiki template
// Insert:   <form class="button" method="get" action="<?php wl($ID)?>">
    <div class="no">
    <button type="submit" class="button">
    <img src="<?php echo DOKU_BASE?>lib/images/fileicons/pdf.png" alt="PDF Export" />
    </button>
        <input type="hidden" name="do" value="export_pdf" />
        <input type="hidden" name="rev" value="<?php global $REV; echo $REV?>" />
        <input type="hidden" name="id" value="<?php echo $ID?>" />
    </div>
</form>   // in lib/tpl/dokuwiki/main.php
// after   <!-- PAGE ACTIONS -->
<div id="dokuwiki__pagetools">
    <h3 class="a11y"><?php echo $lang['page_tools']; ?></h3>
    <div class="tools">
        <ul>
            <?php
                tpl_action('edit',      1, 'li', 0, '<span>', '</span>');
                tpl_action('revert',    1, 'li', 0, '<span>', '</span>');
                tpl_action('revisions', 1, 'li', 0, '<span>', '</span>');
                tpl_action('backlink',  1, 'li', 0, '<span>', '</span>');
                tpl_action('subscribe', 1, 'li', 0, '<span>', '</span>');
                tpl_action('top',       1, 'li', 0, '<span>', '</span>');
            ?>   // DW2pdf-Icon will be on the floating menu.

模版语法

<TEXT> The following replacement patterns can be used within the header and footer files.

@PAGE@ – current page number in the PDF @PAGES@ – number of all pages in the PDF @TITLE@ – The article’s title @WIKI@ – The wiki’s title @WIKIURL@ – URL to the wiki @DATE@ – time when the PDF was created (might be in the past if cached) @BASE@ – the wiki base directory @TPLBASE@ – the PDF template base directory (use to reference images) Remark about Bookcreator: The page depended replacements are only for citation.html updated for every page. In the headers and footers the ID of the bookmanager page of the Bookcreator is applied.

@ID@ – The article’s pageID @PAGEURL@ – URL to the article @UPDATE@ – Time of the last update of the article @QRCODE@ – QR code image pointing to the original page url </TEXT>

注意事项

  1. include插件兼容性

<TEXT> To work with the include plugin you have to add dw2pdf to its action_plugin_include supportedModes member variable

var $supportedModes = array('xhtml', 'metadata','dw2pdf');

Otherwise you may have problems with caching. </TEXT>

Dokuwiki 语法插件开发

Dokuwiki 语法插件开发

对语法标签的匹配采用PHP preg函数进行。

插件类需要实现以下方法:

  • getType() 返回此插件定义的模式类型。比如标签内部是纯文本等。
  • getSort() 返回此插件的优先级。数字越小,优先级越高。比如:需要替换系统的<code>标签。
  • connectTo($mode) 用来向词法分析器Lexer注册模式匹配的正则表达式。
  • postConnect() 当在connectTo()中注册的是起始正则表达式,则需要实现此函数,注册中止正则表达式。
  • handle($match, $state, $pos, Doku_Handler &$handler) 处理匹配出的内容,返回在渲染器中使用的内容。
  • render($mode, Doku_Renderer &$renderer, $data) 渲染内容。

当需要的时候,可以重载以下方法:

  • getPType() 返回生成内容的段落的形式。
  • getAllowedTypes() 返回允许内联的模式。(默认array())
  • accepts($mode) 返回是否允许内联自己的模式。

参考:devel:syntax_plugins devel:parser

Dokuwiki 侧边栏配置

Dokuwiki 侧边栏配置

默认的模版 dokuwiki,支持侧边栏。

  • (1)配置里有个 sidebar 侧边栏的页面名称,这里填写 页面路径
  • (2)创建这个页面。

此时,侧边栏就出来了。

当同级命名空间下有相应的侧边栏页面,则使用此页面。

相关插件

simplenavi

根据访问者权限列出所有命名空间,默认自动展开当前页面所属空间,不能折叠此空间。

命名空间页面链接自动指向:start页。

{{simplenavi>}}

可以指定起始空间:{{simplenavi>some:namespace}}
simpleindex

根据访问者权限列出所有命名空间,默认自动关闭所有命名空间。

<simpleindex>

可以指定排除的空间:<simpleindex ns1,ns2>
indexmenu

基于dtree,

navi

利用一个页面中的链接生成导航。自动根据当前页面展开命名空间。

Sidebar Template

自动加载本命名空间的sidebar页面。展示形式跟Dokuwiki的站点地图一样。

NsToC

列出指定命名空间的标题,可以指定标题的层级。场景:比如图书的目录等。

其他

pageindex,catlist, dir, nspages, pagequery