Typecho 文档:在 functions.php 里新增路由并输出自定义页面

01月11日

适用程序:Typecho
程序版本:1.2.1
文档作者:Lopwon
作者博客:Lopwon.com
发布页面:Lopwon.com/attachment/3918/
许可方式:CC BY-NC-SA

注意:此文档源于作者在博客改造中的一些经验总结,转载还请署名。

敬告:此文档操作涉及程序核心文件的修改,作者不对你在使用中产生的任何问题造成的不良后果,承担责任。

文档说明

此文档来自网友在 Typecho 论坛上提出的需求,当然,是作者做出了解答,需求是:在不使用插件的前提下,在主题文件 functions.php 里新增路由,并输出自定义页面。


使用方法

A 涉及文件

usr/themes/***/functions.php

B 改造文件

作用:不使用插件新增路由。

1. 打开文件  usr/themes/***/functions.php 在 themeInit($archive) {} 函数体里添加以下代码(留意注释,以及按需修改):

    $routeName = 'MyRoute'; // 路由名称
    $path = '/custom/my/'; // 自定义路径

    $routingTable = Helper::options()->routingTable; // 获取路由表

    if (!array_key_exists($routeName, $routingTable)) { // 如果路由表中不存在自定义的路由名称
        Helper::addRoute($routeName, $path, 'Widget_Archive', 'render'); // 将自定义路由注册到 Widget_Archive
    }

  //  Helper::removeRoute($routeName); // 如需移除路由,先解除当前行代码注释,同时注释以上 addRoute 以实现人工手动移除路由(不移除也无影响),移除路由后,以下代码依然生效,以通过 404 捕获未定义的路由的方式实现仿自定义路由

    $requestUri = $archive->request->getRequestUri(); // 完整路径

    if (stripos($requestUri, $path) !== false) { // 如果路由中包含自定义路径,则使用 lopwon.php 页面
        $archive->need('lopwon.php'); // 自定义页面,请在 functions.php 相同目录创建 lopwon.php 文件
        exit;
    }

至此,访问自定义路由即可显示 lopwon.php 页面内容。
store