還在為typecho不能實(shí)現(xiàn)自定義頁面和路由煩惱嗎?快來看看吧

首發(fā)于:https://blog.gogobody.cn/archives/210/
最近摸了一個(gè)typecho主題 onecircle陵像,要用到自定義路由就珠,于是上網(wǎng)查詢。
得到的信息非常之少醒颖,大部分都是只支持post 接口妻怎,

那么我想獨(dú)立展示一個(gè)擁有獨(dú)立路由的頁面怎么辦呢?(不是官方的獨(dú)立頁面)請(qǐng)看第二節(jié)泞歉。


原創(chuàng)逼侦,創(chuàng)建多個(gè)獨(dú)立路由及頁面展示方法

首先,你得寫個(gè)插件(不會(huì)的直接拿默認(rèn)的helloworld 插件往里面塞函數(shù)就行)腰耙。

第一步榛丢,在插件的active函數(shù)里加路由:

Helper::addRoute('metasRoute', '/metas/[metatag]/', 'Widget_Archive', 'render');
Typecho_Plugin::factory('Widget_Archive')->handleInit_1000 = array('你的插件名字(類的名字)','handleInit');
Typecho_Plugin::factory('Widget_Archive')->handle_1000 = array('你的插件名字','handle');

metasRoute 就是路由名,隨便起挺庞。/metas/[metatag]/就是我們的自己定義的路由了晰赞,其中 metatag,是我們的自定義參數(shù)选侨,當(dāng)然你也可以不加掖鱼,如果不需要參數(shù)的話。 'Widget_Archive', 'render' 這個(gè)不用管援制,照著寫戏挡。
當(dāng)然別忘了在 deactivate 函數(shù)刪除我們的路由

Helper::removeRoute('metasRoute');

handleInit_1000,handle_1000 是我們準(zhǔn)備注射的函數(shù)隘谣,1000是為了防止和其他插件沖突增拥。這里我們把兩個(gè)函數(shù)分別映射到了我們自己插件的handleInit和handle啄巧。因此第二步就是寫這兩個(gè)函數(shù)。

第二步掌栅,編寫處理函數(shù)

我們來編寫一個(gè)最簡單的展示函數(shù)秩仆,根據(jù)我們路徑的輸入,顯示同樣的輸出猾封,比如我的路由 /metas/[metatag]/澄耍,當(dāng)我輸入網(wǎng)址/metas/你好,我希望頁面輸出 你好晌缘。
為插件添加兩個(gè)成員函數(shù):

public static function handleInit($archive,$select){

}
public static function handle($type,$archive,$select){
        if ($type == 'metas'){
            $archive->setArchiveType('metamanage');
            $content = array();
            $archive->setPageRow(array_merge($content,array(
                'metatag' => $archive->request->metatag,
            )));
        }
        return true;
}

先看第一個(gè)函數(shù)handleInit齐莲,顧名思義,做初始化工作的磷箕,第一個(gè)參數(shù)相當(dāng)于Widget_Archive里的this选酗,$select是自定義sql語句。這是一個(gè)對(duì)所有archive 頁面生效的函數(shù)岳枷,在這里我沒有什么特別需求芒填,所以啥也不干。
再看第二個(gè)函數(shù)handle空繁,用于對(duì)我們路由的處理函數(shù)殿衰。相信到這一步,大部分人已經(jīng)懂了盛泡。這里第一個(gè)參數(shù)就是我們定義的路由闷祥,我定義得就叫metas。

$archive->setArchiveType('metamanage'); 這一步很重要傲诵,一是為了和系統(tǒng)的關(guān)鍵詞分開凯砍,二是指定了我們的輸出模板名字,系統(tǒng)會(huì)去找這個(gè)叫“metamanage.php”的文件輸出掰吕。

然后我們想給我們前臺(tái)傳什么樣的參數(shù)呢果覆?請(qǐng)看,$archive->setPageRow(array_merge($content,array( 'metatag' => $archive->request->metatag, )));殖熟,這里我只給前臺(tái)傳了一個(gè)叫metatag的參數(shù)局待,這個(gè)非常重要!菱属,拿前面網(wǎng)址/metas/你好的例子來說钳榨,$archive->request->metatag相當(dāng)于獲取的是你好,同時(shí)在傳給metatag變量纽门,這樣我們打開網(wǎng)址/metas/你好才能成功顯示參數(shù)薛耻,不設(shè)置的話就會(huì)顯示原始路由/metas/{metatag}/
那么這兩步都做好之后我們就可以....等等是不是忘了什么赏陵?我們還沒有建立模板文件呢饼齿!顯示個(gè)鬼啊~~~

