typecho插件编写教程(五):核心代码

之前啰嗦了很多,现在开始写核心代码。

分析一下,发布文章的时候,我们需要的信息就是当前文章的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);
    }
}

代码中有注释,老高就不在赘述了。

至此我们已经拿到了文章的永久链接,下一步就是给百度服务器发送数据了!

本节完!

(0)

相关推荐

  • typecho插件编写教程(二):写一个新插件

    第一节我们了解了一个插件的基本构成,下面我们需要一个实例练习巩固. 真赶巧,老高最近正在改版百度sitemap提交插件for typecho,下面和老高一起改版吧! 准备 不知道大家用过WP版的百度结构化插件没?老高就是研究了那个插件,观察其API,然后就写出了typecho版的. 为什么要改版呢? 百度站长最近推出新的接口,使用起来更简单,工作量不算大,索性就改改吧! 新版插件需要实现哪些功能? 1.文章实时推送 2.推送历史数据 3.站点地图 接口调用地址(API)在哪儿? 百度站长后台,P

  • typecho插件编写教程(四):插件挂载

    终于,在能够保存配置信息后,我们可以开始编写插件的挂载功能了. 首先我们需要知道系统为我们在各个关键的环节都预留了插件点给我们,系统运行到插件点时,会检测到是否有插件挂在这个点上,然后执行插件的逻辑! 插件的工作就是找到合适的插件点,挂上去,然后执行自己的逻辑. 插件点,插件钩子,插件接口...在老高这儿是一个概念 官方的插件接口及功能列表 我们的插件需要执行的逻辑在这里,Widget_Contents_Post_Edit类的finishPublish方法 文件路径var/Widget/Cont

  • Typecho程序伪静态规则大全(包括Linux/Windows)

    虽然老左博客是用的Wordpress程序,但是我不得不说wp程序即便是一款非常棒的程序之一,但是在资源占用方面的问题还是比较差的.如果你使用过WP程序建立博客应该知道,在网站访问量达到几百的时候一般的主机CPU会超标,甚至会出现被暂停主机使用.因为一般的主机产品CPU限制为5-10%,所以很容易超标.Typecho博客程序是国人开发的,虽然目前不在更新但是功能基本完善,结构看类似WORDPRESS,但是在占用资源上比WP好很多.所以Typecho用户还是非常多的. Typecho程序的伪静态规则

  • typecho插件编写教程(六):调用接口

    此篇我们开始调用接口,我们在插件类中新定义一个方法,起名为send_post,在方法中我们通过系统配置获取接口调用地址. 百度给的例子中使用了php的CURL,更高级的使用方法可以学习PHP_cURL初始化和执行方法 下面我们结合一下百度站长提供的代码. /** * 发送数据 * @param $url 准备发送的url * @param $options 系统配置 */ public static function send_post($url, $options){ //获取API $api

  • typecho插件编写教程(一):Hello World

    最近老高正在编写一个关于typecho的插件,由于typecho不像wordpress,有那么多的文档参考,写一个插件还是遇到了很多的坑,不过随着研究的不断深入,老高也慢慢上手了,于是总结出此篇编写教程分享给大家! I. 从HelloWorld说起 基本信息 想必想要开发typecho的你一定阅读过官方示例插件HelloWorld的源码吧? 我们先看看usr/plugins/HelloWorld/Plugin.php文件前几行 复制代码 代码如下: if (!defined('__TYPECHO

  • typecho插件编写教程(三):保存配置

    上一节我们制作了一个裸插件,下面我们开始让我们的插件开始工作! I. 完善方法 两个方法 我们实现activate和deactivate方法 复制代码 代码如下: public static function activate(){         return 'activate';     } public static function deactivate(){         return 'deactivated';     } 如上代码所示,我们在激活和卸载插件方法中有返回值,所以

  • 在Nginx服务器上安装配置博客程序Typecho的教程

    typecho比wordpress更轻,更专注于写的享受. 现在大多的虚拟机运行环境都是lnmp,安装教程安装typecho可能会遇到404,数据配置错误问题. 把这两天安装typecho的步骤写下来给大家参考. typecho安装方法 1.下载 #网站目录 cd /usr/local/nginx/html/ wget https://github.com/typecho/typecho/releases/download/v0.9-13.12.12-release/0.9.13.12.12.-

  • typecho插件编写教程(五):核心代码

    之前啰嗦了很多,现在开始写核心代码. 分析一下,发布文章的时候,我们需要的信息就是当前文章的URL,我们需要想办法从$contents. $class中拿到他. 目前我们的插件类代码如下(请注意render被我改成了send) 复制代码 代码如下: class BaiduSubmitTest_Plugin implements Typecho_Plugin_Interface { public static function activate(){         //挂载发布文章和页面的接口

  • 深入解析js轮播插件核心代码的实现过程

    轮播效果在网页中用的很多,swiper是其中最有代表性的作品,它支持水平和竖直滑动,还有反弹效果,兼容移动端和pc端.当然代码量也是相当大的,单是js就有5300行(3.4.0的未缩版本),若不考虑代码利用率和加载速度直接就用了,在移动端比较慎重,比如京东(m.jd.com)的轮播就没有用它,而是自己实现了类似的功能,代码量很少的样子(格式化之后看起来二三百行左右的样子).那么这个功能如果自己来实现,要怎么做呢? 准备工作 1. 准备几张图片(我这里放了四张) 2. 搭建目录结构(html+cs

  • 分享十五个最佳jQuery 幻灯插件和教程

    幻灯(通常也被称为"内容滑动".内容切换效果.焦点图等)是在网站或博客的较小区域展示大量内容的很好的方法.动态的自动滑动内容在很多网站上都是很流行的.你是否也对在自己的网站上实现类似的效果感兴趣?那就看一下本文列出的jQuery插件吧!1. jFlow 官方网站 | 演示 一个漂亮而整洁的图片幻灯,被nettut推荐,如果你想自己做一个图片幻灯效果,就去看看吧. 2. 使用jQuery UI实现推荐内容的幻灯展示 官方网站 这是一个教你如何"使用一种很有冲击力的方法展示你的网

  • Android开发中编写蓝牙相关功能的核心代码讲解

    一. 什么是蓝牙(Bluetooth)? 1.1  BuleTooth是目前使用最广泛的无线通信协议 1.2  主要针对短距离设备通讯(10m) 1.3  常用于连接耳机,鼠标和移动通讯设备等. 二. 与蓝牙相关的API 2.1 BluetoothAdapter: 代表了本地的蓝牙适配器 2.2 BluetoothDevice 代表了一个远程的Bluetooth设备 三. 扫描已经配对的蓝牙设备(1) 注:必须部署在真实手机上,模拟器无法实现 首先需要在AndroidManifest.xml 声

  • CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】

    本文实例讲述了CKEditor 4.4.1 添加代码高亮显示插件功能.分享给大家供大家参考,具体如下: 随着CKEditor4.4.1的发布,以前一直困扰的代码高亮问题终于完美的得到解决,在CKEditor4.4中官方发布了Code Snippet这个代码片段的插件,终于可以完美的内嵌使用代码高亮了,以前都是使用网友自己开发的代码高亮插件.下面就来介绍如何使用Code Snippet这个代码高亮插件.本文还介绍了CKEditor中如何安装Code Snippet插件. 新版本附加信息 CKEdi

随机推荐