phpcms是一套功能很强大,智能,好用的内容管理系统,最近再做phmcms二次开发,学到了不少东西。
现在总结下,与大家分享下。
在调用多个栏目下的文章列表时,可以用get标签.
{pc:get sql="select * from v9_product where catid in($arr)" order="id ASC" thumb="2" num="40" return="info" page="$pages"}
{/pc}
需要注意的是这里的$arr为字符串形式,而不能为数组,如$arr="21,23,32";是可以的,
而$arr = array(21,23,32);则是不行的,会出现错误,导致得不到结果。
如果想随机排序,直接将order="rand()",就可以了。
普通列表或栏目调用自定义字段
在{pc:content action="lists" 后加上副表moreinfo=1 (等于1时显示,0时不显示)
在编辑文章时,如果不想自动添加关键字,可以在
可以通过phpcms/modules/content/fields/title/form.inc.php,去掉其中的onBlur事件,就好了。
<?php
$catid = $_GET['catid'];
?>
来获取相应的栏目id.这在实际操作中很有用。
在phpcms 中调用通过一级栏目调用三级栏目的代码。
{pc:content action="category" catid="$catid" order="listorder ASC" num="40" thumb="2" return="info"}
{loop $info $r}
<?php
$catidt = $r[catid];
?>
<ul>
{pc:content action="lists" catid="$catidt" order="listorder ASC" num="40" thumb="2" return="data"}
{loop $data $v}
<li class="cl">
<a href="">
<a href="{$v['url']}" target="_blank"><img class="imgs_pro" width="179" height="144" src="{$v['thumb']}"/></a>
<h3 class="product-name">
<a href="{$v['url']}" target="_blank">
<span class="orname1">{$v['title']}</span></a>
</h3>
<span class="lingshoujia">全国统一销售价:<b>¥</b>{$v['price']} </span>
<span class="tejia"><i></i>:<b>¥</b>{$v['tgprice']}</span>
</li>
{/loop}
{/pc}
</ul>
{/loop}
{/pc}
在这里,有点郁闷的是,为什么第二个循环中catid不能直接用catid="$r['catid']",而需要先通过$catid=$r[catid]取得。先记下来。
{pc:content action="lists" cache="3600" num="20" page="$page"}{/pc}
变量名 | 默认值 | 说明 |
action | null | 本参数的值表示为操作事件,模型类PC标签必须使用包含本参数,以说明要进行的操作。 |
cache | 0 | 缓存存储时间(单位秒) |
num | 20 | 获取记录的条数,最后会被模板引擎处理成limit传送到处理函数中。 |
page | null | 当前分页。一般填写为$_GET[page] |
urlrule | null | URL规则 |
return | data | 返回数据变量名 |
这里有一必要说一下get标签,可以对数据库进行灵活操作,如:
{pc:get sql="SELECT * FROM phpcms_member" cache="3600" page="$page" dbsource="discuz"return="data"}
<ul>
{loop $data $key $val}
{$val[username]}<br/>
{/loop}
</ul>
{$pages}
{/pc}
GET标签所支持的参数。
参数 | 默认值 | 必须 | 说明 | |
sql | null | 是 | 要执行的SQL语句 | |
cache | 0 | 否 | 缓存时间,单位为秒 | |
page | 0 | 否 | 分页,通过变量把当前的分布传给PC标签进行处理 | |
dbsource | null | 否 | 数据源,当你通过系统后台的数据源模块配置过数据源时,可把数据源名填写到这里,系统会去对应的数据源来读取数据。如果要读取本系统的数据请留空 | |
return | data | 否 | 返回的数据的变量 |
常用的函数:
str_cut(): {str_cut($v['title'],50)}, 标题长度截取。
thumb(): {thumb($v['thumb'],178,131)},生成缩略图。
phpcms 模板if,else解析原理
例:
{pc:content action="lists" catid="12" num="1" order="id DESC" return="info"}
{loop $info $v}
<!--图片-->
<div class="img_top">
{if $v[thumb]==null}
<img src="{thumb($v['thumb'],278,198)}"/>
{else} <img src="{IMG_PATH}lianmengimg/wstupianbg.jpg"/>{/if}
</div>
<!--图片-->
<h3><a href="{$v['url']}" target="_blank">{str_cut($v['title'],55)}</a></h3>
<div class="ws_text">
<p>{$v['description']}</p>
</div>
{/loop}
{/pc}
用php代码来实现,其实是这样的。
<?php if(defined('IN_ADMIN') && !defined('HTML')) {echo "<div class=\"admin_piao\" pc_action=\"content\" data=\"op=content&tag_md5=0fbcb24c67cefe51efba7d05ace80da0&action=lists&catid=12&num=1&order=id+DESC&return=info\"><a href=\"javascript:void(0)\" class=\"admin_piao_edit\">编辑</a>";}$content_tag = pc_base::load_app_class("content_tag", "content");if (method_exists($content_tag, 'lists')) {$info = $content_tag->lists(array('catid'=>'12','order'=>'id DESC','limit'=>'1',));}?>
<?php $n=1;if(is_array($info)) foreach($info AS $v) { ?>
<!--图片-->
<div class="img_top">
<?php if($v[thumb]==null) { ?>
<img src="<?php echo thumb($v['thumb'],278,198);?>"/>
<?php } else { ?> <img src="<?php echo IMG_PATH;?>lianmengimg/wstupianbg.jpg"/> <?php } ?>
</div>
<!--图片-->
<h3><a href="<?php echo $v['url'];?>" target="_blank"><?php echo str_cut($v['title'],55);?></a></h3>
<div class="ws_text">
<p><?php echo $v['description'];?></p>
</div>
<?php $n++;}unset($n); ?>
<?php if(defined('IN_ADMIN') && !defined('HTML')) {echo '</div>';}
?>
还有一个关于if,else的例子:
{pc:content action="lists" catid="42" order="id DESC" num="5" }
{loop $data $n $r}
<li>·<a href="{$r['url']}" title="{$r['title']}"{title_style($r[style])}>{str_cut($r[title],39,'')}</a> {if time()-$r[updatetime]<24*180*60}<img src='/image/new.gif' />{else}<span class="ind_tim2">{date('m-d',$r[inputtime])}</span>{/if}</li>
{/loop}
{/pc}
在列表页如果想实现分布功能需要加上page="$page":
{pc:content action="lists" catid="$catid" order="prorder ASC" thumb="2" num="6" page="$page" return="info"}
<div id="pages" class="text-c">{$pages}</div>
{/pc}
如何在category页调取所有子栏目列表
{pc:content action="category" catid="$catid" num="25" siteid="$siteid" order="listorder ASC"}
<ul>
{loop $data $r}
<li><a href="{$r[url]}">{$r[catname]}</a></li>
{/loop}
</ul>
{/pc}