第三步饲漾,建立模板文件

剛剛說了我們的文件名叫metamanage,所以在跟index.php同級(jí)的目錄建立一個(gè)叫metamanage.php的文件缕溉,輸出一下我們的參數(shù)試試當(dāng)然這里你就可以引入你自己的各種樣式balabala~

<?php
echo $this->request->metatag;

接下來打開網(wǎng)址/metas/試試就試試

你成功了嗎

你,成功了嗎?


其他考传,網(wǎng)上目前常用的支持接口方法匯總(一般用來寫接口):

免插件方法:

在主題 themeInit里直接判斷:

function themeInit($archive){
//  實(shí)現(xiàn)點(diǎn)贊
        if ($archive->request->agree) {
            if ($archive->request->agree == $archive->cid) {
                exit(utils::agree($archive->cid));
            } elseif ($archive->is('index')) {
                exit(utils::agree($archive->request->agree));
            }
            exit('error');
        }
}

寫個(gè)js函數(shù)

jquery-ajax
$.ajax({
    url:'/',
    data:{
        agree:article-cid
    },
    type: 'post',
    success:function(res){....}
})

插件方法:

和本文描述類似,但基本也只用來post消息证鸥。
active中添加路由僚楞,deactive中別忘了刪除~

Helper::addRoute("test_action", "/testaction", "OneCircle_Action", 'action');

寫個(gè)對(duì)應(yīng)類和函數(shù),通過傳不同的參數(shù)就可以實(shí)現(xiàn)不同的接口枉层!

class OneCircle_Action extends Typecho_Widget implements Widget_Interface_Do
{
    public function action()
    {
        $request = Typecho_Request::getInstance();
        $type = $request->get('type');
        switch ($type) {
            // 用于link 解析
            case "parsemeta":
                $url = $request->get('url');
                $html = $this->getUrlContent($url);
                print_r($this->getDescriptionFromContent($html, 120));
                break;
                }
        }
}

js訪問一下:

$.post(''/testaction,{type:'parsemeta'},function(res){
console.log(res)
})

原創(chuàng)不易泉褐,感謝支持!
順便推一下剛寫的主題 onecircle:
demo:http://site.geekscholar.net/ github:https://github.com/gogobody/onecircle

本文由博客群發(fā)一文多發(fā)等運(yùn)營工具平臺(tái) OpenWrite 發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸟蜡,一起剝皮案震驚了整個(gè)濱河市膜赃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矩欠,老刑警劉巖财剖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悠夯,死亡現(xiàn)場離奇詭異癌淮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)沦补,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門乳蓄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人夕膀,你說我怎么就攤上這事虚倒。” “怎么了产舞?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵魂奥,是天一觀的道長。 經(jīng)常有香客問我易猫,道長耻煤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任准颓,我火速辦了婚禮哈蝇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘攘已。我一直安慰自己炮赦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布样勃。 她就那樣靜靜地躺著吠勘,像睡著了一般性芬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剧防,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天批旺,我揣著相機(jī)與錄音,去河邊找鬼诵姜。 笑死汽煮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的棚唆。 我是一名探鬼主播暇赤,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼宵凌!你這毒婦竟也來了鞋囊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤瞎惫,失蹤者是張志新(化名)和其女友劉穎溜腐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瓜喇,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挺益,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乘寒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片望众。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖伞辛,靈堂內(nèi)的尸體忽然破棺而出烂翰,到底是詐尸還是另有隱情,我是刑警寧澤蚤氏,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布甘耿,位于F島的核電站,受9級(jí)特大地震影響竿滨,放射性物質(zhì)發(fā)生泄漏佳恬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一姐呐、第九天 我趴在偏房一處隱蔽的房頂上張望殿怜。 院中可真熱鬧,春花似錦曙砂、人聲如沸头谜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柱告。三九已至截驮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間际度,已是汗流浹背葵袭。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留乖菱,地道東北人坡锡。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像窒所,于是被迫代替她去往敵國和親鹉勒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351