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 相关文章推荐
用文本作数据处理
Oct 09 PHP
PHP中call_user_func_array()函数的用法演示
Feb 05 PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 PHP
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
Nov 06 PHP
php缓冲输出实例分析
Jan 05 PHP
codeigniter中view通过循环显示数组数据的方法
Mar 20 PHP
PHP的Yii框架的基本使用示例
Aug 21 PHP
深入解析PHP中foreach语句控制数组循环的用法
Nov 30 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
Apr 10 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
Oct 21 PHP
在Laravel 中实现是否关注的示例
Oct 22 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 无极分类(递归)实现代码
2010/01/05 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
2009/10/29 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
2010/11/16 Javascript
JavaScript性能陷阱小结(附实例说明)
2010/12/28 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
jquery中添加属性和删除属性
2015/06/03 Javascript
js点击列表文字对应该行显示背景颜色的实现代码
2015/08/05 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
JS使用onerror捕获异常示例
2016/08/03 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
Python 返回汉字的汉语拼音
2009/02/27 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
python制作图片缩略图
2019/04/30 Python
django框架模板语言使用方法详解
2019/07/18 Python
python线程池如何使用
2020/05/28 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
2020/10/02 Python
个人收入证明范本
2014/01/12 职场文书
学校介绍信范文
2014/01/14 职场文书
会计专业大学生求职信范文
2014/01/28 职场文书
班子四风对照检查材料
2014/08/21 职场文书
后勤个人工作总结
2015/02/28 职场文书
人民检察院起诉书
2015/05/20 职场文书
学雷锋活动简报
2015/07/20 职场文书