Heim >CMS-Tutorial >PHPCMS >Was soll ich tun, wenn die Reihenfolge der phpcms-bezogenen Artikel unverändert bleibt?

Was soll ich tun, wenn die Reihenfolge der phpcms-bezogenen Artikel unverändert bleibt?

coldplay.xixi
coldplay.xixiOriginal
2020-06-10 09:41:312206Durchsuche

Was soll ich tun, wenn die Reihenfolge der phpcms-bezogenen Artikel unverändert bleibt?

Was soll ich tun, wenn die phpcms-Sortierung unverändert bleibt?

So ändern Sie das Problem der unveränderten Sortierung von phpcms-bezogenen Artikeln:

Öffnen Sie das Inhaltsmodell phpcms/modules/content/classes/content_tag.class.php Tag-Klasse: Es wurde festgestellt, dass dieses Tag nur dann nach dem Bestellparameter sortiert wird, wenn der Inhalt künstlich verwandte Messwerte festgelegt hat. Wenn der Inhalt keine künstlich festgelegten verwandten Messwerte aufweist, wird die Abfrage auf der Grundlage von Schlüsselwörtern durchgeführt, aber zu diesem Zeitpunkt ist der Bestellparameter nicht sortiert. Stattdessen wird es nicht sortiert. Aus diesem Grund sind die in Artikeln genannten zugehörigen Lesarten immer so alt.

Die Methode zur Behebung dieses Problems lautet wie folgt:
Ändern Sie die Inhaltsmodell-Tag-Klassendatei phpcms/modules/content/classes/content_tag.class.php und ändern Sie die Beziehung Methode in der content_tag-Klasse zu:

Der Code lautet wie folgt:

/**
* 相关文章标签
* @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;
}

Tatsächlich ist es nur $r = $this->db->select($sql2, '* ', $limit, '','', 'id'); ersetzt durch $r = $this->db->select($sql2, '*', $limit, $order,'','id '); und lassen Sie den Bestellparameter an die Abfragemethode übergeben.
Verwenden Sie in der Vorlage die folgenden Tags und fügen Sie den Bestellparameter hinzu, um eine Sortierung zu erreichen.

Der Code lautet wie folgt:

{pc:content action="relation" relation="$relation" id="$id" catid="$catid" num="5" keywords="$rs[keywords]" order="id DESC"}
{loop $data $r}
{/loop}
{/pc}

Wenn Sie ein mysophober Freund sind, der befürchtet, dass sich eine direkte Änderung des PCs auf zukünftige Upgrades auswirkt, können Sie ihn separat extrahieren. Fügen Sie es in die Vorlage ein und verwenden Sie es als Funktion. Der Code lautet wie folgt:

Der Code lautet wie folgt:

<?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;
}
?>

Verwenden Sie in der Vorlage den folgenden PHP-Code, um ihn zu erhalten.

Der Code lautet wie folgt:

{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}

Tatsächlich handelt es sich nur um ein kleines Problem, das in Zukunft behoben werden sollte. Die obige Methode wird diesen besorgten Webmaster-Freunden zur Verfügung gestellt.

Empfohlenes Tutorial: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn die Reihenfolge der phpcms-bezogenen Artikel unverändert bleibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn