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
在WIN98下以apache模块方式安装php
Oct 09 PHP
一个简单计数器的源代码
Oct 09 PHP
基于mysql的论坛(4)
Oct 09 PHP
php框架Phpbean说明
Jan 10 PHP
PHP Memcached + APC + 文件缓存封装实现代码
Mar 11 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
Oct 10 PHP
php打包网站并在线压缩为zip
Feb 13 PHP
完美利用Yii2微信后台开发的系列总结
Jul 18 PHP
phpMyAdmin通过密码漏洞留后门文件
Nov 20 PHP
解决laravel(5.5)访问public报错的问题
Oct 12 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
example2.php
2006/10/09 PHP
PHP中实现图片的锐化
2006/10/09 PHP
php 用sock技术发送邮件的函数
2007/07/21 PHP
php中cookie的作用域
2008/03/27 PHP
PHP定时执行计划任务的多种方法小结
2011/12/19 PHP
如何使用PHP批量去除文件UTF8 BOM信息
2013/08/05 PHP
thinkphp使用literal防止模板标签被解析的方法
2014/11/22 PHP
php+ajax实现无刷新分页
2015/11/18 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
2016/11/23 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
BootStrap Table后台分页时前台删除最后一页所有数据refresh刷新后无数据问题
2016/12/28 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
微信小程序中顶部导航栏的实现代码
2017/03/30 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
Node.JS使用Sequelize操作MySQL的示例代码
2017/10/09 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
微信小程序input框中加入小图标的实现方法
2018/06/19 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
vue自定义tap指令及tap事件的实现
2018/09/18 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
python检查序列seq是否含有aset中项的方法
2015/06/30 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
小学班主任自我评价
2015/03/11 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
公司与个人合作协议书
2016/03/19 职场文书