dede:likearticle文章標簽和tag標簽關聯錯誤怎么辦?
織夢5.7有個dede:likearticle標記是用來文章的關聯,但是在使用的過程中,我們卻發現這個關聯實在是雞肋,作者卻發現,大家在使用織夢5.7搜索的時候是不是還能勉強接受呢?作者就把dede的搜索功能給替換到這個likearticle上,看樣子的確是好多了。
推薦學習:織夢cms
代碼簡介
作者把默認以keywords關鍵字來關聯文章改成以tags來關聯,并且加了一個判斷,在執行以tags的模糊查詢之后,如果查詢的數據為空的話,就直接再直接再次查詢本欄目下所有推薦的文章,這個比較好,就是保持著一直有返回值。
作者考慮到有的文章沒有tags,而有的文章有tags卻沒有查詢到文章,所以就先判斷是否有tags如果沒有就直接查詢本欄目下推薦文章,如果有tags標簽卻查詢到為空的文章那么也返回當前欄目下的推薦文章。
likearticle和tag標簽關聯解決方法/步驟
第1步:使用記事本或一些工具打開“根目錄includetagliblikearticle.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%’ “);
電腦互助網添加代碼意思:原來的模糊查詢語句,作者在這里多加了一個短標題也要查詢,不過我不喜歡用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['typeid'];//取出當前欄目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('c',?arc.flag)>0?and?arc.ismake?=?1?And?(arc.typeid?in?($typeids)?or?arc.typeid2?in($typeids)?or?CONCAT(?',',?arc.typeid2,?','?)?LIKE?'%,$typeids,%'?)?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)SetQuery($query2); }else{ $dsql->SetQuery($query); }
以下是源代碼101行到107全部注銷的圖,單擊圖片查看大圖:
以上代碼意思:按tag標簽關聯文章內容 query2為備用,如果按tags標記查詢的數據為空的話,第二個就可以用到了。
第5步:在第原代碼117行下添加以下代碼并保存。
代碼如下:
$typeids=$refObj->Fields['typeid'];//取出當前欄目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('c',?arc.flag)>0?and?arc.ismake?=?1?And?(arc.typeid?in?($typeids)?or?arc.typeid2?in($typeids)?or?CONCAT(?',',?arc.typeid2,?','?)?LIKE?'%,$typeids,%'?)?And?arc.arcrank?>?-1?ORDER?BY?arc.sortrank?desc?LIMIT?0,$row"; $dsql->SetQuery($query);
以下是源代碼111行到117全部注銷的圖,單擊圖片查看大圖:
以上代碼意思:第5步查的是當tags標簽有內容時查的,第5步就是當tags標簽不為空時執行的SQL。
第6步:完成之后并上傳到空間,即可,作者就不演示代碼后的效果了,如果非想看效果的話,看本文右側的相關文章就明白了。
筌于一些網友對SQL不敏感,可能會認為本文寫的一點都看不懂,自己也改不了,沒關系,這是下載地址:likearticle.lib.rar