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中HTTP方式下的Gzip压缩传输方法举偶
Feb 15 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
通过5个php实例细致说明传值与传引用的区别
Aug 08 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
PHP中的密码加密的解决方案总结
Oct 26 PHP
Laravel 实现密码重置功能
Feb 23 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
PHP关于foreach复制知识点总结
Jan 28 PHP
php+redis实现消息队列功能示例
Sep 19 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
2020显卡排行榜天梯图 显卡天梯图2020年3月最新版
2020/04/02 数码科技
oracle资料库函式库
2006/10/09 PHP
PHP中extract()函数的妙用分析
2012/07/11 PHP
Apache中php.ini的设置方法
2013/02/28 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
2014/11/06 PHP
PHP处理大量表单字段的便捷方法
2015/02/07 PHP
PHP闭包函数传参及使用外部变量的方法
2016/03/15 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
js实现圆盘记速表
2015/08/03 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
2018/05/16 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
Ant Design Pro 之 ProTable使用操作
2020/10/31 Javascript
Python下载懒人图库JavaScript特效
2015/05/28 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
flask session组件的使用示例
2018/12/25 Python
PyQt5 实现字体大小自适应分辨率的方法
2019/06/18 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
python 读取.nii格式图像实例
2020/07/01 Python
Python基于gevent实现文件字符串查找器
2020/08/11 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
意大利奢华内衣制造商:Cosabella
2017/08/29 全球购物
蛋白质世界:Protein World
2017/11/23 全球购物
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
策划总监岗位职责
2014/02/16 职场文书
精神文明建设标语
2014/06/16 职场文书
thinkphp 获取控制器及控制器方法
2021/04/16 PHP
Python中可变和不可变对象的深入讲解
2021/08/02 Python