typecho插件編寫教程7 - Helper類

此文本來發表於個人博客 老高的技術博客 ,歡迎和老高交流!php


Helper類爲咱們封裝了不少與插件有關的操做,而且所有是公共靜態方法,好比獲取系統配置、添加路由、添加面板等功能,是開發插件必不可少的工具。html

插件幫手將默認出如今全部的typecho發行版中.所以你能夠放心使用它的功能, 以方便你的插件安裝在用戶的系統裏.web

Helper類的註釋已經寫的很清楚了,老高在此僅挑幾個經常使用的方法講講。ajax

獲取配置

php# 獲取系統配置
Helper::options();

# 獲取指定插件配置
Helper::options()->plugin('BaiduSubmit');

# 獲取當前插件配置
Helper::options()->plugin(str_replace('_Plugin','',__CLASS__));

路徑安全

用於生成安全的URL,帶有token驗證,若是牽扯到action等核心操做時會用到。系統在驗證請求是會用到$this->widget('Widget_Security')->protect()去驗證來源token。安全

php$s = Helper::security();
echo $s->index('/');

# 輸出相似 http://www.phpgao.com/?_=ce4a9617aa228bb85ba696c9ba9784be

強行刪除某插件

此方法用於卸載插件失敗時的替補方法,老高通常將此方法寫入HELLO_WORLD插件的render方法裏,這樣刷新如下後臺,出問題的插件就被卸載了。typecho

Helper::removePlugin('BaiduSubmit');

路由增刪

若是你的插件須要給系統添加一個新的路由,那麼此方法就能派上用場!工具

路由表保存在表 typecho_options 中的 routingTable中。post

好比老高的插件BaiduSubmit,就用此方法爲系統添加了一個http://yourweb/baidu_sitemap.xml的路由。this

/**
 * 增長路由
 *
 * @access public
 * @param string $name 路由名稱
 * @param string $url 路由路徑
 * @param string $widget 組件名稱
 * @param string $action 組件動做
 * @param string $after 在某個路由後面
 * @return integer
 */
Helper::addRoute('baidu_sitemap', '/baidu_sitemap.xml', 'BaiduSubmit_Action', 'sitemap');

不要忘記在卸載的時候調用Helper::removeRoute('baidu_sitemap');刪除剛纔添加的路由!url

Action

有心的同窗應該可以發現,後臺發送文章的form表單的action地址爲相似http://web/action/contents-post-edit?_=xxx,這個連接表示什麼意思呢?請聽老高分解!

Action是typecho中的一類操做,它對應一條特殊的路由/action/,也就是路由表中的$table[0]['do'],具體內容以下

php[do] => Array
(
        [url] => /action/[action:alpha]
        [widget] => Widget_Do
        [action] => action
        [regx] => |^/action/([_0-9a-zA-Z-]+)[/]?$|
        [format] => /action/%s
        [params] => Array
            (
                [0] => action
            )

    )

從路由表可以看出,下一步咱們須要找到類Widget_Do。咱們能在該類中找到系統默認的action對應關係!

phpprivate $_map = array(
        'ajax'                      =>  'Widget_Ajax',
        'login'                     =>  'Widget_Login',
        'logout'                    =>  'Widget_Logout',
        'register'                  =>  'Widget_Register',
        'upgrade'                   =>  'Widget_Upgrade',
        'upload'                    =>  'Widget_Upload',
        'service'                   =>  'Widget_Service',
        'xmlrpc'                    =>  'Widget_XmlRpc',
        'comments-edit'             =>  'Widget_Comments_Edit',
        'contents-page-edit'        =>  'Widget_Contents_Page_Edit',
        'contents-post-edit'        =>  'Widget_Contents_Post_Edit',
        'contents-attachment-edit'  =>  'Widget_Contents_Attachment_Edit',
        'metas-category-edit'       =>  'Widget_Metas_Category_Edit',
        'metas-tag-edit'            =>  'Widget_Metas_Tag_Edit',
        'options-discussion'        =>  'Widget_Options_Discussion',
        'options-general'           =>  'Widget_Options_General',
        'options-permalink'         =>  'Widget_Options_Permalink',
        'options-reading'           =>  'Widget_Options_Reading',
        'plugins-edit'              =>  'Widget_Plugins_Edit',
        'themes-edit'               =>  'Widget_Themes_Edit',
        'users-edit'                =>  'Widget_Users_Edit',
        'users-profile'             =>  'Widget_Users_Profile'
    );

由此映射關係咱們知道,當咱們須要發佈文章的時候(contents-post-edit),就去調用Widget_Contents_Post_Edit的action方法便可。

當咱們要添加action對應關係的時候,就能夠調用Helper:addAction()執行添加,系統就會添加一條'new_action' => 'some_action'

新增的動做保存在表 typecho_options 中的 actionTable中。

須要提醒的是,當咱們添加一條action後,須要讓其實現類some_action實現Widget_Interface_Do的接口,即必須有實現public function action(),不然調回失敗。

同route同樣,在卸載插件時不要忘了移除action!

菜單 & 面板

這個很好理解,再也不贅述。

手動配置

當咱們須要更自由的配置功能時,能夠在Plugin.php文件中添加public static function configHandle($config)方法,當後臺保存插件設置的時候就會調用此方法而不是默認的簡單保存配置。

phphelper::configPlugin('BaiduSubmit', $config);

完!

相關文章
相關標籤/搜索