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截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
深入PHP中的HashTable结构详解
Jun 13 PHP
php输入流php://input使用示例(php发送图片流到服务器)
Dec 25 PHP
php数组中删除元素之重新索引的方法
Sep 16 PHP
php基于str_pad实现卡号不足位数自动补0的方法
Nov 12 PHP
Cygwin中安装PHP方法步骤
Jul 04 PHP
php去掉文件前几行的方法
Jul 29 PHP
win平台安装配置Nginx+php+mysql 环境
Jan 12 PHP
DWZ+ThinkPHP开发时遇到的问题分析
Dec 12 PHP
Laravle eloquent 多对多模型关联实例详解
Nov 22 PHP
asp函数split()对应php函数explode()
Feb 27 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
mysql 搜索之简单应用
2007/04/27 PHP
CI框架的安全性分析
2016/05/18 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
Yii框架自定义数据库操作组件示例
2019/11/11 PHP
Javascript 判断函数类型完美解决方案
2009/09/02 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
使用JQuery库提供的扩展功能实现自定义方法
2014/09/09 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
2016/05/19 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
js html css实现复选框全选与反选
2016/10/09 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
Python常用模块介绍
2014/11/21 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
matplotlib实现显示伪彩色图像及色度条
2019/12/07 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
python实现ftp文件传输系统(案例分析)
2020/03/20 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
2020/03/30 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
Elasticsearch py客户端库安装及使用方法解析
2020/09/14 Python
利用Opencv实现图片的油画特效实例
2021/02/28 Python
工程部主管岗位职责
2013/11/17 职场文书
DIY手工制作经营店创业计划书
2014/02/01 职场文书
优秀班组事迹材料
2014/12/24 职场文书
工程质量保证书
2015/05/09 职场文书
公司人力资源管理制度
2015/08/05 职场文书
留学文书中的个人陈述,应该注意哪些问题?
2019/08/23 职场文书
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python