还在为typecho不能实现自定义页面和路由烦恼吗?快来看看吧

首发于:https://blog.gogobody.cn/archives/210/
最近摸了一个typecho主题 onecircle,要用到自定义路由,于是上网查询。
得到的信息非常之少,大部分都是只支持post 接口,

那么我想独立展示一个拥有独立路由的页面怎么办呢?(不是官方的独立页面)请看第二节。


原创,创建多个独立路由及页面展示方法

首先,你得写个插件(不会的直接拿默认的helloworld 插件往里面塞函数就行)。

第一步,在插件的active函数里加路由:
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,是我们的自定义参数,当然你也可以不加,如果不需要参数的话。 ‘Widget_Archive’, ‘render’ 这个不用管,照着写。
当然别忘了在 deactivate 函数删除我们的路由

Helper::removeRoute('metasRoute');

handleInit_1000,handle_1000 是我们准备注射的函数,1000是为了防止和其他插件冲突。这里我们把两个函数分别映射到了我们自己插件的handleInit和handle。因此第二步就是写这两个函数。

第二步,编写处理函数

我们来编写一个最简单的展示函数,根据我们路径的输入,显示同样的输出,比如我的路由 /metas/[metatag]/,当我输入网址/metas/你好,我希望页面输出 你好。
为插件添加两个成员函数:

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;
}

先看第一个函数handleInit,顾名思义,做初始化工作的,第一个参数相当于Widget_Archive里的this,$select是自定义sql语句。这是一个对所有archive 页面生效的函数,在这里我没有什么特别需求,所以啥也不干。
再看第二个函数handle,用于对我们路由的处理函数。相信到这一步,大部分人已经懂了。这里第一个参数就是我们定义的路由,我定义得就叫metas。

$archive->setArchiveType('metamanage'); 这一步很重要,一是为了和系统的关键词分开,二是指定了我们的输出模板名字,系统会去找这个叫“metamanage.php”的文件输出。

然后我们想给我们前台传什么样的参数呢?请看,$archive->setPageRow(array_merge($content,array( 'metatag' => $archive->request->metatag, )));,这里我只给前台传了一个叫metatag的参数,这个非常重要!,拿前面网址/metas/你好的例子来说,$archive->request->metatag相当于获取的是你好,同时在传给metatag变量,这样我们打开网址/metas/你好才能成功显示参数,不设置的话就会显示原始路由/metas/{metatag}/
那么这两步都做好之后我们就可以…等等是不是忘了什么?我们还没有建立模板文件呢!显示个鬼啊~~~

第三步,建立模板文件

刚刚说了我们的文件名叫metamanage,所以在跟index.php同级的目录建立一个叫metamanage.php的文件,输出一下我们的参数试试当然这里你就可以引入你自己的各种样式balabala~

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

接下来打开网址/metas/试试就试试
你成功了吗

你,成功了吗?


其他,网上目前常用的支持接口方法汇总(一般用来写接口):

免插件方法:

在主题 themeInit里直接判断:

function themeInit($archive){
//  实现点赞
        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');
        }
}

写个js函数

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

和本文描述类似,但基本也只用来post消息。
active中添加路由,deactive中别忘了删除~

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

写个对应类和函数,通过传不同的参数就可以实现不同的接口!

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)
})

原创不易,感谢支持!
顺便推一下刚写的主题 onecircle:
demo:http://site.geekscholar.net/ github:https://github.com/gogobody/onecircle

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Typecho 是一个简洁、轻量级的开源博客系统,拥有以下优点和缺点: 优点: 1. 简单易用:Typecho 的界面简洁直观,功能布局清晰,易于使用和上手。 2. 轻量高效:Typecho 的代码精简,加载速度,占用系统资源较少,适合部署在各种环境中。 3. 安全稳定:Typecho 有较好的安全性和稳定性,经过了多次版本迭代和测试,有活跃的社区支持。 4. 插件丰富:Typecho 提供了丰富的插件库,可以方便地扩展和定制功能,满足个性化需求。 5. Markdown 支持:Typecho 内置对 Markdown 的支持,方便用户使用更加简洁的语法撰写文章。 6. SEO 友好:Typecho 在设计上考虑了搜索引擎优化(SEO),生成的页面结构清晰,有利于搜索引擎索引。 缺点: 1. 主题较少:相比其他博客系统,Typecho 的主题数量较少,选择较为有限。 2. 社区相对小众:相对于一些流行的博客系统(如 WordPress),Typecho 的用户群相对较小,社区活跃度可能不如其他平台。 3. 缺乏一些高级功能:Typecho 的设计初衷是简洁高效,因此在某些高级功能方面可能相对欠缺,需要额外的插件或自定义开发来实现。 综合来说,Typecho 是一个适合追求简洁、高效博客系统的选择,特别适合个人博客或小型网站搭建。如果你对博客系统的扩展性和主题选择要求较高,或者需要更多高级功能,可能需要考虑其他更为全面的博客系统。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值