Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >typecho源代码解析4 - 业务逻辑

typecho源代码解析4 - 业务逻辑

作者头像
老高的技术博客
发布于 2022-12-28 00:50:57
发布于 2022-12-28 00:50:57
26200
代码可运行
举报
运行总次数:0
代码可运行

这篇我们就讲讲首页的业务逻辑,首先我们看看路由

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[index] => Array
        (
            [url] => /
            [widget] => Widget_Archive
            [action] => render
            [regx] => |^[/]?$|
            [format] => /
            [params] => Array
                (
                )

        )

由路由表中的正则表达式我们能看出首页的URL为https://blog.phpgao.com/http://www.phpgao.com,并且不接受任何参数。

下面我们找到了Widget_Archive类,让我们先看看这个类的继承关系(其中Typecho_WidgetWidget_Abstract为抽象类):

由上一节我们可以得到结论,当路由表匹配到/,会实例化Widget_Archive类,他位于var/Widget/Archive.php,其方法为render。

下面我们一步步跟进,看看到底发生了些什么?

再深入之前,我们需要有一些基本的概念,在此需要讲清楚,便于理解typecho的设计模式:

  • 基类Typecho_Widget

该类位于var/Typecho/Widget.php,是var/Widget文件夹下所有类的基类,也就是说,几乎所有与业务有关的功能,就是继承此类。

纵观此类,方法不是很多,老高在此挑几个重要的讲解:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /**
     * 获取对象插件句柄
     * 此方法为插件的实现提供了快捷的语法
     */
    public function pluginHandle($handle = NULL)
    {
        return Typecho_Plugin::factory(empty($handle) ? get_class($this) : $handle);
    }
    
    /**
     * 将类本身赋值
     * 模板中很常见,将自己复制给某一个变量,在调用next()方法循环输出
     */
    public function to(&$variable)
    {
        return $variable = $this;
    }
    
    /**
     * 将每一行的值压入堆栈
     * 把数据放到自己的'肚子'里
     */
    public function push(array $value)
    {
        //将行数据按顺序置位
        $this->row = $value;
        $this->length ++;

        $this->stack[] = $value;
        return $value;
    }
    
    
    /**
     * 返回堆栈每一行的值
     * 有点像从数据库中循环读取结果集
     * 与push相对应,值得大家参考
     */
    public function next()
    {
        if ($this->stack) {
            $this->row = @$this->stack[key($this->stack)];
            next($this->stack);
            $this->sequence ++;
        }

        if (!$this->row) {
            reset($this->stack);
            if ($this->stack) {
                $this->row = $this->stack[key($this->stack)];
            }
            
            $this->sequence = 0;
            return false;
        }

        return $this->row;
    }
    
    # 魔术方法,当调用一个不存在的方法时触发,输出当前$this->name的属性值。
    public function __call($name, $args)
    
    # 魔术方法,当获取不存在的属性时,首先会在$this->row中寻找,如果未找到,则调用___name()方法,并将结果返回,如果还是不存在,就以name为挂载点,触发插件事件,并返回结果。
    
    public function __get($name)
    public function __set($name, $value)

