马春杰杰博客
致力于深度学习经验分享!

Typecho中Widget_Archive的详解

最新目录

Widget_Archive的内涵

Widget_Archive是Typecho中非常重要的一个组件,基本上所有文章/页面内容的渲染都离不开这个组件。
Widget_Archive类位于/var/Widget/Archive.php里面,其继承关系如下:

所以,在实际开发过程中,需要关注的api主要有两类,1.Widget_Archive中的各种get函数,2.Typecho_Wdiget中的魔术函数。

  1. Widget_Archive中的各种get函数
    这类函数包括getArchiveSlug()/getArchiveType()/getArchiveTitle()等等,各位在制作Typecho模板的时候,可以即时参考源代码,这里就不一一赘述。
  2. Typecho_Wdiget中的魔术函数

魔术函数__get($name),获取内部变量

从贴出的代码可以看出,当我们在模板页面中调用$this->author的时候,会发生什么事情呢?首先,看看当前row中是否存在key为author的值(row里面的内容一般情况下和数据表字段一一对应),如果有则直接返回。如果没有找到,那么继续尝试找是否存在名为__author的函数,有则直接调用。如果还是没有找到,那么继续尝试从找插件中找。

魔术函数__set($name,$value),改变当前row的值

这个比较简单,就不细说了。在实战中,可以通过这个方式来临时改变row中的内容,以供其他地方调用。

魔术函数__call($name),直接输出当前row中的某个值

譬如在模板中调用$this->author(),那么会直接输出作者名到模板中。但注意看上面的代码,这个调用方式不是return回来的,而是直接echo出去的。

Widget_Archive路由

究竟从哪些url会路由到Widget_Archive呢?或者说Widget_Archive会处理哪些业务呢?从《Typecho路由速查》一文,可以查到,首页、文章、附件、归档等等请求,都会路由到Widget_Archive中。

以post页为例,简要说明

假如存在url https://www.typechodev.com/index.php/archives/9/,从上述的路由表可以看到,此url将会匹配如下路由:

PS:如果对Typecho的路由机制不熟悉,可以参考《Typecho中的路由解析》一文。

匹配之后,发生了什么事情呢?

  1. Typecho的路由系统对url进行解析以及正则匹配,最终会将Widget_Archive这个类load进来并进行初始化。
  2. Widget_Archive初始化阶段,Typecho的Widget系统会将cid=10作为参数,来初始化这个Widget_Archive控件,并执行Widget_Archiveexecute()函数。
  3. 最后,Typecho的路由系统拿到步骤2中初始化的Widget_Archive实例后,执行其render()函数,进行页面渲染。

提醒:Widget_Archive的render函数中,是通过require_once的方式来加载主题页面片的,所以在页面片中(譬如post.php),才可以直接使用$this来调用Widget_Archive实例中的函数。

Widget_Archive常见用法:

以slug方式加载某分类文章列表:

$archives = $this->widget('Widget_Archive', 'pageSize=10&type=category&page='.$page, 'slug='.$slug)

以mid方式加载某分类文章列表:

$archives = $this->widget('Widget_Archive', 'pageSize=10&type=category&page='.$page, 'mid='.$slug)

加载搜索结果列表:

$archives = $this->widget('Widget_Archive', 'pageSize=10&type=search&page='.$page, 'keywords='.$query);

赞(275) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Typecho中Widget_Archive的详解》
文章链接:https://www.machunjie.com/web/webjiaocheng/886.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

:smile: :sad: :arrow: :cool: :confused: :cry: :eek: :evil: :exclaim: :idea: :lol: :mad: :mrgreen: :neutral: :question: :razz: :redface: :rolleyes: :surprised: :wink: :biggrin: :twisted: