今天看到了三篇關于phpcms v9文章模塊的一些應用功能上的修改,包括了文章模塊前后面排序問題與文章發布時不顯示用戶名的修改方法,希望文章能給大家有幫助.
更改后臺文章排序
修改文件:phpcmsmodulescontent 中的 content.php,代碼如下:
- $datas = $this->db->listinfo($where,’id desc’,$_GET['page']);
- //改成
- $datas = $this->db->listinfo($where,’listorder ASC, id desc’,$_GET['page']);
關聯文章排序陳舊問題
修改 phpcms/modules/content/classes/content_tag.class.php 內容模型標簽類文件,將 content_tag 類中 relation 方法修改為:
- /**
- * 相關文章標簽
- * @param $data
- */
- public function relation($data) {
- $catid = intval($data['catid']);
- if(!$this->set_modelid($catid)) return false;
- $order = $data['order'];
- $sql = “`status`=99″;
- $limit = $data['id'] ? $data['limit']+1 : $data['limit'];
- if($data['relation']) {
- $relations = explode(‘|’,trim($data['relation'],’|’));
- $relations = array_diff($relations, array(null));
- $relations = implode(‘,’,$relations);
- $sql = ” `id` IN ($relations)”;
- $key_array = $this->db->select($sql, ‘*’, $limit, $order,”,’id’);
- } elseif($data['keywords']) {
- $keywords = str_replace(‘%’, ”,$data['keywords']);
- $keywords_arr = explode(‘ ‘,$keywords);
- $key_array = array();
- $number = 0;
- $i =1;
- foreach ($keywords_arr as $_k) {
- $sql2 = $sql.” AND `keywords` LIKE ‘%$_k%’”.(isset($data['id']) && intval($data['id']) ? ” AND `id` != ‘”.abs(intval($data['id'])).”‘” : ”);
- $r = $this->db->select($sql2, ‘*’, $limit, $order,”,’id’);
- $number += count($r);
- foreach ($r as $id=>$v) {
- if($i<= $data['limit'] && !in_array($id, $key_array)) $key_array[$id] = $v;
- $i++;
- }
- if($data['limit']<$number) break;
- }
- }
- if($data['id']) unset($key_array[$data['id']]);
- return $key_array;
- }
其實只是將 $r = $this->db->select($sql2, ‘*’, $limit, ”,”,’id’); 替換為了 $r = $this->db->select($sql2, ‘*’, $limit, $order,”,’id’); 讓order參數傳入查詢方法.
在模板當中,使用如下標簽,加上order參數即可實現排序了,代碼如下:
- {pc:content action=”relation” relation=”$relation” id=”$id” catid=”$catid” num=”5″ keywords=”$rs[keywords]” order=”id DESC”}
- {loop $data $r}
- {/loop}
- {/pc}
如果有潔癖的朋友,擔心直接修改PC會影響未來升級,可以將其單獨提取出來,放到模板中當作函數使用,代碼如下:
- <?php
- /**
- * 內容模型 – 相關文章標簽(修正排序異常問題)
- * @param $data
- */
- function mk1_content_tag_relation($data) {
- $db = pc_base::load_model(‘content_model’);
- $catid = intval($data['catid']);
- $siteids = getcache(‘category_content’,’commons’);
- if(!$siteids[$catid]) return false;
- $siteid = $siteids[$catid];
- $category = getcache(‘category_content_’.$siteid,’commons’);
- if(emptyempty($category)) return false;
- if($category[$catid]['type']!=0) return false;
- $db->set_model($category[$catid]['modelid']);
- $order = $data['order'];
- $sql = “`status`=99″;
- $limit = $data['id'] ? $data['limit']+1 : $data['limit'];
- if($data['relation']) {
- $relations = explode(‘|’,trim($data['relation'],’|’));
- $relations = array_diff($relations, array(null));
- $relations = implode(‘,’,$relations);
- $sql = ” `id` IN ($relations)”;
- $key_array = $db->select($sql, ‘*’, $limit, $order,”,’id’);
- } elseif($data['keywords']) {
- $keywords = str_replace(‘%’, ”,$data['keywords']);
- $keywords_arr = explode(‘ ‘,$keywords);
- $key_array = array();
- $number = 0;
- $i =1;
- foreach ($keywords_arr as $_k) {
- $sql2 = $sql.” AND `keywords` LIKE ‘%$_k%’”.(isset($data['id']) && intval($data['id']) ? ” AND `id` != ‘”.abs(intval($data['id'])).”‘” : ”);
- $r = $db->select($sql2, ‘*’, $limit, $order,”,’id’);
- $number += count($r);
- foreach ($r as $id=>$v) {
- if($i<= $data['limit'] && !in_array($id, $key_array)) $key_array[$id] = $v;
- $i++;//開源軟件:Vevb.com
- }
- if($data['limit']<$number) break;
- }
- }
- if($data['id']) unset($key_array[$data['id']]);
- return $key_array;
- }
- ?>
在模板中,使用如下PHP代碼獲取即可,代碼如下:
- {php $data = mk1_content_tag_relation(array(‘relation’=>$relation,’id’=>$id,’catid’=>$catid,’keywords’=>$rs['keywords'],’order’=>’id DESC’,’limit’=>’4′)); }
- {loop $data $r}
- {/loop}
發布文章不顯示用戶名
V9前臺靜態有時候不顯示更新用戶的用戶名,具體修改方法如下,content_model.class.php第120行,代碼如下:
$urls['data']['username'] = $systeminfo['username'];//end
html.class.php第29行:必須要在這里獲取傳遞過來的數組值.
$username=$data['username'];
edit_content方法,約280行:
- /*編輯部分從主表數據庫中查出用戶名,傳遞模版*/
- $temp = $this->get_one(array(‘id’=>$id));
- $urls['data']['username'] = $temp['username'];
- //end
添加文章時選擇相關文章可調用其它模型信息,首先,在模型管理的設計師模型中,修改相關文章的“相關參數”這里面的值,找到這行語句,把如下代碼:
- <input type=’button’ value=”添加相關” onclick=”omnipotent(‘selectid’,’?m=content&c=content& a=public_relationlist&modelid={MODELID}’,’添加相關文章’,1)” class=”button” style=”width:66px;”>
- //修改為:
- <input type=’button’ value=”添加相關” onclick=”omnipotent(‘selectid’,’?m=content&c=content&a=public_relationlist&modelid=2′,’添加相關文章’,1)” class=”button” style=”width:66px;”>
其實只是把上面的 {MODELID} 換成了目標模型ID(設計案例模型的ID)罷了,這一步已經可以實現了選擇不同模型的文章,接下來解決選擇后保存后再進入編輯不會顯示的問題,還是找到型管理的設計師模型中,修改相關文章的“相關參數”這里面的值,把代碼如下:
- <input type=’button’ value=”顯示已有” onclick=”show_relation({MODELID},{ID})” class=”button” style=”width:66px;”>
- //修改為:
- <input type=’button’ value=”顯示已有” onclick=”show_relation(1,2,{ID})” class=”button” style=”width:66px;”>
注意第一行的 onclick="show_relation({MODELID},{ID})"
我把他修改為了 onclick="show_relation(1,2,{ID})" ,這里我有必要解釋一下,{MODELID}是調用本文章的所屬模型ID,我修改為show_relation(1,2,{ID}),懂的朋友一看就知道,我多了一個參數,為什么多了一個參數呢,上面也說到了,默認只有同模型的文章可以選擇,所以這里做了一個目標模型ID,第一個參數是源模型ID,第二個參數是目標模型ID,這里面修改后保存.
show_relation()這個是JS函數,既然多了一個參數,那我們也要修改JS文件嘍,找到statics/js/content_addtop.js的153,154行左右.為如下代碼:
- function show_relation….
- $.getJSON(“?m=content;……….
我把這兩行修改為了如下代碼:
- function show_relation(modelid,target_modelid,id) {
- $.getJSON(“?m=content&c=content&a=public_getjson_ids&modelid=”+modelid+”&target_modelid=”+target_modelid+”&id=”+id, function(json){
JS修改過后,接下來我們修改最后的PHP文件,找到phpcmsmodulescontentcontent.php 574行左右,也就是public function public_getjson_ids()這行左右,在$modelid = intval($_GET['modelid']); 行后換行加入如下代碼:
$target_modelid = intval($_GET['target_modelid']);
在586行也就是$infos = array();這行后面換行加入如下代碼:
- $this->db->set_model($target_modelid);
- $this->model = getcache(‘model’, ‘commons’);
- $this->db->table_name = $this->db->db_tablepre.$this->model[$target_modelid]['tablename'];
其中的“$this->db->table_name = $tablename;” 這一行是被上面第三行替換了。
OK,大功告成,因為已經破壞了原生的相關文章功能了,如果你以后再使用相關文章的功能時,要記得先到模型的字段中的“相關參數”的值哦.
在前臺調用相關文章時,用下列標簽:
- if $relation!=”}
- {php $rel = explode(‘|’,$relation);}
- {loop $rel $design_id} </p>
- <p> {pc:get sql=”select title,id,url,thumb from v9_design where id=$design_id”}
- {loop $data $r}
- <td class=”pr5″><a href=”http://www.111cn.net /blog/{$r[url]}” title=”{$r[title]}” target=”_blank”><img src=”http://www.111cn.net /blog/{$r[thumb]}” width=”190″ height=”120″ class=”imgborder” alt=”{$r[title]}” /></a><p class=”mt5″><a href=”http://www.111cn.net/ blog/{$r[url]}” title=”{$r[title]}” target=”_blank”>{str_cut($r[title],’32′)}</a></p></td>
- {/loop}
- {/pc}</p>
- <p>{/loop}
- {/if}
新聞熱點
疑難解答