A-A+
Phpcms随机文章的调用
在PHPCMS中是不支持随机调取文章列表的,也就是没有这个参数,但我们可以绕过PHPCMS的正常标签,我们知道,在PHPCMS中调用文章列表排序使用的是 order 语句,比如 order="ID" 就是以ID来排序,哪我们就可以把这个语句改掉,改成 order="rand()" ,rand() 在PHP中就是随机抽取的意思,这样就可以实现 PHPCMS 随机调取文章列表了。调用的代码如下:
{pc:content action="lists" catid="$catid" num="8" order="rand()" retur n="info"} <ul class="list lh24 f13"> {loop $info $v} <li><a href="{$v["url"]}" target="_blank" title="{$v["title"]}"{titl e_style($v[style])}>{$v["title"]}</a></li> {/loop} </ul> {/pc}
上面的方法是最简单的,也是夏日博客建议使用的,如果想要调取栏目的随机内容的话,添加一个 catid 分类的ID即可。还有一种方法就是对应的PHPCMS二次开发,自己添加一个自义定的随机函数,打开phpcms/libs/functions/extention.func.php文件,将下面的代码添加到里面即可,extention.func.php 是PHPCMS中的扩展库,大多自定义的函数都要放到这个文件里,我们要添加的函数如下:
/** * 随机读取文章列表 * * @param $modelid 模型ID 必须 * @param $catid 栏目ID 可选,为0或未指定调去全模型的数据 * @param $siteid 站点ID 可选,默认为1 * @param $thumb 是否必须有缩微图 可选,默认为0 * @param $num 调用文章数量 可选,默认为10 * @return array 返回随机文章列表数组 */ function suiji($modelid, $catid, $siteid = 1, $thumb = 0, $num = 10) {if(!$modelid = intval($modelid))return false; $sitid = intval($sit eid) ? intval($siteid) : 1; $catid = intval($catid); $num = intval($num); $thumb = intval($thumb) ? " AND thumb != """ : ""; $CATEGORYS = getcache("category_content_".$siteid,"commons"); if($CATEGORYS[$catid]["child"]){ $catids_str = $CATEGORYS[$catid]["arrchildid"]; $pos = strpos($catids_str,",")+1; $catids_str = substr($catids_str, $pos); $sql = " AND catid IN ($catids_str)".$thumb; } elseif($catid) { $sql = " AND catid="$catid"".$thumb; } else { $sql = $thumb; } $c_db = pc_base::load_model("content_model"); $c_db->set_model($modelid); $id = ""; for($i=1;$i<=$num;$i++) { $not = $id ? " AND id NOT IN ($id) " : ""; $rs = $c_db->query("SELECT * FROM $c_db->table_name AS t1 JOIN (SELE CT ROUND(RAND()*(SELECT MAX(id) FROM $c_db->table_name WHERE statu s = 99 $sql)) AS id2) AS t2 WHERE t1.id>=t2.id2 and t1.status = 99 $sq l $not ORDER BY t1.id ASC LIMIT 1"); while($r = mysql_fetch_array($rs,MYSQL_ASSOC)){ $return[]=$r; $id = $id ? $id.",".$r["id"] : $r["id"]; } } return $return; }
随机函数使用的方法如下:
<div class="box"> <h5 class="title-2">随机文章</h5> <ul class="content"> {php $data = suiji(1,0,1,0,15)} {loop $data $r} <li> · <a href="{$r[url]}" target="_blank" title="{$r[title]}">{s tr_cut($r[title], 51, "")}</a></li> {/loop} </ul> </div>
第二种相对来说比较难一些,需要有一定的PHP知识来进行二次的开发,而且在调用的时候还需要使得{php}的标签,所以这里用来学习一下吧。
还有一种就是使用 GET 标签直接运行 SQL 语句了,代码如下:
{pc:get sql="SELECT * FROM v9_news a,v9_news_data b WHERE a.id=b.id O RDER BY rand() limit 5--" cache="3600" page="$page" return="data"} <ul> {loop $data $key $val} <li><a href="{$val[url]}" target=_blank>{$val[title]}</a></li> {/loop} </ul> {/pc}
这种方法看起来更清晰一些,在 SQL 中可以使用任何的排序方式和 where 条件语句,不仅可以随机调取数据,使用 get 语句可以组合成各种排序或者是文件的调取方法。跟全站最新文章的调用基本相同,不同点是排序方式改成了 order by rand() 限制了只显示五条记录,另外,这里的 page="$page" 是不能省略的,否则随机文章则会失败。
貌似没文章?