【phpcms-v9】如何在頻道頁面動態顯示當前頻道各個子欄目的部分信息.
1.案例:如何在當前頻道頁動態的顯示其子欄目部分內容,注意,當前頻道頁下的子欄目可能屬于不同的模型,如下:
難點:①需要在index.php控制器中獲取當前頻道下所有的子欄目②需要獲取當前子欄目的所對應的模型 ③根據模型查詢不同的模型表返回數據
注意:一個頻道頁可以有多個子欄目,每個子欄目又可以屬于不同的模型
- 奢侈品牌【頻道名稱】
- LV【子欄目名稱:品牌英文名稱】
- 品牌簡介【子欄目名稱:品牌模型】
- 品牌識別【子欄目名稱:文章模型】
- 品牌圖片【子欄目名稱:圖片模型】
- 品牌動態【子欄目名稱:文章模型】
- 品牌視頻【子欄目名稱:視頻模型】
- BALLY【子欄目名稱:品牌英文名稱】
- 品牌簡介【子欄目名稱:品牌模型】
- 品牌識別【子欄目名稱:文章模型】
- 品牌圖片【子欄目名稱:圖片模型】
- 品牌動態【子欄目名稱:文章模型】
- 品牌視頻【子欄目名稱:視頻模型】
- 。。。
2.前臺控制器index.php中list()方法代碼:
- //列表頁
- public function lists() {
- $catid = intval($_GET['catid']); //欄目id
- $_priv_data = $this->_category_priv($catid); //檢查閱讀權限
- if($_priv_data=='-1') { //請登錄
- $forward = urlencode(get_url());
- showmessage(L('login_website'),APP_PATH.'index.php?m=member&c=index&a=login&forward='.$forward);
- } elseif($_priv_data=='-2') { //沒權限
- showmessage(L('no_priv'));
- }
- $_userid = $this->_userid; //用戶id
- $_username = $this->_username; //用戶名
- $_groupid = $this->_groupid; //用戶會員組id
- if(!$catid) showmessage(L('category_not_exists'),'blank'); //欄目不存在
- $siteids = getcache('category_content','commons'); //獲取所有欄目對應的站點id
- $siteid = $siteids[$catid]; //獲取當前欄目對應的站點id
- $CATEGORYS = getcache('category_content_'.$siteid,'commons'); //獲取當前站點下所有欄目的詳細配置信息
- if(!isset($CATEGORYS[$catid])) showmessage(L('category_not_exists'),'blank');
- $CAT = $CATEGORYS[$catid]; //獲取當前欄目的詳細配置信息
- $siteid = $GLOBALS['siteid'] = $CAT['siteid']; //獲取當前欄目的站點id
- //這行代碼很重要
- extract($CAT); //從當前欄目詳細配置信息的數組中將變量導入到當前的符號表
- $setting = string2array($setting); //將設置信息轉換為數組格式
- //SEO
- if(!$setting['meta_title']) $setting['meta_title'] = $catname; //title
- $SEO = seo($siteid, '',$setting['meta_title'],$setting['meta_description'],$setting['meta_keywords']);//description
- define('STYLE',$setting['template_list']); //模板風格,默認為default
- $page = $_GET['page']; //當前頁碼
- $template = $setting['category_template'] ? $setting['category_template'] : 'category';//欄目首頁模板
- $template_list = $setting['list_template'] ? $setting['list_template'] : 'list';//欄目列表頁模板
- if($type==0) { //0-內部欄目 1-單網頁 2-外部鏈接
- $template = $child ? $template : $template_list;//$child,是否有子欄目: 1-有 0-沒有
- $arrparentid = explode(',', $arrparentid); //當前欄目所有的父欄目組成的父欄目id數組
- $top_parentid = $arrparentid[1] ? $arrparentid[1] : $catid;//當前欄目的頂級欄目id
- $array_child = array(); //當前欄目下一級欄目的id組成的數組
- $self_array = explode(',', $arrchildid); //當前欄目的所有子欄目組成的id數組,包含當前欄目id自身
- //獲取一級欄目ids
- foreach ($self_array as $arr) {
- if($arr!=$catid && $CATEGORYS[$arr][parentid]==$catid) {
- $array_child[] = $arr;//當前欄目下一級欄目id組成的數組,不包含當前欄目id
- }
- }
- /*以下代碼為新添加代碼,如果出現問題,可立即將其注釋即可
- *將當前欄目下所有的子欄目數組打印出來
- echo "<pre>";
- print_r($array_child);
- */
- foreach($array_child as $cat_id){
- if($CATEGORYS[$cat_id][catname] == "品牌動態"){
- $pinpaidongtaiid=$cat_id;
- }
- if($CATEGORYS[$cat_id][catname] == "品牌識別"){
- $pinpaishibieid=$cat_id;
- }
- if($CATEGORYS[$cat_id][catname] == "品牌視頻"){
- $pinpaishipinid=$cat_id;
- }
- if($CATEGORYS[$cat_id][catname] == "品牌圖集"){
- $pinpaitujiid=$cat_id;
- }
- if($CATEGORYS[$cat_id][catname] == "品牌知識"){
- $pinpaizhishiid=$cat_id;
- $modelid = $CATEGORYS[$cat_id]['modelid']; //當前欄目所屬模型id
- //當前模型id所對應的主表名稱:文章模型-news ,下載模型-download , 圖片模型-picture 品牌模型-pinpai
- $tablename = $this->db->table_name = $this->db->db_tablepre."pinpai";//當前模型id對應的主表名
- $r = $this->db->get_one(); //返回的主表數據,條件:where id=$id
- //當前模型id所對應的副表名
- $this->db->table_name = $tablename.'_data'; //當前模型id所對應的副表名-pinpai_data
- $r2 = $this->db->get_one(array('id'=>$r['id'])); //返回的副表數據,條件:where id=$id
- $rs = $r2 ? array_merge($r,$r2) : $r; //如果有返回副表數據,則將主表數據與副表數據合并后再返回,否則返回主表數據
- //再次重新賦值,以數據庫為準
- $cat_id = $CATEGORYS[$r['catid']]['catid']; //欄目id
- $modelid = $CATEGORYS[$r['catid']]['modelid']; //模型id
- require_once CACHE_MODEL_PATH.'content_output.class.php';
- $content_output = new content_output($modelid,$cat_id,$CATEGORYS);//主要用來對查詢到的記錄做一下過濾,僅此而已
- $data_pinpaizhishi = $content_output->get($rs); //定位模型為品牌模型,返回pinpai及附表中的數據 //參數:查詢到的數據
- }
- }
- $arrchildid = implode(',', $array_child);//當前欄目下一級欄目id所組成的數組
- //URL規則
- $urlrules = getcache('urlrules','commons');//獲取所有的url重寫規則
- //如: 1 => '{$categorydir}{$catdir}/index.html|{$categorydir}{$catdir}/{$page}.html'
- $urlrules = str_replace('|', '~',$urlrules[$category_ruleid]);//當前欄目頁的url重寫規則id
- $tmp_urls = explode('~',$urlrules);//當前欄目頁的url重寫規則數組
- $tmp_urls = isset($tmp_urls[1]) ? $tmp_urls[1] : $tmp_urls[0];//如果是數組,采用第一個url
- preg_match_all('/{/$([a-z0-9_]+)}/i',$tmp_urls,$_urls);//$_urls:正則匹配的結果賦值給此變量
- /**
- * print_r($_urls):匹配到的結果
- * Array
- (
- [0] => Array
- (
- [0] => {$catid}
- [1] => {$page}
- )
- [1] => Array
- (
- [0] => catid
- [1] => page
- )
- )
- */
- if(!emptyempty($_urls[1])) {
- foreach($_urls[1] as $_v) {
- $GLOBALS['URL_ARRAY'][$_v] = $_GET[$_v];
- }
- }
- //如: 1 => '{$categorydir}{$catdir}/index.html|{$categorydir}{$catdir}/{$page}.html'
- define('URLRULE', $urlrules);
- $GLOBALS['URL_ARRAY']['categorydir'] = $categorydir;//
- $GLOBALS['URL_ARRAY']['catdir'] = $catdir;//英文欄目名稱
- $GLOBALS['URL_ARRAY']['catid'] = $catid;//欄目id
- include template('content',$template);//如果有子欄目-欄目首頁模板 如果無子欄目-欄目列表頁模板
- } else {
- //單網頁
- $this->page_db = pc_base::load_model('page_model');
- $r = $this->page_db->get_one(array('catid'=>$catid));
- if($r) extract($r);
- $template = $setting['page_template'] ? $setting['page_template'] : 'page';
- $arrchild_arr = $CATEGORYS[$parentid]['arrchildid'];
- if($arrchild_arr=='') $arrchild_arr = $CATEGORYS[$catid]['arrchildid']; //開源軟件:Vevb.com
- $arrchild_arr = explode(',',$arrchild_arr);
- array_shift($arrchild_arr);
- $keywords = $keywords ? $keywords : $setting['meta_keywords'];
- $SEO = seo($siteid, 0, $title,$setting['meta_description'],$keywords);
- include template('content',$template);
- }
- }
3.頻道頁面對應的模板文件:
- <!-- 品牌右側 -->
- <div class="pinpai_right">
- <div class="pinpaixq_tabnav">
- <img src="http://www.49028c.com/statics/images/zhenpin/pinpai_detail_images/pinpaixq_tabnav.jpg" alt="a">
- </div>
- <!--品牌動態 -->
- <div class="pinpaidt">
- <dl class="pinpaidt_top">
- <dt class="pinpaidt_font"></dt>
- <dd>
- <a href="#">更多<span></span></a>
- </dd>
- </dl>
- <!-- pc標簽會根據content_tag.class.php文件中接受到的catid參數的值重新定位模型及要查詢的模型表 -->
- {pc:content action="lists" catid="$pinpaidongtaiid" num="3" order="id DESC"}
- {loop $data $r}
- <dl class="pinpaidt_c">
- <dt>
- <a href="{$r[url]}"><img src="{$r[thumb]}" width="141" height="106" alt="{$r[title]}"></a>
- </dt>
- <dd>
- <h3><a href="{$r[url]}">{$r[title]}</a></h3>
- <p>
- {str_cut($r[description],400,'...')}
- </p>
- </dd>
- </dl>
- {/loop}
- {/pc}
- </div>
- <!--品牌識別 -->
- <div class="pinpaishibie">
- <dl class="pinpaishibie_top">
- <dt class="pinpaishibie_font"></dt>
- <dd>
- <a href="#">更多<span></span></a>
- </dd>
- </dl>
- <!-- pc標簽會根據content_tag.class.php文件中接受到的catid參數的值重新定位模型及要查詢的模型表 -->
- {pc:content action="lists" catid="$pinpaishibieid" num="4" order="id DESC"}
- {loop $data $r}
- <dl class="pinpaishibie_c">
- <dt>
- <a href="{$r[url]}"><img src="{$r[thumb]}" width="91" height="91" alt="{$r[title]}"></a>
- </dt>
- <dd>
- <h3><a href="{$r[url]}">{$r[title]}</a></h3>
- <p>
- {str_cut($r[description],100,'...')}
- </p>
- </dd>
- </dl>
- {/loop}
- {/pc}
- </div>
- <!-- 品牌圖片-->
- <div class="pinpaitupian">
- <dl class="pinpaitupian_top">
- <dt class="pinpaitupian_font"></dt>
- <dd>
- <a href="#">更多<span></span></a>
- </dd>
- </dl>
- <ul class="pinpaitupian_c">
- <!-- pc標簽會根據content_tag.class.php文件中接受到的catid參數的值重新定位模型及要查詢的模型表 -->
- {pc:content action="lists" catid="$pinpaitujiid" num="8" order="id DESC"}
- {loop $data $r}
- <li>
- <a href="{$r[url]}"><img src="{$r[thumb]}" width="141" height="141" alt="{$r[title]}"></a>
- <p><a href="{$r[url]}">{$r[title]}</a></p>
- </li>
- {/loop}
- {/pc}
- </ul>
- </div>
- <!-- 品牌視頻 -->
- <div class="pinpaishipin">
- <dl class="pinpaishipin_top">
- <dt class="pinpaishipin_font"></dt>
- <dd>
- <a href="#">更多<span></span></a>
- </dd>
- </dl>
- <div class="pinpaishipin_c">
- <!-- pc標簽會根據content_tag.class.php文件中接受到的catid參數的值重新定位模型及要查詢的模型表 -->
- {pc:content action="lists" catid="$pinpaishipinid" num="3" order="id DESC"}
- {loop $data $r}
- <a href="{$r[url]}"><img src="{$r[thumb]}" width="200" height="127" alt="{$r[title]}"></a>
- {/loop}
- {/pc}
- </div>
- </div>
新聞熱點
疑難解答