From 4c6e080c4d4f03b2a8657afc9b188d1e47f3b563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=AA=E5=AD=90?= Date: Wed, 24 Jul 2024 12:05:54 +0800 Subject: [PATCH] 0.5.7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加置顶文章的设置,样式来自于wordpress版本的主题样式 --- functions.php | 4 ++- postlist.php | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/functions.php b/functions.php index fbcde58..41323ab 100644 --- a/functions.php +++ b/functions.php @@ -5,7 +5,9 @@ function themeConfig($form) { $form->addInput($logoUrl); $icoUrl = new Typecho_Widget_Helper_Form_Element_Text('icoUrl', NULL, NULL, _t('站点 Favicon 地址')); $form->addInput($icoUrl); - $jzyear = new Typecho_Widget_Helper_Form_Element_Text('jzyear', NULL, NULL, _t('建站年份'), _t('eg. 2006')); + $sticky = new Typecho_Widget_Helper_Form_Element_Text('sticky', NULL, NULL, _t('置顶文章cid'), _t('多篇文章以`|`符号隔开'), _t('会在首页展示置顶文章。')); + $form->addInput($sticky); + $jzyear = new Typecho_Widget_Helper_Form_Element_Text('jzyear', NULL, NULL, _t('建站年份'), _t('eg. 2006'), _t('会在页脚显示。')); $form->addInput($jzyear); $showProfile = new Typecho_Widget_Helper_Form_Element_Radio('showProfile', array('0'=> _t('否'), '1'=> _t('是')), diff --git a/postlist.php b/postlist.php index fe31b1e..c7d3c7c 100644 --- a/postlist.php +++ b/postlist.php @@ -1,4 +1,70 @@ - +options->sticky ; //置顶的文章id,多个用|隔开 + +if ($sticky) { + $sticky_cids = array_filter(explode('|', $sticky)); //分割文本并过滤空值 + $sticky_html = " 置顶 "; //置顶标题的 html + + $db = Typecho_Db::get(); + $pageSize = $this->options->pageSize; + + // 构建置顶文章的查询 + $selectSticky = $this->select()->where('type = ?', 'post'); + foreach ($sticky_cids as $i => $cid) { + if($i == 0) + $selectSticky->where('cid = ?', $cid); + else + $selectSticky->orWhere('cid = ?', $cid); + } + + // 清空原有文章的列队 + $this->row = []; + $this->stack = []; + $this->length = 0; + + // 只在首页第一页展示置顶文章 + if (($this->_currentPage || $this->currentPage) == 1) { + $stickyPosts = $db->fetchAll($selectSticky); + foreach ($stickyPosts as $stickyPost) { + $stickyPost['title'] = $stickyPost['title'] . $sticky_html; + $this->push($stickyPost); //压入列队 + } + } + + // 构建普通文章的查询,排除置顶文章的 CID + $selectNormal = $this->select() + ->where('type = ?', 'post') + ->where('status = ?', 'publish') + ->where('created < ?', time()) + ->order('created', Typecho_Db::SORT_DESC) + ->page($this->_currentPage, $pageSize); + + foreach ($sticky_cids as $cid) { + $selectNormal->where('table.contents.cid != ?', $cid); + } + + // 登录用户显示私密文章 + if ($this->user->hasLogin()) { + $uid = $this->user->uid; + if ($uid) { + $selectNormal->orWhere('authorId = ? AND status = ?', $uid, 'private'); + } + } + + $normalPosts = $db->fetchAll($selectNormal); + foreach ($normalPosts as $normalPost) { + $this->push($normalPost); //压入列队 + } + + // 设置总数(减去置顶文章数量,以进行正确的分页) + $total = $this->getTotal() - count($sticky_cids); + $this->setTotal(max($total, 0)); // 确保总数不为负数 +} +?> next()): ?>