码字不易,转载请注明出处。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-10-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
typecho源代码解析1 - 系统初始化
其次,这篇文章同thinkphp的源代码解析一样都是老高谋划了很久的文章,国庆节由于单位加班没有时间写,今天终于等来了轮休,果断放开了写。希望大家多多支持!
老高的技术博客
2022/12/28
6490
typecho插件编写教程7 - Helper类
Helper类为我们封装了很多与插件有关的操作,并且全部是公共静态方法,比如获取系统配置、添加路由、添加面板等功能,是开发插件必不可少的工具。
老高的技术博客
2022/12/28
6950
你可能永远也用不到的Typecho判断语法
因为typecho后台其实是支持多语言的,而我的TeAdmin插件只支持中文,所以研究了下对于语言的判断
泽泽社长
2023/04/17
2420
typecho插件编写教程4 - 插件点
首先我们需要知道系统为我们在各个关键的环节都预留了插件点给我们,系统运行到插件点时,会检测到是否有插件挂在这个点上,然后执行插件的逻辑!
老高的技术博客
2022/12/28
4590
typecho插件编写教程5 - 核心代码
分析一下,发布文章的时候,我们需要的信息就是当前文章的URL,我们需要想办法从contents、 class中拿到他。
老高的技术博客
2022/12/28
3800
Typecho语法大全/Typech常用函数/Typecho调用方法
32、导航页面列表调用隐藏特定的页面 这个演示隐藏了 al­bum 和 search 两个页面
目的地-Destination
2023/03/06
1.9K0
Typecho不使用插件实现Ajax评论功能
完善好的函数 function ajaxComment($archive){ $options = Helper::options(); $user = Typecho_Widget::widget('Widget_User'); $db = Typecho_Db::get(); // Security 验证不通过时会直接跳转,所以需要自己进行判断 // 需要开启反垃圾保护,此时将不验证来源 if($archive->request->get('_') != Helper::security()->getT
团团生活志
2022/08/16
5320
关于typecho的一些样式代码
循环页面、分类、标签 <!--循环显示页面--> <?php $this->widget('Widget_Contents_Page_List')->to($pages); ?>
用户7146828
2021/08/09
1.3K0
typecho 神马自动推送插件
在你的网站根目录/usr/plugins/ 目录下新建 smLinkSubmit.php文件 并把上面的代码填进去保存 然后到网站后台->插件列表->启用 smLinkSubmit 并填写网站域名 神马站长平台密钥 神马站长平台账号后保存即可
Inkedus
2020/04/16
1.7K1
typecho 神马自动推送插件
Typecho主题开发/二次开发常用代码功能整理备用
目前我们在使用的博客CMS程序中,可能较多的网友会使用WordPress,毕竟提供的免费主题、插件以及文档是比较多的,主要是用户量确实比较多。其次国内的免费博客CMS中,ZBLOG和Typecho是小众用户群,不能说不行,只能说用户量相对比较小。但是老蒋个人认为有用作个人博客日志的还是可以用的。
老蒋
2021/12/24
4800
Typecho完美实现回复可见功能
之前转载过这么一篇文章《typecho非插件实现回复可见功能》,可以实现回复可见功能,但是有个问题,在文章列表页展示文章缩略内容时,如果回复可见内容刚好在缩略内容的位置上时,就会暴露出来,同时Feed里面也会暴露这个问题,那么如何解决呢,下面请看如何几近完美的实现回复可见功能:
泽泽社长
2023/04/17
7940
typecho百度主动推送插件,利于SEO
插件设计代码: <?php /** * 百度站长工具 链接提交 * 发布、更新文章后,自动提交百度链接更新 * 详情请查看 http://dwz.cn/265Rcs * * @packa
Inkedus
2020/04/16
1.2K2
Typecho 给评论增加点赞/喜欢功能
之前换了主题以后,重新给文章增加了点赞功能。 那么又如何给每一条评论都增加点赞功能呢?参考了以下两篇文章后,重新做了调整。增加cookie,防止重复点赞。
目的地-Destination
2023/03/06
9920
Typecho上下篇文章代码输出文章缩略图
本篇文章虽说是教大家如何调用上下篇文章缩略图的,但是实则是探讨一种船新的函数写法。在正式教程开始之前,首先我们需要先写个缩列图函数,如下:
泽泽社长
2023/04/17
8040
Typecho回复可见功能
最近逛博客,发现大家的博客都有回复可见的功能 回到我的博客一看发现没有,这可不得行 于是我也整了一个233,顺便分享给大家
HCG_Sky
2020/07/24
2.4K2
typecho插件编写教程3 - 保存配置
如上代码所示,我们在激活和卸载插件方法中有返回值,所以在相应操作时会有相应的提示。
老高的技术博客
2022/12/28
4090
typecho插件编写教程3 - 保存配置
Typecho完美实现回复可见功能
} 就是用插件接口,在缩略内容输出之前,隐藏掉或者替换掉回复可见内容,同时使用if判断,来针对非single页面进行隐藏。
似水的流年
2019/12/05
1K0
Typecho教程 - 非插件实现回复可见
这个教程网上很多的,包括我也是从网上搬来的,但是网上的涉及文件太多,这里给大家推荐我修改的方法,希望能帮助到大家。 首先我们进入 /网站根目录/usr/themes/{主题名} ,然后按照下面的文件来修改。
用砖头敲代码
2022/08/30
5790
PHP 开发基础知识笔记
设置Cookie登录: 基于Cookie设置实现的用户登录模块,清空与设置Cookie选项.
王瑞MVP
2022/12/28
1.9K0
Typecho教程 - 让插件实现检测新版本
在写ArticlePoster插件的时候,应广大(4个)用户的要求增加一个检测更新的功能,这就难住我了,后来只能秉承着“羊毛出在羊身上”的原则,找到了实现这个功能的思路。
用砖头敲代码
2022/08/30
3540
相关推荐
typecho源代码解析1 - 系统初始化
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验