首页 > CMS > PhpCMS > 正文

phpcms v9文章模块二次开发(排序 用户名)

2024-09-10 07:16:11
字体:
来源:转载
供稿:网友

今天看到了三篇关于phpcms v9文章模块的一些应用功能上的修改,包括了文章模块前后面排序问题与文章发布时不显示用户名的修改方法,希望文章能给大家有帮助.

更改后台文章排序

修改文件:phpcmsmodulescontent 中的 content.php,代码如下:

  1. $datas = $this->db->listinfo($where,’id desc’,$_GET['page']); 
  2.  
  3. //改成 
  4.  
  5. $datas = $this->db->listinfo($where,’listorder ASC, id desc’,$_GET['page']); 

关联文章排序陈旧问题

修改 phpcms/modules/content/classes/content_tag.class.php 内容模型标签类文件,将 content_tag 类中 relation 方法修改为:

  1. /** 
  2. * 相关文章标签 
  3. * @param $data 
  4. */ 
  5. public function relation($data) { 
  6. $catid = intval($data['catid']); 
  7. if(!$this->set_modelid($catid)) return false; 
  8. $order = $data['order']; 
  9. $sql = “`status`=99″; 
  10. $limit = $data['id'] ? $data['limit']+1 : $data['limit']; 
  11. if($data['relation']) { 
  12. $relations = explode(‘|’,trim($data['relation'],’|’)); 
  13. $relations = array_diff($relationsarray(null)); 
  14. $relations = implode(‘,’,$relations); 
  15. $sql = ” `id` IN ($relations)”; 
  16. $key_array = $this->db->select($sql, ‘*’, $limit$order,”,’id’); 
  17. elseif($data['keywords']) { 
  18. $keywords = str_replace(‘%’, ”,$data['keywords']); 
  19. $keywords_arr = explode(‘ ‘,$keywords); 
  20. $key_array = array(); 
  21. $number = 0; 
  22. $i =1; 
  23. foreach ($keywords_arr as $_k) { 
  24. $sql2 = $sql.” AND `keywords` LIKE ‘%$_k%’”.(isset($data['id']) && intval($data['id']) ? ” AND `id` != ‘”.abs(intval($data['id'])).”‘” : ”); 
  25. $r = $this->db->select($sql2, ‘*’, $limit$order,”,’id’); 
  26. $number += count($r); 
  27. foreach ($r as $id=>$v) { 
  28. if($i<= $data['limit'] && !in_array($id$key_array)) $key_array[$id] = $v
  29. $i++; 
  30. if($data['limit']<$numberbreak
  31. if($data['id']) unset($key_array[$data['id']]); 
  32. return $key_array

其实只是将 $r = $this->db->select($sql2, ‘*’, $limit, ”,”,’id’); 替换为了 $r = $this->db->select($sql2, ‘*’, $limit, $order,”,’id’); 让order参数传入查询方法.

在模板当中,使用如下标签,加上order参数即可实现排序了,代码如下:

  1. {pc:content action=”relation” relation=”$relation” id=”$id” catid=”$catid” num=”5″ keywords=”$rs[keywords]” order=”id DESC”} 
  2. {loop $data $r} 
  3. {/loop} 
  4. {/pc} 

如果有洁癖的朋友,担心直接修改PC会影响未来升级,可以将其单独提取出来,放到模板中当作函数使用,代码如下:

  1. <?php 
  2. /** 
  3. * 内容模型 – 相关文章标签(修正排序异常问题) 
  4. * @param $data 
  5. */ 
  6. function mk1_content_tag_relation($data) { 
  7. $db = pc_base::load_model(‘content_model’); 
  8. $catid = intval($data['catid']); 
  9. $siteids = getcache(‘category_content’,’commons’); 
  10. if(!$siteids[$catid]) return false; 
  11. $siteid = $siteids[$catid]; 
  12. $category = getcache(‘category_content_’.$siteid,’commons’); 
  13. if(emptyempty($category)) return false; 
  14. if($category[$catid]['type']!=0) return false; 
  15. $db->set_model($category[$catid]['modelid']); 
  16. $order = $data['order']; 
  17. $sql = “`status`=99″; 
  18. $limit = $data['id'] ? $data['limit']+1 : $data['limit']; 
  19. if($data['relation']) { 
  20. $relations = explode(‘|’,trim($data['relation'],’|’)); 
  21. $relations = array_diff($relationsarray(null)); 
  22. $relations = implode(‘,’,$relations); 
  23. $sql = ” `id` IN ($relations)”; 
  24. $key_array = $db->select($sql, ‘*’, $limit$order,”,’id’); 
  25. elseif($data['keywords']) { 
  26. $keywords = str_replace(‘%’, ”,$data['keywords']); 
  27. $keywords_arr = explode(‘ ‘,$keywords); 
  28. $key_array = array(); 
  29. $number = 0; 
  30. $i =1; 
  31. foreach ($keywords_arr as $_k) { 
  32. $sql2 = $sql.” AND `keywords` LIKE ‘%$_k%’”.(isset($data['id']) && intval($data['id']) ? ” AND `id` != ‘”.abs(intval($data['id'])).”‘” : ”); 
  33. $r = $db->select($sql2, ‘*’, $limit$order,”,’id’); 
  34. $number += count($r); 
  35. foreach ($r as $id=>$v) { 
  36. if($i<= $data['limit'] && !in_array($id$key_array)) $key_array[$id] = $v
  37. $i++;//开源软件:Vevb.com 
  38. if($data['limit']<$numberbreak
  39. if($data['id']) unset($key_array[$data['id']]); 
  40. return $key_array
  41. ?> 

在模板中,使用如下PHP代码获取即可,代码如下:

  1. {php $data = mk1_content_tag_relation(array(‘relation’=>$relation,’id’=>$id,’catid’=>$catid,’keywords’=>$rs['keywords'],’order’=>’id DESC’,’limit’=>’4′)); } 
  2. {loop $data $r} 
  3. {/loop} 

发布文章不显示用户名

V9前台静态有时候不显示更新用户的用户名,具体修改方法如下,content_model.class.php第120行,代码如下:

$urls['data']['username'] = $systeminfo['username'];//end

html.class.php第29行:必须要在这里获取传递过来的数组值.

$username=$data['username'];

edit_content方法,约280行:

  1. /*编辑部分从主表数据库中查出用户名,传递模版*/ 
  2. $temp = $this->get_one(array(‘id’=>$id)); 
  3. $urls['data']['username'] = $temp['username']; 
  4. //end 

添加文章时选择相关文章可调用其它模型信息,首先,在模型管理的设计师模型中,修改相关文章的“相关参数”这里面的值,找到这行语句,把如下代码:

  1. <input type=’button’ value=”添加相关” onclick=”omnipotent(‘selectid’,’?m=content&c=content& a=public_relationlist&modelid={MODELID}’,’添加相关文章’,1)” class=”button” style=”width:66px;”> 
  2. //修改为: 
  3. <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)罢了,这一步已经可以实现了选择不同模型的文章,接下来解决选择后保存后再进入编辑不会显示的问题,还是找到型管理的设计师模型中,修改相关文章的“相关参数”这里面的值,把代码如下:

  1. <input type=’button’ value=”显示已有” onclick=”show_relation({MODELID},{ID})” class=”button” style=”width:66px;”> 
  2. //修改为: 
  3. <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行左右.为如下代码:

  1. function show_relation…. 
  2. $.getJSON(“?m=content;………. 

我把这两行修改为了如下代码:

  1. function show_relation(modelid,target_modelid,id) { 
  2. $.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();这行后面换行加入如下代码:

  1. $this->db->set_model($target_modelid); 
  2. $this->model = getcache(‘model’, ‘commons’); 
  3. $this->db->table_name = $this->db->db_tablepre.$this->model[$target_modelid]['tablename']; 

其中的“$this->db->table_name = $tablename;” 这一行是被上面第三行替换了。

OK,大功告成,因为已经破坏了原生的相关文章功能了,如果你以后再使用相关文章的功能时,要记得先到模型的字段中的“相关参数”的值哦.

在前台调用相关文章时,用下列标签:

  1. if $relation!=”} 
  2. {php $rel = explode(‘|’,$relation);} 
  3. {loop $rel $design_id} </p> 
  4. <p> {pc:get sql=”select title,id,url,thumb from v9_design where id=$design_id”} 
  5. {loop $data $r} 
  6. <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>  
  7. {/loop} 
  8. {/pc}</p> 
  9. <p>{/loop} 
  10. {/if}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表