查询某tags的所有文章,如何调用同tags的文章
devin最近使用帝国CMS做某不知名网站,需要通过tags调用文章列表,在首页按照不同tags输出同tags下的文章列表。
这个需求可以通过tagsinfo轻松完成调用,下面说说另外一种方法,通过e:loop万能标签,采用sql直接查询数据库的方法实现(嘿嘿,devin对e:loop情有独钟!)
一、帝国cms系统的tags放在哪里的
查了下帝国的数据字典,显示在phome_ecms_news表中的infotags字段,但是通过mysql去查询,没有发现这个字段,可能帝国的数据字典没有及时更新,devin使用的是7.2 UTF-8的帝国系统。
那么,7.2帝国的tags究竟放在哪里的呢?
在“dsp18_ecms_news_data_1”表中发现infotags字段以为逗号相隔形式保存了tags名称:
为什么全是英文的?
哎,我还没解决标签列表页的URL优化问题,URL的参数包含标签名字,如果标签名字为中文,会导致URL非常不友好!扯远了,后续在研究看,能不能把标签列表页URL中,标签名字参数改为标签ID代替
二、MYSQL列中的数据以逗号隔开,如何查询/检索?
FIND_IN_SET 的函数可以解决你的问题,这个函数是根据字符串列表以英文逗号分隔进行检索的:
SELECT * FROM `table` WHERE FIND_IN_SET (str, strlist)
FIND_IN_SET (str, strlist) 在strlist中查找str
strlist可以是列名,查找默认是以逗号隔开
三、实现代码分享
找到了查询/检索逗号分隔数据的方法之后,就好办,通过(文章)id把dsp18_ecms_news_data_1和dsp18_ecms_news表进行连接,然后就能查询到想要的结果了,直接用e:loop+SQL实现即可
[e:loop={'select titleurl,title,ftitle from phome_ecms_news_data_1 as dtable,phome_ecms_news as ctable where dtable.id = ctable.id and FIND_IN_SET("ssp",infotags)',3,24,0}] <li><a href="<?=$bqsr[titleurl]?>" title="<?=$bqr[title]?>" target="_blank"><?=$bqr[ftitle]?></a></li> [/e:loop]
不过感觉这里有个缺陷,就是表名字“phome_ecms_news_data_1”,最后的尾巴数字1,如果分表多了,则最后的数字会变的。 哎还是用tagsinfo标签实现吧。