搜索
系统检测到您的用户名不符合规范:

在模板中使用标签查询数据

浏览:1962 发布日期:2015年01月23日 分类:功能实现 关键字: 模板 标签
新手练手,欢迎吐槽
<?php

/**
* 通用自定义定义标签
* 用法:
* 1:载入
* <taglib name="lx" />
* 2:调用
* <lx:list table="member" field="name" page="$page,$rows" >
* {$v.id} -- {$v.name}<br />
* </lx:list>
* 说明:
* 1.可以直接在标签上面写sql属性
* 2.限制查询条数请用 limit属性
* 3.要数据分页请用page属性,可传2个参数,用逗号分隔,前一个参数当前页码,后一个参数每页查询几条
* 4.显示分页请在视图页面输出 {$pageStr}
* 5.调用模型的方法 用 method="getOne(1,2,3)" 【引号里面直接调用方法】
*/

namespace Think\Template\TagLib;

use Think\Template\TagLib;

class Lx extends TagLib
{

protected $tags = array(
'list' => array('attr' => 'table,order,limit,where,join,field,page,relation,method,cache,dump,sql', 'close' => 1),
);

public function _list($attr, $content)
{
$defaultAttr = explode(',', $this->tags['list']['attr']);
$vars = array();
foreach ($defaultAttr as $v) {
if ($attr[$v]) {
$vars[$v] = $attr[$v];
}
}
if (!isset($vars['table']) || empty($vars['table'])) {
return false;
}
//是用模型中的特定方法还是select
if (isset($vars['method'])) {
$select = '->' . $vars['method'];
} else {
$select = "->select()";
}
//limit and page
$limit = '';

if (!isset($vars['page'])) {
if (isset($vars['limit'])) {
$limit = '->limit("' . $vars['limit'] . '")';
}
} else {
$limit = '->page("$page,$rows")';
}
//dump 调试
$dump = '';
if (isset($vars['dump']) && $vars['dump'] == "true") {
$dump = '<?php dump($data) ?>';
}
//getLastSql 调试
$lastSql = '';
if (isset($vars['sql']) && $vars['sql'] == "true") {
$lastSql = ' echo "<br/>" . M()->getLastSql(); ';
}
unset($vars['page'], $vars['limit'], $vars['method'], $vars['dump'], $vars['sql']);
$tmpStr = '';
$where = '';
$join = '';
foreach ($vars as $k => $v) {
if ($k == 'table') {
continue;
}
if ($k == 'where') {
$where = $v;
}
if ($k == 'join') {
$join = $v;
}
$tmpStr .= '->' . $k . '("' . $v . '")';
}
$str = '<?php
$page = I("p", false) ? I("p") : I("page");
$page = empty($page) ? 1 : $page;
$rows = I("rows", 15);
$table = ' . ucfirst($vars['table']) . ';
$data = D("$table")' . $tmpStr . $limit . $select . ';
foreach($data as $k=>$v): ?>';
$str .= $content;
$str .= '<?php
if(!is_array($v)){
break ;
}
endforeach;
'.$lastSql.'
$total = M("$table")->where("' . $where . '")->join("' . $join . '")->count();
$Page = new \Think\Page($total,$rows);
$pageStr = $Page->show();
?>';
$str .= $dump;
return $str;
}


}
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
wanshihong
积分:1417 等级:LV3
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /