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脚本的10个技巧(3)
Oct 09 PHP
PHP新手上路(九)
Oct 09 PHP
PHPMailer 中文使用说明小结
Jan 22 PHP
PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
Apr 28 PHP
php空间不支持socket但支持curl时recaptcha的用法
Nov 07 PHP
PHP 设计模式之观察者模式介绍
Feb 22 PHP
PHP中使用file_get_contents抓取网页中文乱码问题解决方法
Dec 17 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
Jul 03 PHP
实例说明js脚本语言和php脚本语言的区别
Apr 04 PHP
Centos7 Yum安装PHP7.2流程教程详解
Jul 02 PHP
PHP 对象接口简单实现方法示例
Apr 13 PHP
tp5.1框架数据库子查询操作实例分析
May 26 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来处理多个提交任务
2006/10/09 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
实例说明为什么不要行内使用javascript
2014/04/18 Javascript
JS继承用法实例分析
2015/02/05 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
JavaScript模拟实现键盘打字效果
2015/06/29 Javascript
jQuery的bind()方法使用详解
2015/07/15 Javascript
JavaScript简单下拉菜单实例代码
2015/09/07 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
新入门node.js必须要知道的概念(必看篇)
2016/08/10 Javascript
Django视图和URL配置详解
2018/01/31 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
Python使用psutil获取进程信息的例子
2019/12/17 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
pandas参数设置的实用小技巧
2020/08/23 Python
python实现经纬度采样的示例代码
2020/12/10 Python
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
Currentbody西班牙:美容仪专家
2019/09/28 全球购物
英国婴儿产品专家:Samuel Johnston
2020/04/20 全球购物
extern是什么意思
2016/03/10 面试题
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
工地资料员岗位职责
2013/12/31 职场文书
百度吧主申请感言
2014/01/12 职场文书
大学社团活动总结
2014/04/26 职场文书
党支部综合考察材料
2014/05/19 职场文书
师德师风事迹材料
2014/12/20 职场文书
与死神共舞观后感
2015/06/15 职场文书
Python first-order-model实现让照片动起来
2022/06/25 Python