怎么非插件实现文章置顶功能? - Typecho教程

在Typecho主题开发的过程中,置顶功能是一项很实用的功能,这次在重写主题时,看到别人有的置顶文章这种功能,于是自己参考 Sticky插件 写了这种方法,添加在自己主题里

在Typecho主题开发的过程中,置顶功能是一项很实用的功能,这次在重写主题时,看到别人有的置顶文章这种功能,于是自己参考 Sticky插件 写了这种方法,添加在自己主题里。页希望能帮助到各位T主题开发者。

跟 Sticky插件 一样

在 index.php 的 $this->title(); 前面加上 $this->sticky();可出现这段 html.
例: <h2 class="title"><a href="<?php $this->permalink() ?>"><?php $this->sticky(); $this->title() ?></a></h2>

代码放在主题下index.php中:

/** 文章置顶 */
$sticky = '1'; //置顶的文章id,多个用|隔开
if($sticky){
    $sticky_cids = explode('|',$sticky); //分割文本
    $sticky_html = "<span style='color:red'>[置顶] </span>"; //置顶标题的 html

    $db = Typecho_Db::get();
    $pageSize = $this->options->pageSize;
    $select1 = $this->select()->where('type = ?', 'post');
    $select2 = $this->select()->where('type = ? && status = ? && created < ?', 'post','publish',time());

    //清空原有文章的列队
    $this->row = [];
    $this->stack = [];
    $this->length = 0;

    $order = '';
    foreach($sticky_cids as $i => $cid) {
        if($i == 0) $select1->where('cid = ?', $cid);
        else $select1->orWhere('cid = ?', $cid);
        $order .= " when $cid then $i";
        $select2->where('table.contents.cid != ?', $cid); //避免重复
    }
    if ($order) $select1->order(null,"(case cid$order end)"); //置顶文章的顺序 按 $sticky 中 文章ID顺序
    if ($this->_currentPage == 1) foreach($db->fetchAll($select1) as $sticky_post){ //首页第一页才显示
        $sticky_post['sticky'] = $sticky_html;
        $this->push($sticky_post); //压入列队
    }

    $uid = $this->user->uid; //登录时,显示用户各自的私密文章
    if($uid) $select2->orWhere('authorId = ? && status = ?',$uid,'private');

    $sticky_posts = $db->fetchAll($select2->order('table.contents.created', Typecho_Db::SORT_DESC)->page($this->_currentPage, $this->parameter->pageSize));
    foreach($sticky_posts as $sticky_post) $this->push($sticky_post); //压入列队
    $this->setTotal($this->getTotal()-count($sticky_cids)); //置顶文章不计算在所有文章内
}

相关推荐

怎么非插件实现文章置顶功能? - Typecho教程-Npcink
怎么非插件实现文章置顶功能? - Typecho教程-Npcink

怎么用纯代码添加算术验证码功能? - Typecho教程

怎么非插件实现文章置顶功能? - Typecho教程-Npcink
怎么非插件实现文章置顶功能? - Typecho教程-Npcink

怎么免插件开启评论@小尾巴 - Typecho教程

Typecho

Polyhedron - 简洁大方的双栏自适应Typecho博客主题

2020-8-15 22:49:32

Typecho

Mozz Plus - 响应式昼夜双色简约Typecho主题

2020-8-15 23:09:24

⚠️
Npcink上的部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。
无意侵害您的权益,请发送邮件至 1355471563#qq.com 或点击右侧 私信:Muze 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索