【phpcms-v9】利用[后臺]->[類別管理]為文章前后臺添加類別名稱.
1.給專題添加文章時,可以選擇類別:
2.給文章模型、圖片模型、下載模型的欄目下添加文章內容時,默認不能選擇類別:
3.文章模型、圖片模型、下載模型的欄目下添加文章內容時,能不能像專題一樣可以選擇類別?
4.如,要完成如下功能:在PHPCMS的文章管理列表,要實現在文章標題前顯示文章類別,這樣就可以直接在文章列表里看到類別,不需要點擊進入編輯頁面才可以看到:
完成方法:打開 phpcms/modules/content/templates/content_list.tpl.php 文件,找到:
- <td>
- <?php
- if($status==99) {
- if($r['islink']) {
- echo '<a href="'.$r['url'].'" target="_blank">';
- } elseif(strpos($r['url'],'http://')!==false) {
- echo '<a href="'.$r['url'].'" target="_blank">';
- } else {
- echo '<a href="'.$release_siteurl.$r['url'].'" target="_blank">';
- }
- } else {
- echo '<a href="javascript:;" onclick=/'window.open("?m=content&c=content&a=public_preview&steps='.$steps.'&catid='.$catid.'&id='.$r['id'].'","manage")/'>';
- }?><span<?php echo title_style($r['style'])?>><?php echo $r['title'];?></span></a> <?php if($r['thumb']!='') {echo '<img src="'.IMG_PATH.'icon/small_img.gif" title="'.L('thumb').'">'; } if($r['posids']) {echo '<img src="'.IMG_PATH.'icon/small_elite.gif" title="'.L('elite').'">';} if($r['islink']) {echo ' <img src="'.IMG_PATH.'icon/link.png" title="'.L('islink_url').'">';}?></td>
- <td align='center' title="<?php echo L('today_hits');?>:<?php echo $hits_r['dayviews'];?>
- <?php echo L('yestoday_hits');?>:<?php echo $hits_r['yestodayviews'];?>
- <?php echo L('week_hits');?>:<?php echo $hits_r['weekviews'];?>
- <?php echo L('month_hits');?>:<?php echo $hits_r['monthviews'];?>"><?php echo $hits_r['views'];?></td>
- <td align='center'>
- <?php
- if($r['sysadd']==0) {
- echo "<a href='?m=member&c=member&a=memberinfo&username=".urlencode($r['username'])."&pc_hash=".$_SESSION['pc_hash']."' >".$r['username']."</a>";
- echo '<img src="'.IMG_PATH.'icon/contribute.png" title="'.L('member_contribute').'">'; //開源軟件:Vevb.com
- } else {
- echo $r['username'];
- }
- ?></td>
在其前面添加如下幾行代碼即可:
- <span style="color:#CCC">
- <?php $TYPE = getcache('type_content','commons');?>
- 【<?php echo $TYPE[$r['typeid']]['name'];?>】
- </span>
合并到一塊如下:
- <td>
- <span style="color:#CCC">
- <?php $TYPE = getcache('type_content','commons');?>
- 【<?php echo $TYPE[$r['typeid']]['name'];?>】
- </span>
- <?php
- if($status==99) {
- if($r['islink']) {
- echo '<a href="'.$r['url'].'" target="_blank">';
- } elseif(strpos($r['url'],'http://')!==false) {
- echo '<a href="'.$r['url'].'" target="_blank">';
- } else {
- echo '<a href="'.$release_siteurl.$r['url'].'" target="_blank">';
- }
- } else {
- echo '<a href="javascript:;" onclick=/'window.open("?m=content&c=content&a=public_preview&steps='.$steps.'&catid='.$catid.'&id='.$r['id'].'","manage")/'>';
- }?><span<?php echo title_style($r['style'])?>><?php echo $r['title'];?></span></a> <?php if($r['thumb']!='') {echo '<img src="'.IMG_PATH.'icon/small_img.gif" title="'.L('thumb').'">'; } if($r['posids']) {echo '<img src="'.IMG_PATH.'icon/small_elite.gif" title="'.L('elite').'">';} if($r['islink']) {echo ' <img src="'.IMG_PATH.'icon/link.png" title="'.L('islink_url').'">';}?></td>
- <td align='center' title="<?php echo L('today_hits');?>:<?php echo $hits_r['dayviews'];?>
- <?php echo L('yestoday_hits');?>:<?php echo $hits_r['yestodayviews'];?>
- <?php echo L('week_hits');?>:<?php echo $hits_r['weekviews'];?>
- <?php echo L('month_hits');?>:<?php echo $hits_r['monthviews'];?>"><?php echo $hits_r['views'];?></td>
- <td align='center'>
- <?php
- if($r['sysadd']==0) {
- echo "<a href='?m=member&c=member&a=memberinfo&username=".urlencode($r['username'])."&pc_hash=".$_SESSION['pc_hash']."' >".$r['username']."</a>";
- echo '<img src="'.IMG_PATH.'icon/contribute.png" title="'.L('member_contribute').'">';
- } else {
- echo $r['username'];
- }
- ?></td>
5.如何在前臺顯示類別名稱?
如果想在前臺顯示類別名稱也可以通過上述方法來完成,比如:在pc標簽中完成類別名稱的添加,注明:pc標簽調用的都是phpcms/modules/content/libs/classes/content_tag.class文件,文件中的方法對應pc標簽中的action屬性,如:{pc:content action="lists"}{/pc} 對應文件中 public lists(){//代碼}.
第一種方法:在pc標簽的lists方法中添加類別名稱
- /**
- * 列表頁標簽:主要返回的是主表中數據與附表中數據
- * @param $data
- */
- public function lists($data) {
- $catid = intval($data['catid']); //pc標簽中catid屬性
- 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語句查詢
- //如果需要在前臺顯示類別名稱,可添加如下代碼
- /*
- $TYPES = getcache('type_content','commons');//獲取類別緩存文件,此文件緩存了所有與類別信息相關的信息
- foreach ($return as $key=>$v) {
- $return[$key][typename]=$TYPES[$v['typeid']][name];//給$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]);//主表中數據與副表中數據合并
- }
- }
- }
- }
- return $return;
- }
如果在pc標簽的lists方法中添加類別名稱,則列表頁前臺代碼應該如下:
- <!-- 列表頁新聞,每頁顯示25條新聞 -->
- {pc:content action="lists" catid="$catid" num="25" order="id DESC" page="$page"}
- <ul class="list lh24 f14">
- {loop $data $r}
- <li>
- <span class="rt">{date('Y-m-d H:i:s',$r[inputtime])}</span>·
- <!--類別名稱-->
- <font color="blue">[$r[typename]]</font>
- <a href="{$r[url]}" target="_blank"{title_style($r[style])}>{$r[title]}</a></li>
- {if $n%5==0}<li class="bk20 hr">
- </li>
- {/if}
- {/loop}
- </ul>
- <!-- 分頁 -->
- <div id="pages" class="text-c">{$pages}</div>
- {/pc}
第二種方法:直接在前臺代碼添加類別名稱
如果直接在列表頁前臺代碼中添加類別名稱,則代碼應該如下:
- <!-- 列表頁新聞,每頁顯示25條新聞 -->
- {php $TYPES = getcache('type_content','commons');}
- {pc:content action="lists" catid="$catid" num="25" order="id DESC" page="$page"}
- <ul class="list lh24 f14">
- {loop $data $r}
- <li><span class="rt">{date('Y-m-d H:i:s',$r[inputtime])}</span><font color="blue">[ {$TYPES[$r[typeid]][name]}]</font>·<a href="{$r[url]}" target="_blank"{title_style($r[style])}>{$r[title]}</a></li>
- {if $n%5==0}<li class="bk20 hr"></li>{/if}
- {/loop}
- </ul>
- <!-- 分頁 -->
- <div id="pages" class="text-c">{$pages}</div>
- {/pc}
效果都如下所示:
新聞熱點
疑難解答