phpcms文章调用的各种方式
[ 2016/01/29, Phpcms , 3120阅, 0评 ]

1.官方默认模板调用方式

{pc:content action="lists" catid="$catid" num="25" order="id DESC"}
<ul>
{loop $data $r}
<li><span>{date('Y-m-d H:i:s',$r[inputtime])}</span><a href="{$r[url]}"{title_style($r[style])}>{$r[title]}</a></li>
{/loop}
</ul>
<div>{$pages}</div>
{/pc}

2.调用相同模型下多个栏目的文章

a.这种方法的好处:可以想取那个栏目可以自定义;缺点:要写多个id,后台增加了栏目的话得再把id写进去。

{pc:get sql="SELECT * from v9_news where status=99 and catid in(21,22,23,24,25) thumb!='' order by id DESC" num="7" return="data"}
{loop $data $r}
<li><a href="{$r[url]}" title="{$r[title]}" target="_blank">{str_cut($r['title'],40)}({date('m-d',$r[inputtime])})</span></a></li>
{/loop}
{/pc}

b.根据父栏目id,如上面的21,22,23,24,25都是 15下面的子栏目,可以这样写

{loop subcat(15) $k $v}
{php $subcatid[] = $k;}
{/loop}
{php $subcatid = implode(',', $subcatid);}
{pc:get sql="SELECT * from v9_news where status=99 and catid in ($subcatid) order by id DESC" num="7" return="data" }
{loop $data $r}
<li>
<a href="{$CATEGORYS[$r[catid]][url]}">[{$CATEGORYS[$r[catid]][catname]}]</a>
<a href="{$r[url]}" title="{$r[title]}" target="_blank">{str_cut($r['title'],40)}</a>
<em>[{date('Y-m-d',$r[inputtime])}]</em>
</li>
{/loop}
{/pc}

好处:只要写一个父栏目id,自动取下级子栏目id;缺点:循环父栏目下所有的子栏目id,如果某个子栏目的内容不想显示的话,不好实现。

3.调取某个模型下的最新文章

{pc:get sql="SELECT a.title,a.catid,a.inputtime,b.catid,b.catname,a.url as turl,b.url as curl,a.id FROM `v9_news` a,`v9_category` b WHERE a.catid=b.catid ORDER BY `a`.`id` DESC" num="9" cache="300"}
{loop $data $r}
发布时间:{date('Y-m-d H:i:s',$r[inputtime])}<br>
所属分类:<a href="{$r[curl]}">{$r[catname]}</a><br>
标题链接:<a href="{$r[turl]}">{$r[title]}</a>
{/loop}
{/pc}

4.调用被推荐且指定栏目的文章

调用news模型中“被推荐到posid为1和2的推荐位且栏目id为6和9”的文章,start="0"表示从第一条开始调用。

{pc:get sql="SELECT * FROM v9_news WHERE id IN (SELECT id FROM v9_position_data WHERE posid in(1,2) and catid in(6,9)) order by listorder DESC" cache="3600" start="0" num="5" return="data"}
{loop $data $n $r}
<li><a href="{$r[url]}" target="_blank">{$r[title]}</a></li>
{/loop}
{/pc}

5.get方式直接用sql查询调用

用phpcms提供的get操作sql非常好用,它跳出了官方内置各种调用方式的限制,可自由灵活的按需使用。

{pc:get sql="select * from v9_news where catid=6"}
{pc:get sql="select * from v9_news where catid=6 and status=99 order by updatetime desc" num="5" page="$page"}
{pc:get sql="select * from v9_news where catid in(6,9) and status=99 order by updatetime desc" num="5" page="$page"}

6.修改默认的{pc:content action="lists"让它能调用多个栏目的文章(同模型)

文件位置:phpcms\modules\content\classes\content_tag.class.php,在public function lists($data)函数中

$catid = intval($data['catid']);
if(!$this->set_modelid($catid)) return false;
if(isset($data['where'])) {
	$sql = $data['where'];
} else {
	$thumb = intval($data['thumb']) ? " AND thumb != ''" : '';
	if($this->category[$catid]['child']) {
		$catids_str = $this->category[$catid]['arrchildid'];
		$pos = strpos($catids_str,',')+1;
		$catids_str = substr($catids_str, $pos);
		$sql = "status=99 AND catid IN ($catids_str)".$thumb;
	} else {
		$sql = "status=99 AND catid='$catid'".$thumb;
	}
}

//修改为:

$catid = $data['catid'];
if(isset($data['where'])) {
		$sql = $data['where'];
} else {
		$thumb = intval($data['thumb']) ? " AND thumb != ''" : '';
		if(strpos($catid,',')){
			$catidd =explode(",",$catid);
			if(!$this->set_modelid($catidd[0])) return false;
			$sql = "status=99 AND catid IN ($catid)".$thumb;
		} elseif ($this->category[$catid]['child']){
			if(!$this->set_modelid($catid)) return false;
			$catids_str = $this->category[$catid]['arrchildid'];
			$pos = strpos($catids_str,',')+1;
			$catids_str = substr($catids_str, $pos);
			$sql = "status=99 AND catid IN ($catids_str)".$thumb;
		} else {
			if(!$this->set_modelid($catid)) return false;
			$sql = "status=99 AND catid='$catid'".$thumb;
		}
}

修改后的调用方式:{pc:content action="lists" catid="6,7,8" num="25" order="id DESC"}

有朋自远方来...评论一下呗O(∩_∩)O