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 相关文章推荐
example2.php
Oct 09 PHP
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
Oct 09 PHP
人尽可用的Windows技巧小贴士之下篇
Mar 22 PHP
简单的PHP缓存设计实现代码
Sep 30 PHP
PHP stripos()函数及注意事项的分析
Jun 08 PHP
5种PHP创建数组的实例代码分享
Jan 17 PHP
php和jquery实现地图区域数据统计展示数据示例
Feb 12 PHP
smarty简单入门实例
Nov 28 PHP
PHP使用自定义方法实现数组合并示例
Jul 07 PHP
php中通过eval实现字符串格式的计算公式
Mar 18 PHP
php 使用curl模拟ip和来源进行访问的实现方法
May 02 PHP
PHP 实现重载
Mar 09 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 session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
PHP 魔术变量和魔术函数详解
2015/02/25 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
静态的动态续篇之来点XML
2006/08/15 Javascript
JavaScript中为元素加上name属性的方法
2011/05/09 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
JavaScript ES6中const、let与var的对比详解
2017/06/18 Javascript
JS用最简单的方法实现四舍五入
2019/08/27 Javascript
vue 翻页组件vue-flip-page效果
2020/02/05 Javascript
JS实现电脑虚拟键盘的操作
2020/06/24 Javascript
Python 中的 else详解
2016/04/23 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
2018/03/13 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
Python爬虫代理池搭建的方法步骤
2020/09/28 Python
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
心理学专业毕业生推荐信范文
2013/11/21 职场文书
五一活动标语
2014/06/30 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python