inc/plugin.php
辅助(Helper)插件
兼容的版本 Dokuwiki
2017-07-20
The missing download url means that this extension cannot be installed via the Extension Manager. Please see Publishing a Plugin on dokuwiki.org. Recommended are public repository hosts like GitHub, GitLab or Bitbucket.
This extension has not been updated in over 2 years. It may no longer be maintained or supported and may have compatibility issues.
插件名称包含下划线,无法产生受欢迎度点数。
This extension is not in the 'plugin' or 'template' namespace and is therefore ignored.
辅助(Helper)插件使插件开发人员可以使用其他现有插件的功能。例如维基页面列表显示,不需要重新发明轮子——而不是使用Pagelist插件。看看辅助插件的列表。
如何使用一个辅助插件
辅助插件可以用一种简单的方式从另一个插件中使用。
$tag = $this->loadHelper('tag'); // 或 $this->loadHelper('tag', true); if($tag) { $entries = $tag->tagRefine($entries, $refine); }
loadHelper($name, $showmsg = true)
是一种由所有插件继承的方法。它需要两个参数,而第二个是可选的。
- 第一个参数是要辅助插件的名称。
- 第二个表示是否应该在加载帮助插件失败时显示错误消息(这个消息不是本地化的,也不能本地化)。
自2013-05-10 Weatherwax 以来 loadHelper()
也是可用的在语法插件。
如果你想在2012-10-13“Adora Belle”的版本中使用一个辅助插件,并且在你必须使用plugin_load($type, $name)
函数在之前。它接受两个参数:
- 第一个是插件类型,
- 第二个是你想要使用的插件的名字。
此外 plugin_isdisabled($name)
还可以用来检查插件是否可用。
if(!plugin_isdisabled('tag')) { $tag = plugin_load('helper', 'tag'); $entries = $tag->tagRefine($entries, $refine); }
插件对象的重用
默认的DokuWiki重新使用它的插件实例。这可以通过在plugin类中添加一个isSingleton()
函数来防止。 见 实例化.
例如,Sqlite助手为每个调用保留单独的实例。所以你可以有更多的数据库实例:
if(!plugin_isdisabled('sqlite')) { $DBIa = plugin_load('helper', 'sqlite'); if($DBIa) { $DBIa->init('testa',dirname(__FILE__).'/db/'); } $DBIb = plugin_load('helper', 'sqlite'); ... }
如何编写一个辅助插件
一个辅助插件 example 需要:
- 类名
helper_plugin_example
- 是存储在一个文件
lib/plugins/example/helper.php
.
此外,一个plugin.info.txt文件是必要的。关于插件及其文件的详细信息,以及如何创建更多的帮助组件,请参考插件文件结构。
所需的函数
getMethods()
返回所支持的方法的信息<helper methods>()
你的公共辅助方法,通过 getMethods() 列出_<private methods()
(可选的)当您需要私有方法时,请在名称前面加上下划线。
继承的函数
- 请参阅常见的插件功能,用于所有插件的继承函数。例如:本地化、配置和自省。
getMethods()
辅助插件还应该返回所支持的方法的信息。getMethods()
应该返回一组方法,每个方法都有一个方法名、描述、参数和返回值的数组。参数和返回值是带有参数描述的数组,描述作为键和PHP对象类型为值。
例子:
public function getMethods() { $result = array(); $result[] = array( 'name' => 'getThreads', 'desc' => 'returns pages with discussion sections, sorted by recent comments', 'params' => array( 'namespace' => 'string', 'number (optional)' => 'integer' ), 'return' => array('pages' => 'array'), ); // 和更多的支持方法... return $result; }
辅助方法
这项工作是根据getMethods()
中列出的方法来完成的。当然,帮助插件类可以包含更多的私有方法。最好的做法是使用私有方法的名称以下划线开头。也不应该在getMethods()
中列出。