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)'":"ORCONCAT(arc.title,arc.keywords,arc.shorttitle)REGEXP'($k)'";”
源代码87行注销://$keyword.=($keyword==''?"CONCAT(arc.keywords,'',arc.title)LIKE'%$k%'":"ORCONCAT(arc.keywords,'',arc.title)LIKE'%$k%'");
电脑互助网添加代码意思:原来的模糊查询语句,作者在这里多加了一个短标题也要查询,不过我不喜欢用linke这个模糊查询,所以在这里换成REGEXP查询。
第4步:在第107行下面添加以下代码并保存。
代码如下:
$query="SELECTarc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepathFROM`dede_archives`arcLEFTJOIN`dede_arctype`tponarc.typeid=tp.idWHERE$keywordandarc.ismake=1andarc.id<>$arcidORDERBYarc.sortrankdescLIMIT0,$row";$typeids=$refObj->Fields['typeid'];//取出当前栏目ID$query2="SELECTarc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepathFROM`dede_archives`arcLEFTJOIN`dede_arctype`tponarc.typeid=tp.idWHEREFIND_IN_SET('c',arc.flag)>0andarc.ismake=1And(arc.typeidin($typeids)orarc.typeid2in($typeids)orCONCAT(',',arc.typeid2,',')LIKE'%,$typeids,%')Andarc.arcrank>-1ORDERBYarc.sortrankdescLIMIT0,$row";$query3="SELECTarc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepathFROMdede_archivesarcLEFTJOINdede_arctypetponarc.typeid=tp.idWHERE$keywordandarc.ismake=1andarc.id<>$arcidORDERBYarc.sortrankdescLIMIT0,$row";//这里的SQL具体按自己的数据库的表字段写吧,我这是直接写死了,哎没办法,能力有限。$result=mysql_query($query3);//query36判断专用的,主要是作者不会用SetQuery呀,郁闷。我是直接拼的SQLif(mysql_num_rows($result)<1){$dsql->SetQuery($query2);}else{$dsql->SetQuery($query);}