Typecho 文档:使用 widgetById 调用多篇指定文章

6 小时前

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

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

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

文档说明

Typecho 有个 widgetById 内置的方法(详见 var/Utils/Helper.php 文件),用于根据指定的表名(如 contentscommentsmetasusers)和主键 ID 获取对应的 Widget 对象。本文档通过使用 widgetById 获取指定多篇文章数据来实现诸如专题类文章列表的功能(演示),当然,也可由此扩展获取评论、分类、标签、用户等数据。


使用方法

A 涉及文件

usr/themes/***/post.php

B 改造文件

作用:在文章页调用指定文章

1. 打开文件  usr/themes/***/post.php 添加以下代码(留意注释,以及按需修改):

$ids = $this->fields->fieldName; // 使用自定义字段 fieldName (自行更改)获取指定多篇文章,格式如 cid,cid,cid

if ($ids !== null && strlen($ids) > 0) { // 如果 fieldName 存在且有值,避免使用 isset 判断时在某些环境下不生效
    $idArr = explode(',', $ids);

    foreach ($idArr as $id) {
        $lopwon = Helper::widgetById('Contents', $id); // 根据 ID 获取单个 Widget 对象
        
        if (!empty($lopwon->cid)) {
            echo '<a href="' . $lopwon->permalink . '">' . $lopwon->title . '</a><br>';
        } else {
            echo '无 cid=' . $id . ' 文章数据<br>';
        }
    }
}

至此,通过新增自定义字段并指定文章 cid 即可在该篇文章页调用这些文章信息。
store