【phpcms-v9】對{pc}標簽進行二次開發,讓其可以獲取limit指定的文章條數.
1.{pc}標簽中limit參數只有在有分頁的情況下才會起作用,在無分頁的情況下是不起作用的,那么如果我們想獲取指定數據段的記錄,該如何操作呢?
以下寫法都不能滿足需求:
- {pc:content action="lists" catid="$catid" order="id desc" limit="0,7" } {/pc} //默認獲取的第0篇到第7篇文章
- {pc:content action="lists" catid="$catid" order="id desc" limit="7,7" } {/pc} //默認獲取的還是第0篇到第7篇文章,而不是第7篇到14篇文章
- {pc:content action="lists" catid="$catid" order="id desc" num="7" } {/pc} //默認獲取的還是第0篇到第7篇文章
- {pc:content action="lists" catid="$catid" order="id desc" limit="7,7" num=“7” } {/pc} //默認獲取的還是第0篇到第7篇文章,而不是第7篇到14篇文章
- {pc:content action="lists" catid="$catid" order="id desc" num="7" start=“7” } {/pc} //這樣應該能夠獲取到第7篇到第14篇文章,從第7篇文章開始,獲取后面的7篇文章
2.如果想實現如圖功能,該如何操作呢?
第①步:在pc標簽中添加limitt參數,注意是limitt,而不是limit,或者任意名稱的參數:
- <!-- 第0-7篇文章 -->
- {php $i=0;}
- {pc:content action="lists" catid="$catid" limitt="0,7" order="id DESC"}
- <ul class="erji_center_content">
- {loop $data $r}
- <li><a href="{$r[url]}">{$r[title]}</a></li>
- {/loop}
- </ul>
- <span class="border-cx"></span>
- {/pc}
- <!-- 第7-14篇文章 -->
- {php $i=0;}
- {pc:content action="lists" catid="$catid" limitt="7,7" order="id DESC"}
- <ul class="erji_center_content">
- {loop $data $r}
- <li><a href="{$r[url]}">{$r[title]}</a></li>
- {/loop}
- </ul>
- <span class="border-cx"></span>
- {/pc}
- <!-- 第14-21篇文章 -->
- {php $i=0;}
- {pc:content action="lists" catid="$catid" limitt="14,7" order="id DESC"}
- <ul class="erji_center_content">
- {loop $data $r}
- <li><a href="{$r[url]}">{$r[title]}</a></li>
- {/loop}
- </ul>
- <span class="border-cx"></span>
- {/pc}
第②步:修改content_tag.class.php文件中的lists方法
- /**
- * 列表頁標簽:主要返回的是主表中數據與附表中數據
- * @param $data
- */
- public function lists($data) {
- $catid = intval($data['catid']); //pc標簽中catid屬性
- //加上這行代碼即可
- $data['limit'] = (isset($data['limitt'])&& (!emptyempty($data['limitt'])))?$data['limitt']:$data['limit'];
- //pc標簽中limit屬性,此行代碼由weiyanhui添加
- if(!$this->set_modelid($catid)) return false; //會根據欄目id->對應的模型id->對應的模型表
- if(isset($data['where'])) { //如果pc標簽中設置了where屬性,一般情況下不存在
- $sql = $data['where'];
- } else { //如果pc標簽中沒有設置where屬性
- $thumb = intval($data['thumb']) ? " AND thumb != ''" : ''; //如果有thumb屬性
- if($this->category[$catid]['child']) { //當前欄目下是否存在子欄目
- $catids_str = $this->category[$catid]['arrchildid']; //所有子欄目id,包括當前欄目自身id
- $pos = strpos($catids_str,',')+1;
- $catids_str = substr($catids_str, $pos); //所有子欄目id,不包括當前欄目自身id
- $sql = "status=99 AND catid IN ($catids_str)".$thumb; //拼接成一個sql語句
- } else {
- $sql = "status=99 AND catid='$catid'".$thumb; //如果當前欄目下不存在子欄目
- }
- }
- $order = $data['order']; //pc標簽中order屬性
- //$sql作為一個條件出現,調用的是model.calss.php文件中的select方法,返回結果集數組,并按照鍵名'id'排序
- $return = $this->db->select($sql, '*', $data['limit'], $order, '', 'id');//從數據庫中獲取主表數據,使用的也是sql語句查詢
- //注意:修改了$data['limit']為$data['limitt']了,修改于2012年09月21日 19:15
- //如果需要在前臺顯示類別名稱,可添加如下代碼
- $TYPES = getcache('type_content','commons');//獲取類別緩存文件,此文件緩存了所有與類別信息相關的信息
- foreach ($return as $key=>$v) {
- $return[$key][typename]=$TYPES[$v['typeid']][name];//給$return中的每篇文章追加一個類別字段
- }
- //echo "<pre>";
- //print_r($return);
- //調用副表的數據
- if (isset($data['moreinfo']) && intval($data['moreinfo']) == 1) { //如果pc標簽中設置了moreinfo屬性:是否調用附表數據
- $ids = array();
- //$return為返回的主表數據
- foreach ($return as $v) { //循環主表中的記錄信息:$v-主表中的每條記錄
- if (isset($v['id']) && !emptyempty($v['id'])) {
- $ids[] = $v['id']; //ids[]是主表中排序完成的文章id數組
- } else {
- continue;
- }
- }
- if (!emptyempty($ids)) {
- $this->db->table_name = $this->db->table_name.'_data'; //副表名
- $ids = implode('/',/'', $ids); //以逗號拼接成一個字符串
- $r = $this->db->select("`id` IN ('$ids')", '*', '', '', '', 'id');//查詢與主表中數據有關的副表中的數據
- if (!emptyempty($r)) {
- foreach ($r as $k=>$v) { //副表中的數據
- //$return:返回的主表中的數據,主表中的id字段值與附表中的id字段值是對應的,也就是說一篇文章在主表中存儲的id跟在附表中存儲的id的值是相等的
- if (isset($return[$k])) $return[$k] = array_merge($v, $return[$k]);//主表中數據與副表中數據合并
- } //開源軟件:Vevb.com
- }
- }
- }
- return $return;
- }
發現在pc標簽中,并不是所有的條件參數都可以是變量的,如下所示:
{pc content="lists" catid="$catid" limit="$start,9"}{/pc}
catid:可以是變量
limit:中的第一個條件是不可以為變量的,再如:where="" 也是不允許出現變量的,當pc標簽的參數為單個條件時可以為變量,多個條件時不可以為變量.
新聞熱點
疑難解答