PHPCMS列表页where条件默认查找当前栏目下的文章
在使用PHPCMS的时候,我发现使用内容标签lists的的时候加了where条件会默认调用栏目所属模型的所有文章,下面是我在页面中使用的标签:
{pc:content action="lists" catid="$catid" where="id%2=0" order="id DESC" num="12"}
{loop $data $v}
{/loop}
{/pc}
未修改标签前,查看 /phpcms/modules/content/classes/content_tag.class.php 文件带where条件生成的sql语句都是不带catid,默认调用所属模型下面的所有文章;根据我的需求,只需要取当前栏目或子栏目的所有文章,所以在 content_tag.class.php 这个文件中小小修改了一下:
在文件 public function lists($data) 这个函数里,在
$sql = $data['where']
这行代码下方,大概65行,添加下面的代码
//drc 添加了 where 条件没有添加栏目的时候默认调用该栏目下的列表,不调用 模型的新闻 s if( strpos($sql,'catid=') === false && strpos($sql,'catid =') === false && $data['getmodel'] != 1 ){ if($this->category[$catid]['child']) { $catids_str = $this->category[$catid]['arrchildid']; $pos = strpos($catids_str,',')+1; $catids_str = substr($catids_str, $pos); $sql .= " AND catid IN ($catids_str)"; } else { $sql .= " AND catid='$catid'"; } } //dcr 添加了 where 条件没有添加栏目的时候默认调用该栏目下的列表,不调用 模型的新闻 e
上面代码,意思就是 如果页面标签where条件没有添加catid条件而且不调用所属模型,就默认调用当前栏目的文章;
这样就解决了,phpcms 标签 where条件不调用当前栏目id的问题;如果需要调用所属的模型文章,标签里加一个getmodel="1" 即可
{pc:content action="lists" catid="$catid" where="id%2=0" order="id DESC" num="12" getmodel="1"}
{loop $data $v}
{/loop}
{/pc}
Dcr163的博客
http://dcr163.cn/394.html(转载时请注明本文出处及文章链接)