首頁 >CMS教程 >DEDECMS >dede:likearticle文章標籤和tag標籤關聯錯誤怎麼辦

dede:likearticle文章標籤和tag標籤關聯錯誤怎麼辦

藏色散人
藏色散人原創
2019-12-27 10:12:162163瀏覽

dede:likearticle文章標籤和tag標籤關聯錯誤怎麼辦

dede:likearticle文章標籤和tag標籤關聯錯誤怎麼辦?

織夢5.7有個dede:likearticle標記是用來文章的關聯,但是在使用的過程中,我們卻發現這個關聯實在是雞肋,作者卻發現,大家在使用織夢5.7搜尋的時候是不是還能勉強接受呢?作者就把dede的搜尋功能給替換到這個likearticle上,看樣子的確是好多了。

推薦學習:織夢cms

程式碼簡介

#作者把預設以keywords關鍵字來關聯文章改成以tags來關聯,並且加了一個判斷,在執行以tags的模糊查詢之後,如果查詢的資料為空的話,就直接再直接再次查詢本欄位下所有推薦的文章,這個比較好,就是保持著一直有回傳值。

作者考慮到有的文章沒有tags,而有的文章有tags卻沒有查詢到文章,所以就先判斷是否有tags如果沒有就直接查詢本欄位推薦文章,如果有tags標籤卻查詢到為空的文章那麼也傳回目前欄位下的推薦文章。

likearticle和tag標籤關聯解決方法/步驟

第1步:使用記事本或一些工具開啟「根目錄\include\taglib\likearticle.lib.php」此檔案。

第2步:搜尋“['keywords']”,全部替換成['tags']並儲存。

電腦互助網註;:

原程式碼55行:$keyword = ( !empty($refObj->Fields['keywords']) ? $refObj->Fields[ 'keywords'] : '' );

原始程式碼75行:if(!empty($refObj->Fields['keywords']))

#原始程式碼77行:$ keywords = explode(',' , trim($refObj->Fields['keywords']));

第3步:在87行下加上「$keyword .= $keyword=='' ? " CONCAT(arc.title,arc.keywords,arc.shorttitle) REGEXP '($k)'": " OR CONCAT(arc.title,arc.keywords,arc.shorttitle) REGEXP '($k)'"; ”

原始碼87行註銷://$keyword .= ($keyword=='' ? " CONCAT(arc.keywords,' ',arc.title) LIKE '%$k%' " : " OR CONCAT(arc.keywords,' ',arc.title) LIKE '%$k%' ");

dede:likearticle文章標籤和tag標籤關聯錯誤怎麼辦

電腦互助網加入程式碼意思:原來的模糊查詢語句,作者在這裡多加了一個短標題也要查詢,不過我不喜歡用linke這個模糊查詢,所以在這裡換成REGEXP查詢。

第4步:在第107行下方新增以下程式碼並儲存。

程式碼如下:

/**
按tag标签关联文章内容 query2为备用,如果query为空的话,第二个就直接显示出来
*/
$query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule, tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM `dede_archives` arc LEFT JOIN `dede_arctype` tp on arc.typeid=tp.id WHERE $keyword and arc.ismake = 1 and arc.id <> $arcid ORDER BY arc.sortrank desc LIMIT 0,$row";
$typeids=$refObj->Fields[&#39;typeid&#39;];//取出当前栏目ID
$query2 = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule, tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM `dede_archives` arc LEFT JOIN `dede_arctype` tp on arc.typeid=tp.id WHERE FIND_IN_SET(&#39;c&#39;, arc.flag)>0 and arc.ismake = 1 And (arc.typeid in ($typeids) or arc.typeid2 in($typeids) or CONCAT( &#39;,&#39;, arc.typeid2, &#39;,&#39; ) LIKE &#39;%,$typeids,%&#39; ) And arc.arcrank > -1 ORDER BY arc.sortrank desc LIMIT 0,$row";
/*query3是判断是否为空用的*/
$query3 = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule, tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM dede_archives arc LEFT JOIN dede_arctype tp on arc.typeid=tp.id WHERE $keyword and arc.ismake = 1 and arc.id <> $arcid ORDER BY arc.sortrank desc LIMIT 0,$row";//这里的SQL具体按自己的数据库的表字段写吧,我这是直接写死了,哎没办法,能力有限。
/*
这里是判断tags标签查询的是否为空值,如果是空值,就全部使用推荐返回值,如果有值,就直接显示tags关联。
*/
$result =mysql_query($query3);//query36判断专用的,主要是作者不会用SetQuery呀,郁闷。我是直接拼的SQL
if(mysql_num_rows($result)<1){
$dsql->SetQuery($query2);
}else{
$dsql->SetQuery($query);
}

以下是原始碼101行到107全部登出的圖,按一下圖片查看大圖:

dede:likearticle文章標籤和tag標籤關聯錯誤怎麼辦

#以上程式碼意思:按tag標籤關聯文章內容query2為備用,如果按tags標記查詢的資料為空的話,第二個就可以用到了。

步驟5:在第原始碼117行下新增以下程式碼並儲存。

程式碼如下:

$typeids=$refObj->Fields[&#39;typeid&#39;];//取出当前栏目ID
$query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule, tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM `dede_archives` arc LEFT JOIN `dede_arctype` tp on arc.typeid=tp.id WHERE FIND_IN_SET(&#39;c&#39;, arc.flag)>0 and arc.ismake = 1 And (arc.typeid in ($typeids) or arc.typeid2 in($typeids) or CONCAT( &#39;,&#39;, arc.typeid2, &#39;,&#39; ) LIKE &#39;%,$typeids,%&#39; ) And arc.arcrank > -1 ORDER BY arc.sortrank desc LIMIT 0,$row";
$dsql->SetQuery($query);

以下是原始碼111行到117全部登出的圖,按一下圖片查看大圖:

dede:likearticle文章標籤和tag標籤關聯錯誤怎麼辦

#以上程式碼意思:第5步查的是當tags標籤有內容時查的,第5步就是當tags標籤不為空時執行的SQL。

第6步:完成之後並上傳到空間,即可,作者就不示範程式碼後的效果了,如果非想看效果的話,看本文右側的相關文章就明白了。

筌於一些網友對SQL不敏感,可能會認為本文寫的一點都看不懂,自己也改不了,沒關係,這是下載地址:likearticle.lib.rar

以上是dede:likearticle文章標籤和tag標籤關聯錯誤怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn