Que dois-je faire si le tri phpcms reste inchangé ?
Comment modifier le problème de tri inchangé des articles liés à phpcms :
Ouvrir le modèle de contenu phpcms/modules/content/classes/content_tag.class.php classe de balises , il s'avère que cette balise sera triée en fonction du paramètre d'ordre uniquement lorsque le contenu a artificiellement défini des lectures associées. Lorsque le contenu n'a pas de lectures associées artificiellement définies, la requête est effectuée sur la base de mots-clés, mais à ce stade, le paramètre d'ordre n'est pas trié. Au lieu de cela, il n’est pas trié. C'est pourquoi les lectures connexes appelées articles sont toujours aussi anciennes.
La méthode pour corriger ce problème est la suivante :
Modifier le fichier de classe de balise du modèle de contenu phpcms/modules/content/classes/content_tag.class.php, et modifier la relation méthode dans la classe content_tag pour :
Le code est le suivant :
/** * 相关文章标签 * @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; }
En fait, c'est juste $r = $this->db->select($sql2, '* ', $limit, '','', 'id'); remplacé par $r = $this->db->select($sql2, '*', $limit, $order,'','id '); et laissez le paramètre order être transmis à la méthode de requête.
Dans le modèle, utilisez les balises suivantes et ajoutez le paramètre order pour réaliser le tri.
Le code est le suivant :
{pc:content action="relation" relation="$relation" id="$id" catid="$catid" num="5" keywords="$rs[keywords]" order="id DESC"} {loop $data $r} {/loop} {/pc}
Si vous êtes un ami mysophobe qui craint que la modification directe du PC n'affecte les futures mises à niveau, vous pouvez l'extraire séparément. Mettez-le dans le modèle et utilisez-le comme fonction. Le code est le suivant :
Le code est le suivant :
<?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; } ?>
Dans le template, utilisez le code PHP suivant pour l'obtenir.
Le code est le suivant :
{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}
En fait, ce n'est qu'un petit problème. Le PC devrait être corrigé à l'avenir. La méthode ci-dessus est fournie à ces amis webmasters anxieux.
Tutoriel recommandé : "Tutoriel vidéo PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!