此文本來發表於個人博客 老高的技術博客 ,歡迎和老高交流!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
有心的同窗應該可以發現,後臺發送文章的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);
完!