options->sticky; if ($sticky && $this->is('index') || $this->is('front')) { $sticky_cids = explode(',', $sticky); //分割文本 $cid_count = count($sticky_cids); $sticky_html = "[置顶] "; //置顶标题的 html $db = Typecho_Db::get(); // 获取数据库 $pageSize = $this->parameter->pageSize - $cid_count; // 每页显示文章数 $select1 = $this->select()->where('type = ?', 'post'); // 获取文章1 $select2 = $this->select()->where('type = ? && status = ? && created < ?', 'post', 'publish', time()); // 获取文章2 //清空原有文章的列队 $this->row = array(); $this->stack = array(); $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('', "(case cid$order end)"); } //置顶文章的顺序 按 $sticky 中 文章ID顺序 if ($this->_currentPage == 1 || $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, $pageSize)); foreach ($sticky_posts as $sticky_post) { $this->push($sticky_post); } //压入列队 $this->setTotal($this->getTotal()); //置顶文章不计算在所有文章内 } ?>