因为做了个说说的功能,结果发现,文章上下文会查出说说的cid,但因为没有标题,无法实现链接转入。

用typecho自带的函数,怎么也解决不了这个问题,于是就想着做2个函数,找出最邻近上下文中的cid,再在文章中通过上下文cid链接来实现。

具体代码:

一、在 funciton.php 文件中添加2个函数:

// 获取上一篇文章CID
function getPrevCid($created)
{
    $db = Typecho_Db::get();
    $query = $db->select()->from('table.contents')
        ->where("type = ?", "post")
        ->where("created < ?", $created)
        ->order("created", Typecho_Db::SORT_DESC);
    $results = $db->fetchAll($query);

    foreach ($results as $result) {
        if (strlen($result["title"]) > 0) :
            return $result["cid"];
            break;
        endif;
    }
}
// 获取下一篇文章CID
function getNextCid($created)
{
    $db = Typecho_Db::get();
    $query1 = $db->select()->from('table.contents')
        ->where("type = ?", "post")
        ->where("created > ?", $created)
        ->order("created", Typecho_Db::SORT_ASC);
    $results = $db->fetchAll($query1);

    foreach ($results as $result) {
        if (strlen($result["title"]) > 0) :
            return $result["cid"];
            break;
        endif;
    }
}
因为不知道怎么在查询语句中通过 where 过滤不为空的标题,只能通过循环实现了。

二、在 post.php 内容代码下方添加如下代码:

<div>
    <?php if (getPrevCid($this->created)) :
        $this->widget('Widget_Archive@precid', 'pageSize=1&type=post', 'cid=' . getPrevCid($this->created) . '')->to($PrevContent);
        echo '<a href="' . $PrevContent->permalink . '"> 上一篇:' . $PrevContent->title . '</a>';
    else :
        echo "没有了";
    endif; ?>
</div>

<div>
    <?php if (getNextCid($this->created)) :
        $this->widget('Widget_Archive@nextcid', 'pageSize=1&type=post', 'cid=' . getNextCid($this->created) . '')->to($NextContent);
        echo '<a href="' . $NextContent->permalink . '"> 下一篇:' . $NextContent->title . '</a>';
    else :
        echo "没有了";
    endif; ?>
</div>