phpcms 정렬이 그대로 유지되면 어떻게 해야 하나요?
phpcms 관련 기사의 불변 순서 문제를 수정하는 방법:
phpcms/modules/content/classes/content_tag.class.php 콘텐츠 모델 태그 클래스를 열고 이 태그가 콘텐츠가 있을 때만 존재하는지 확인하세요. 관련 판독값을 인위적으로 설정한 다음 순서 매개변수에 따라 정렬합니다. 컨텐츠에 관련 내용을 인위적으로 설정하지 않은 경우 키워드를 기준으로 쿼리를 수행하지만, 이때 order 매개변수는 정렬되지 않습니다. 대신 정렬되지 않습니다. 기사에서 호출되는 관련 독서가 항상 오래된 이유입니다.
이 문제를 해결하는 방법은 다음과 같습니다.
phpcms/modules/content/classes/content_tag.class.php 콘텐츠 모델 태그 클래스 파일을 수정하고 content_tag 클래스의 관계 메서드를 다음과 같이 수정합니다.
The 코드는 다음과 같습니다:
/** * 相关文章标签 * @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'); = $this->db-> ;select($sql2, '*', $limit, $order,'','id');
템플릿에서 다음 태그를 사용하고 순서 매개변수를 추가하여 정렬을 수행하세요.
코드는 다음과 같습니다.
{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(empty($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++; } 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}
사실 이건 작은 문제일 뿐이고 앞으로는 PC를 수정해야 할 것 같습니다. 위의 방법은 불안한 웹마스터 친구들에게 제공됩니다.
추천 튜토리얼: "PHP 비디오 튜토리얼"
위 내용은 phpcms 관련 글의 순서가 바뀌지 않으면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!