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 相关文章推荐
Windows下PHP的任意文件执行漏洞
Oct 09 PHP
PHP 解决utf-8和gb2312编码转换问题
Mar 18 PHP
php addslashes及其他清除空格的方法是不安全的
Jan 25 PHP
PHP中include与require使用方法区别详解
Oct 19 PHP
迅速确定php多维数组的深度的方法
Jan 07 PHP
php树型类实例
Dec 05 PHP
php数组添加元素方法小结
Dec 20 PHP
PHP基于文件存储实现缓存的方法
Jul 20 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
Yii2创建控制器(createController)方法详解
Jul 23 PHP
PHP Mysqli 常用代码集合
Nov 12 PHP
Yii2数据库操作常用方法小结
May 04 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/03/24 PHP
PHP实现生成唯一编号(36进制的不重复编号)
2014/07/01 PHP
深入剖析浏览器退出之后php还会继续执行么
2016/05/17 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
动态刷新 dorado树的js代码
2009/06/12 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
ko knockoutjs动态属性绑定技巧应用
2012/11/14 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
jQuery实现Select左右复制移动内容
2016/08/05 Javascript
Node.js开启Https的实践详解
2016/10/25 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
Vue常用指令V-model用法
2017/03/08 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
关于Stream和Buffer的相互转换详解
2017/07/26 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
python uuid模块使用实例
2015/04/08 Python
用Python遍历C盘dll文件的方法
2015/05/06 Python
Python中实现三目运算的方法
2015/06/21 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
面向对象学习之pygame坦克大战
2019/09/11 Python
python 实现性别识别
2020/11/21 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
运动会解说词50字
2014/01/18 职场文书
小学雷锋月活动总结
2014/07/03 职场文书
护士年终个人总结
2015/02/13 职场文书