這篇文章主要介紹了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);
}
}
代碼中有注釋,老高就不在贅述了。
至此我們已經拿到了文章的永久鏈接,下一步就是給百度服務器發送數據了!
本節完!