发一个thinkphp3.0版的数据库标签实例

thinkphp是国内非常好的开源开发框架,所以在这里我发一个他的数据库调用标签的实例。希望能帮到各位.


<?php


// +-----------------------------------------------------------
// | ThinkPHP
// +------------------------------------------------------------
// | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
// +------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +------------------------------------------------------------
// $Id: TagLibArticle.class.php 2601 2012-01-15 04:59:14Z liu21st $
//修改 jroam 2012-4-28



class TagLibArticle extends TagLib {


    // 标签定义
    protected $tags = array(
        // 标签定义:
        //attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次
        /**
         * name 表示表的名称,不加前缀
         * field 查询的字段名
         * limit 查询的限制条件,
         * where 查询的条件,用于模型的where部份
         * sql 原生态语句查询 当name值为空时生效.
         * key表示模板循环的变量,默认就能量名为i
         * mod表示取模时的变量,通常在并列列时用来计算,默认它的值为2  <eq name="mod" value="1"><tr></eq> 
         */
        'article' => array('attr' => 'name,field,limit,order,where,sql,key,mod', 'level' => 3),
    );


    //定义查询数据库标签
    public function _article($attr, $content) {
        $tag = $this->parseXmlAttr($attr, 'article');
        $result = !empty($tag['result']) ? $tag['result'] : 'article'; //定义数据查询的结果存放变量
        $key = !empty($tag['key']) ? $tag['key'] : 'i';
        $mod = isset($tag['mod']) ? $tag['mod'] : '2';
        if ($tag['name']) {   //根据用户输入的值拼接查询条件
            $sql = "M('{$tag['name']}')->";
            $sql .= ($tag['field']) ? "field({$tag['field']})->" : '';
            $sql .= ($tag['order']) ? "order(\"{$tag['order']}\")->" : '';
            $sql .= ($tag['where']) ? "where(\"{$tag['where']}\")->" : '';
            $sql .= "select()";
        } else {
            if (!$tag['sql'])
                return ''; //排除没有指定model名称,也没有指定sql语句的情况
            $sql .= "M()->query(\"{$tag['sql']}\")";
        }
        
        //下面拼接输出语句
        $parsestr = '<?php $_result=' . $sql . '; if ($_result): $' . $key . '=0;';
        $parsestr .= 'foreach($_result as $key=>$' . $result . '):';
        $parsestr .= '++$' . $key . ';$mod = ($' . $key . ' % ' . $mod . ' );?>';
        $parsestr .= $content; //解析在article标签中的内容
        $parsestr .= '<?php endforeach; endif;?>';
        return $parsestr;
        //return $sql;
    }


}


?>


运用说明:


这个文件取名为:TagLibArticle.class.php  ,要放在:lib/TagLib下.


 


调用方法:


1先导入标签
2书写标签主体,如下: 
<Article:article name="orderform">
 <div><{article.orderform1}></div>
 </Article:article>


其中的name值是表名
field表示要选择的字段名,limit表示要限制显示的条数,order排序,where查询条件,
sql原生态查询语句,在name值为空时生效,
key循换的变量名,默认为i,mod循环时的取模值,默认为2