关于自定义标签求解,希望官方解惑~

浏览:1488 发布日期:2013/11/15 分类:求助交流 关键字: 自定义标签 autoBuildVar
TP是有自定义标签的功能的,只需继承TagLib类就行了。乍看之下没有问题,看官方写的cx库基本都能看明白,但是有一个最大的问题,是我一直没弄明白的,如果说,要将获取的变量用于查询,基本就无法实现这个功能。

比如:class TagLibMyTag extends TagLib {

    // 标签定义
    protected $tags = array(
        // 标签定义: attr 属性列表 close 是否闭合(0 或者1 默认1) alias 标签别名 level 嵌套层次
        'test' => array('attr' => 'name', 'close' => 1, 'level' => 3),
    );

    public function _test($attr, $content) {
        //获取属性数据
        $tag = $this->parseXmlAttr($attr, 'test');
        $name = $tag['name'];
        //构建变量
        $name = $this->autoBuildVar($name);
        //生成SQL语句
        $sql = M('mytable')->where("name='".$name."'")->select(false);
       //输出SQL语句
        return $abc;
    }
}
上面是我写的标签类,在TPL模版里,这样写:<div>
            <test name="testname">ss</test>
</div>
在控制器里这样写:public function index(){
        $this->assign('testname','哇哈哈');
        $this->display();
    }
最后生成的SQL语句,理论上,应该是:SELECT * FROM `mytable` WHERE ( name='哇哈哈')但是实际上生成的却是:SELECT * FROM `mytable` WHERE ( name='$testname')所以,我感觉TP的autoBuildVar方法并没有将对于的变量获取出来,仅仅只是将变量名的字符形式转换为了变量,其理论上相当于"$$变量名",实际上autoBuildVar并不能得到对应的变量名的值。

不知道这算不算BUG,或者官方就是这样设计的。感觉这个问题不处理好,自定义标签用的人肯定不多。
最佳答案
评论( 相关
后面还有条评论,点击查看>>