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 相关文章推荐
Discuz 5.0 中读取纯真IP数据库函数分析
Mar 16 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
Sep 09 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
Jan 24 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
Nov 22 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
smarty模板引擎之内建函数用法
Mar 30 PHP
PHP接收App端发送文件流的方法
Sep 23 PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 PHP
php获取flash尺寸详细数据的方法
Nov 12 PHP
PHP设计模式之装饰器模式定义与用法简单示例
Aug 13 PHP
PHP时间戳和日期相互转换操作实例小结
Dec 18 PHP
php数组遍历类与用法示例
May 24 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
无线电波是什么?它是怎样传输的?
2021/03/01 无线电
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
JAVASCRIPT HashTable
2007/01/22 Javascript
[原创]后缀就扩展名为js的文件是什么文件
2007/12/06 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
jQuery中wrapAll()方法用法实例
2015/01/16 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
为jQuery-easyui的tab组件添加右键菜单功能的简单实例
2016/10/10 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
详解Vue中过度动画效果应用
2017/05/25 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
深入理解Vue 单向数据流的原理
2017/11/09 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
vue props对象validator自定义函数实例
2019/11/13 Javascript
解决vue+router路由跳转不起作用的一项原因
2020/07/19 Javascript
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
Python获取系统默认字符编码的方法
2015/06/04 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
python实现人人自动回复、抢沙发功能
2018/06/08 Python
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
Python Process创建进程的2种方法详解
2021/01/25 Python
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
小学国庆节活动方案
2014/02/11 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
图书借阅制度范本
2015/08/06 职场文书
MySQL中的引号和反引号的区别与用法详解
2021/10/24 MySQL
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技