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 fckeditor 调用的函数
Jun 21 PHP
初学PHP的朋友 经常问的一些问题。不断更新
Aug 11 PHP
Zend Studio去除编辑器的语法警告设置方法
Oct 24 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
Linux安装配置php环境的方法
Jan 14 PHP
PHP自定义函数实现格式化秒的方法
Sep 14 PHP
PHP类型约束用法示例
Sep 28 PHP
PHP 中使用explode()函数切割字符串为数组的示例
May 06 PHP
Laravel 实现密码重置功能
Feb 23 PHP
php输出控制函数和输出函数生成静态页面
Jun 27 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 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 在线翻译函数代码
2009/05/07 PHP
队列在编程中的实际应用(php)
2010/09/04 PHP
PHP CURL获取cookies模拟登录的方法
2013/11/04 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
jquery 1.3.2 IE8中的一点点的小问题解决方法
2009/07/10 Javascript
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
Prototype的Class.create函数解析
2011/09/22 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
javascript实现保留两位小数的多种方法
2015/12/18 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
JS动态加载脚本并执行回调操作
2016/08/24 Javascript
使用vue编写一个点击数字计时小游戏
2016/08/31 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
Egg Vue SSR 服务端渲染数据请求与asyncData
2019/11/24 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
js+css实现扇形导航效果
2020/08/18 Javascript
python海龟绘图实例教程
2014/07/24 Python
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
浅谈Python NLP入门教程
2017/12/25 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
对python字典过滤条件的实例详解
2019/01/22 Python
tesserocr与pytesseract模块的使用方法解析
2019/08/30 Python
全面介绍python中很常用的单元测试框架unitest
2020/12/14 Python
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
Myprotein法国官网:欧洲第一运动营养品牌
2019/03/26 全球购物
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
应聘护士自荐信
2013/10/21 职场文书
医院领导班子四风对照检查材料
2014/09/27 职场文书
入党申请书格式
2019/06/20 职场文书