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 相关文章推荐
PHP4实际应用经验篇(7)
Oct 09 PHP
谈PHP生成静态页面分析 模板+缓存+写文件
Aug 17 PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 PHP
Smarty局部缓存的几种方法简介
Jun 17 PHP
PHP文件锁函数flock()详细介绍
Nov 18 PHP
PHP获取文件扩展名的4种方法
Nov 24 PHP
WordPress导航菜单的滚动和淡入淡出效果的实现要点
Dec 14 PHP
php json_encode与json_decode详解及实例
Dec 13 PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
Jan 10 PHP
Laravel 修改默认日志文件名称和位置的例子
Oct 17 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 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/04 无线电
php+mysql大量用户登录解决方案分析
2014/12/29 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
List the Codec Files on a Computer
2007/06/11 Javascript
jquery之Document元素选择器篇
2008/08/14 Javascript
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
基于webpack4+vue-cli3项目实现换肤功能
2019/07/17 Javascript
[01:02:07]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python使用递归解决全排列数字示例
2014/02/11 Python
Python中的高级数据结构详解
2015/03/27 Python
python基础知识小结之集合
2015/11/25 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
浅谈Python在pycharm中的调试(debug)
2018/11/29 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
Django工程的分层结构详解
2019/07/18 Python
python3获取当前目录的实现方法
2019/07/29 Python
在tensorflow下利用plt画论文中loss,acc等曲线图实例
2020/06/15 Python
如何在Anaconda中打开python自带idle
2020/09/21 Python
伦敦平价潮流珠宝首饰品牌:Astrid & Miyu
2016/10/10 全球购物
方正Java笔试题
2014/07/03 面试题
求职简历中的自我评价分享
2013/12/08 职场文书
农民工工资承诺书范文
2014/03/31 职场文书
理发店策划方案
2014/06/05 职场文书
商场周年庆活动方案
2014/08/19 职场文书
如何写股份合作协议书
2014/09/11 职场文书
2014年招商工作总结
2014/11/22 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
导游词之青城山景区
2019/09/27 职场文书