插件系统详解

本文介绍emlog插件系统的调度方法,emlog的实现方法很简单,定义一个全局的钩子,钩子里内置很多函数,需要的时候直接调用就行了。

插件功能实现

init.php最后

从缓存读取调用的插件,直接include_once这个插件。(不是应该用require_once吗) 然后看定义的钩子函数

/**
 * 该函数在插件中调用,挂载插件函数到预留的钩子上
 *
 * @param string $hook
 * @param string $actionFunc
 * @return boolearn
 */
function addAction($hook, $actionFunc) {
    global $emHooks;
    if (!@in_array($actionFunc, $emHooks[$hook])) {
        $emHooks[$hook][] = $actionFunc;
    }
    return true;
}

/**
 * 执行挂在钩子上的函数,支持多参数 eg:doAction('post_comment', $author, $email, $url, $comment);
 *
 * @param string $hook
 */
function doAction($hook) {
    global $emHooks;
    $args = array_slice(func_get_args(), 1);
    if (isset($emHooks[$hook])) {
        foreach ($emHooks[$hook] as $function) {
            $string = call_user_func_array($function, $args);
        }
    }
}

首先在模板内内置 类似
doAction('post_comment', $author, $email, $url, $comment);

插件里面直接调用 addAction("钩子名称", "调用的函数") 来引用函数即可

Emlog内置了许多钩子可以方便插件 内置挂载点及说明

插件界面

根据路由器的指引来到 plugin_controller 控制器

<?php
    /**
    * 前台加载插件页面
    *
    * @copyright (c) Emlog All Rights Reserved
    */


    class Plugin_Controller {
    function loadPluginShow($params) {
    $plugin = isset($params[1]) && $params[1] == 'plugin' ? addslashes($params[2]) : '' ;
    if (preg_match("/^[\w\-]+$/", $plugin) && file_exists(EMLOG_ROOT."/content/plugins/{$plugin}/{$plugin}_show.php")) {
    include_once("./content/plugins/{$plugin}/{$plugin}_show.php");
    }
    }
    }

这里就是插件页面前台显示的函数

插件前台显示页面 如果想让插件在前台输出一个页面,可以在插件中定义一个 pluginname_show.php 的文件。
此时插件的前台显示地址为:http:博客地址/?plugin=pluginname
这样就可以在pluginname_show.php文件构建插件的页面显示。

插件后台显示配置页面 如果你想让插件在后台输出一个设置页面,可以在插件中定义一个 pluginname_setting.php 的文件 此时插件的后台配置地址为:http:博客地址/admin/plugin.php?plugin=pluginname

后台的插件显示相关

这些定义都在 plugin_model.php 中,可自行查看

大概就是执行插件的激活与关闭 在emlog后台的插件管理中,点击每个插件后的状态按钮即可激活/关闭插件。

如果插件需要,可以给插件增加 plugin_callback.php 文件,其中包含两个函数: callback_init()为插件激活时调用 callback_rm()为插件关闭时调用

results matching ""

    No results matching ""