Maison > Tutoriel CMS > PHPCMS > Que dois-je faire si l'ordre des articles liés à phpcms reste inchangé ?

Que dois-je faire si l'ordre des articles liés à phpcms reste inchangé ?

coldplay.xixi
Libérer: 2020-06-10 09:47:48
original
2208 Les gens l'ont consulté

Que dois-je faire si l'ordre des articles liés à phpcms reste inchangé ?

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[&#39;limit&#39;] && !in_array($id, $key_array)) $key_array[$id] = $v;
$i++;
}
if($data[&#39;limit&#39;]<$number) break;
}
}
if($data[&#39;id&#39;]) unset($key_array[$data[&#39;id&#39;]]);
return $key_array;
}
Copier après la connexion

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}
Copier après la connexion

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(&#39;content_model&#39;);
$catid = intval($data[&#39;catid&#39;]);
$siteids = getcache(&#39;category_content&#39;,&#39;commons&#39;);
if(!$siteids[$catid]) return false;
$siteid = $siteids[$catid];
$category = getcache(&#39;category_content_&#39;.$siteid,&#39;commons&#39;);
if(empty($category)) return false;
if($category[$catid][&#39;type&#39;]!=0) return false;
$db->set_model($category[$catid][&#39;modelid&#39;]);
$order = $data[&#39;order&#39;];
$sql = "`status`=99";
$limit = $data[&#39;id&#39;] ? $data[&#39;limit&#39;]+1 : $data[&#39;limit&#39;];
if($data[&#39;relation&#39;]) {
$relations = explode(&#39;|&#39;,trim($data[&#39;relation&#39;],&#39;|&#39;));
$relations = array_diff($relations, array(null));
$relations = implode(&#39;,&#39;,$relations);
$sql = " `id` IN ($relations)";
$key_array = $db->select($sql, &#39;*&#39;, $limit, $order,&#39;&#39;,&#39;id&#39;);
} elseif($data[&#39;keywords&#39;]) {
$keywords = str_replace(&#39;%&#39;, &#39;&#39;,$data[&#39;keywords&#39;]);
$keywords_arr = explode(&#39; &#39;,$keywords);
$key_array = array();
$number = 0;
$i =1;
foreach ($keywords_arr as $_k) {
$sql2 = $sql." AND `keywords` LIKE &#39;%$_k%&#39;".(isset($data[&#39;id&#39;]) && intval($data[&#39;id&#39;]) ? " AND `id` != &#39;".abs(intval($data[&#39;id&#39;]))."&#39;" : &#39;&#39;);
$r = $db->select($sql2, &#39;*&#39;, $limit, $order,&#39;&#39;,&#39;id&#39;);
$number += count($r);
foreach ($r as $id=>$v) {
if($i<= $data[&#39;limit&#39;] && !in_array($id, $key_array)) $key_array[$id] = $v;
$i++;
}
if($data[&#39;limit&#39;]<$number) break;
}
}
if($data[&#39;id&#39;]) unset($key_array[$data[&#39;id&#39;]]);
return $key_array;
}
?>
Copier après la connexion

Dans le template, utilisez le code PHP suivant pour l'obtenir.

Le code est le suivant :

{php $data = mk1_content_tag_relation(array(&#39;relation&#39;=>$relation,&#39;id&#39;=>$id,&#39;catid&#39;=>$catid,&#39;keywords&#39;=>$rs[&#39;keywords&#39;],&#39;order&#39;=>&#39;id DESC&#39;,&#39;limit&#39;=>&#39;4&#39;)); }
{loop $data $r}
{/loop}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal