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递归函数返回值使用方法
Feb 18 PHP
php 发送带附件邮件示例
Jan 23 PHP
php绘图之生成饼状图的方法
Jan 24 PHP
cakephp打印sql语句的方法
Feb 13 PHP
PHP中使用Memache作为进程锁的操作类分享
Mar 30 PHP
Yii2.0高级框架数据库增删改查的一些操作
Nov 16 PHP
php中foreach结合curl实现多线程的方法分析
Sep 22 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
Nov 16 PHP
PHP压缩图片功能的介绍
Mar 21 PHP
laravel框架创建授权策略实例分析
Nov 22 PHP
如何在centos8自定义目录安装php7.3
Nov 28 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
Aug 17 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
不用mod_rewrite直接用php实现伪静态化页面代码
2008/10/04 PHP
php简单的会话类代码
2011/08/08 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
Javascript 强制类型转换函数
2009/05/17 Javascript
js计算页面刷新的次数
2009/07/20 Javascript
JavaScript 学习笔记(四)
2009/12/31 Javascript
预加载css或javascript的js代码
2010/04/23 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
JavaScript生成二维码图片小结
2015/12/27 Javascript
jQuery实现简单滚动动画效果
2016/04/07 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
2020/11/16 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
简单介绍Python中的decode()方法的使用
2015/05/18 Python
python3 实现的人人影视网站自动签到
2016/06/19 Python
Python 读取图片文件为矩阵和保存矩阵为图片的方法
2018/04/27 Python
python实现决策树分类
2018/08/30 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
Pytorch转tflite方式
2020/05/25 Python
解析Tensorflow之MNIST的使用
2020/06/30 Python
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
美工的岗位职责
2013/11/14 职场文书
门诊手术室工作制度
2014/01/30 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
python 远程执行命令的详细代码
2022/02/15 Python
24年收藏2000多部退役军用电台
2022/02/18 无线电