typecho插件编写教程(五):核心代码


Posted in PHP onMay 28, 2015

之前??铝撕芏啵?衷诳?夹春诵拇?搿?/p>

分析一下,发布文章的时候,我们需要的信息就是当前文章的URL,我们需要想办法从$contents、 $class中拿到他。

目前我们的插件类代码如下(请注意render被我改成了send)

class BaiduSubmitTest_Plugin implements Typecho_Plugin_Interface

{
    public static function activate(){

        //挂载发布文章和页面的接口

        Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array('BaiduSubmitTest_Plugin', 'send');

        Typecho_Plugin::factory('Widget_Contents_Page_Edit')->finishPublish = array('BaiduSubmitTest_Plugin', 'send');

        return '插件安装成功,请进入设置填写准入密钥';

    }
    public static function deactivate(){

        // do something

        return '插件卸载成功';

    }
    public static function config(Typecho_Widget_Helper_Form $form){

        $element = new Typecho_Widget_Helper_Form_Element_Text('api', null, null, _t('准入秘钥'), '请登录百度站长平台获取');

        $form->addInput($element);

    }
    public static function personalConfig(Typecho_Widget_Helper_Form $form){}
    public static function send($contents, $class){

        //do something

    }

}

获取URL

获取永久链接需要通过路由规则 + Typecho_Common::url 联合生成!

class BaiduSubmitTest_Plugin implements Typecho_Plugin_Interface

{
    public static function activate(){

        //挂载发布文章和页面的接口

        Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array('BaiduSubmitTest_Plugin', 'send');

        Typecho_Plugin::factory('Widget_Contents_Page_Edit')->finishPublish = array('BaiduSubmitTest_Plugin', 'send');

        return '插件安装成功,请进入设置填写准入密钥';

    }
    public static function deactivate(){

        // do something

        return '插件卸载成功';

    }
    public static function config(Typecho_Widget_Helper_Form $form){

        //保存接口调用地址

        $element = new Typecho_Widget_Helper_Form_Element_Text('api', null, null, _t('接口调用地址'), '请登录百度站长平台获取');

        $form->addInput($element);

    }
    public static function personalConfig(Typecho_Widget_Helper_Form $form){}
    /**

     * 准备数据

     * @param $contents 文章内容

     * @param $class 调用接口的类

     * @throws Typecho_Plugin_Exception

     */

    public static function send($contents, $class){
        //如果文章属性为隐藏或滞后发布

        if( 'publish' != $contents['visibility'] || $contents['created'] > time()){

            return;

        }
        //获取系统配置

        $options = Helper::options();
        //判断是否配置好API

        if( is_null($options->plugin('BaiduSubmitTest')->api) ){

            return;

        }
        //获取文章类型

        $type = $contents['type'];
        //获取路由信息

        $routeExists = (NULL != Typecho_Router::get($type));
        //生成永久连接

        $path_info = $routeExists ? Typecho_Router::url($type, $contents) : '#';

        $permalink = Typecho_Common::url($path_info, $options->index);

    }

}

代码中有注释,老高就不在赘述了。

至此我们已经拿到了文章的永久链接,下一步就是给百度服务器发送数据了!

本节完!

PHP 相关文章推荐
十天学会php之第九天
Oct 09 PHP
php INI配置文件的解析实现分析
Jan 04 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
注意:php5.4删除了session_unregister函数
Aug 05 PHP
PHP Curl多线程原理实例详解
Nov 06 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
屏蔽PHP默认设置中的Notice警告的方法
May 20 PHP
PHP使用Redis替代文件存储Session的方法
Feb 15 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
Aug 28 PHP
详细解读php的命名空间(一)
Feb 21 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 PHP
php实现paypal 授权登录
May 28 #PHP
typecho插件编写教程(四):插件挂载
May 28 #PHP
PHP Opcache安装和配置方法介绍
May 28 #PHP
typecho插件编写教程(三):保存配置
May 28 #PHP
PHP通过API获取手机号码归属地
May 28 #PHP
typecho插件编写教程(二):写一个新插件
May 28 #PHP
typecho插件编写教程(一):Hello World
May 28 #PHP
You might like
在PHP中使用与Perl兼容的正则表达式
2006/11/26 PHP
smarty缓存用法分析
2014/12/16 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
2019/05/08 PHP
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
基于jquery的文本框与autocomplete结合使用(asp.net+json)
2012/05/30 Javascript
JS实现遮罩层效果的简单实例
2013/11/12 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
Angular通过指令动态添加组件问题
2018/07/09 Javascript
详解Vue-cli3.X使用px2rem遇到的问题
2019/08/09 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
python三引号输出方法
2019/02/27 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
Python是如何进行类型转换的
2013/06/09 面试题
个人评价范文分享
2014/01/11 职场文书
乡镇办公室工作决心书
2014/03/11 职场文书
团日活动总结书格式
2014/05/08 职场文书
爱我中华演讲稿
2014/05/20 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
匿名检举信范文
2015/03/02 职场文书
终止解除劳动合同证明书
2015/06/17 职场文书
《春酒》教学反思
2016/02/22 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书