资讯专栏INFORMATION COLUMN

typecho插件编写教程7 - Helper类

Carson / 2415人阅读

摘要:输出类似强行删除某插件此方法用于卸载插件失败时的替补方法,老高一般将此方法写入插件的方法里,这样刷新以下后台,出问题的插件就被卸载了。比如老高的插件,就用此方法为系统添加了一个的路由。

此文原本发表于我的博客 老高的技术博客 ,欢迎和老高交流!


Helper类为我们封装了很多与插件有关的操作,并且全部是公共静态方法,比如获取系统配置、添加路由、添加面板等功能,是开发插件必不可少的工具。

  

插件帮手将默认出现在所有的typecho发行版中.因此你可以放心使用它的功能, 以方便你的插件安装在用户的系统里.

Helper类的注释已经写的很清楚了,老高在此仅挑几个常用的方法讲讲。

获取配置
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方法里,这样刷新以下后台,出问题的插件就被卸载了。

Helper::removePlugin("BaiduSubmit");
路由增删

如果你的插件需要给系统添加一个新的路由,那么此方法就能派上用场!

  

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

比如老高的插件BaiduSubmit,就用此方法为系统添加了一个http://yourweb/baidu_sitemap.xml的路由。

/**
 * 增加路由
 *
 * @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");删除刚才添加的路由!

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对应关系!

php    private $_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);

完!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20962.html

相关文章

  • typecho插件编写教程1 - 从HelloWorld说起

    摘要:看起来很简单吧其实里面还是有不少坑的。激活插件方法如果激活失败直接抛出异常禁用插件方法如果禁用失败直接抛出异常获取插件配置面板配置面板个人用户的配置面板插件实现方法插件流程插件的基本流程是这样的。下一节老高会更详细的说明插件类的方法。 最近老高正在编写一个关于typecho的插件,由于typecho不像wordpress,有那么多的文档参考,写一个插件还是遇到了很多的坑,不过随着研究的...

    yintaolaowanzi 评论0 收藏0
  • typecho插件编写教程5 - 核心代码

    摘要:此文原本发表于我的博客老高的技术博客,欢迎和老高交流之前啰嗦了很多,现在开始写核心代码。至此我们已经拿到了文章的永久链接,下一步就是给百度服务器发送数据了本节完 此文原本发表于我的博客 老高的技术博客 ,欢迎和老高交流! 之前啰嗦了很多,现在开始写核心代码。 分析一下,发布文章的时候,我们需要的信息就是当前文章的URL,我们需要想办法从$contents、 $class中拿到他。...

    GraphQuery 评论0 收藏0
  • typecho插件编写教程3 - 保存配置

    摘要:完善信息,使其更接地气插件安装成功,请进入设置填写准入密钥插件卸载成功如何保存配置准入密钥在哪里保存当然是数据库了。 此文原本发表于我的博客 老高的技术博客 ,欢迎和老高交流! 上一节我们制作了一个裸插件,下面我们开始让我们的插件开始工作! 完善方法 两个方法 我们实现activate和deactivate方法 php public static function...

    HmyBmny 评论0 收藏0
  • typecho插件编写教程6 - 调用接口

    摘要:此文原本发表于我的博客老高的技术博客,欢迎和老高交流此篇我们开始调用接口,我们在插件类中新定义一个方法,起名为,在方法中我们通过系统配置获取接口调用地址。 此文原本发表于我的博客 老高的技术博客 ,欢迎和老高交流! 此篇我们开始调用接口,我们在插件类中新定义一个方法,起名为send_post,在方法中我们通过系统配置获取接口调用地址。 百度给的例子中使用了php的CURL,更...

    endless_road 评论0 收藏0
  • typecho插件编写教程4 - 插件

    摘要:在老高这儿是一个概念官方的插件接口及功能列表我们的插件需要执行的逻辑在这里,类的方法文件路径,可以看到,接口为我们传递了两个参数,一个是发布的内容,另一个是类本身。为什么叫方法老高从中复制粘贴过来的,一直没有改名。 终于,在能够保存配置信息后,我们可以开始编写插件的挂载功能了。 首先我们需要知道系统为我们在各个关键的环节都预留了插件点给我们,系统运行到插件点时,会检测到是否有插件挂在...

    z2xy 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<