我刚学smarty 请问下 smarty中 如何扩展函数像网上cms类标签
比如{dede:arclist row='5'}[field.字段名]{/dede:arclist}扩展成这样的
我用smarty的register_block注册块 实现了
{arclist typeid="119" row="5" titlelen="30" reg="title:url"}
<dd><a href="[url]">[title]</a></dd>
{/arclist}
这种样式 但是里面的[title],[url]我都是在函数中以此替换的 感觉这种方法很死
用{section}循环的话需要单独写sql语句 要是能代个参数比如指定栏目id进行循环就好了 在线等....
比如{dede:arclist row='5'}[field.字段名]{/dede:arclist}扩展成这样的
我用smarty的register_block注册块 实现了
{arclist typeid="119" row="5" titlelen="30" reg="title:url"}
<dd><a href="[url]">[title]</a></dd>
{/arclist}
这种样式 但是里面的[title],[url]我都是在函数中以此替换的 感觉这种方法很死
用{section}循环的话需要单独写sql语句 要是能代个参数比如指定栏目id进行循环就好了 在线等....
代个参数比如指定栏目id进行循环又是指什么?
假设我有个首页 需要调用很多栏目的文章 怎么调用 不可能每个调用部分都写条sql语句吧 意思是能够想网上cms标签一样 可以指定栏目id号 就可以循环了 循环中间只需要填写要循环的字段名即可
2.写自定义的这个函数{arclist typeid="119" row="5" titlelen="30" reg="title:url"}
<dd> <a href="[url]">[title] </a> </dd>
{/arclist}
里面的参数不太明清楚.因为你的函数没有写出来.所以没法帮你分析解决呀.
是php文件
..
$smarty->register_block('arclist','smarty_block_arclist',false); //注册smarty_block_arclist块
..然后smarty_block_arclist块代码是
//文章调用函数
/**
* 参数取值范围:
* @param row 返回文章条数
* @param typeid 指定栏目id
* @param titlelen 文章标题长度以中文UTF-8截取 详见函数cn_substr_utf8($str, $length, $start=0)
* @param orderby 文档排序方式 取值为:click(点击),pubdate(发布时间),id(文档id) //代扩充
* @param keyword 获取指定关键字的文章
* @param aid 指定文档id
* @param limit 起始ID,记录数 当指定了row此参数无效
* @param orderway 升序和降序排列文章 取值为:desc 或 asc
* @param reg 需要替换的变量 需要和数据库字段一一对应
* */
function smarty_function_arclist($param, $content)
{
global $pdo,$smarty;
$row = $param['row'];
$typeid = $param['typeid'];
$titlelen = $param['titlelen'];
$orderby = $param['orderby'];
$keyword = $param['keyword'];
$aid = $param['aid'];
$limit = $param['limit'];
$orderway = $param['orderway'];
$reg = $param['reg'];
$th = $param['th'];
$th = explode(':',$th);
if (empty($titlelen)) //文章初始化长度
{
$titlelen = 20;
}
if (empty($orderby))
{
$orderby = "order by a.id";
}
if (empty($orderway)) //升序或降序初始化 默认为空
{
$orderway = "";
}
$regArray = explode(':',$reg); //用:做分割需要替换的变量 需要和数据库字段一一对应
$regRow = Count($regArray); //统计需要替换字段数目
if (!isset($row)) //首先区别是row 还是limit
{
$body = $pdo->getRow("select uid from admin_category where category_id = $typeid"); //等到栏目模型ID
$result = $pdo->getAll("select a.*,b.* from web_content1 as a left join web_contentindex as b on a.id=b.id where b.mid=1 and b.cid>0 $orderby $orderway limit $row");
$resultRow = Count($result);//统计数量
for ($i=0;$i<$resultRow;$i++)
{
$url[].='<dd>'.'<a href="'.$result[$i][url].'">'.$result[$i][title].'</dd>';
}
echo 'a';
/* for ($i=0;$i<$regRow;$i++) //循环需要替换的字段
{
$Rarray[].='['.$regArray[$i].']'; //需替换字段
if ($resultRow>1) //数组
{
for ($j=0;$j<$resultRow;$j++)
{
$Parray[].=$result[$j][$regArray[$i]];
}
}
else //单条
{
}
}
$str.=str_ireplace($Rarray,$Parray,$content);*/
}
else
{
echo 'b';
}
}还没有写完这个函数 我的意思就是加入是新闻首页模版需要调用很多部分的栏目文章 有什么办法通过模版把栏目id传进去 自定义查询这个栏目文章 现在用块是可以实现但是很死 要把需替换字段传进去 因为循环里面还包括 <dd></dd> 和><li></li>这种div标签 能否想网上cms系统一样 只需要把循环的字段放到循环即可
比如织梦的{dede:arclist row=5 typeid='1'}[field.title/]{/dede:arclist}这种样式?标签