织梦标记属性处理函数FillAtts(),FillFields()和extract()

admin2023-01-181140

  因为这二个函数比较简单,而且,又是在动态模板引擎里面处理标记属性的二个函数,而且,在块函数里面这二个函数一起使用,成双成对的出现,所以,这里就把这二个函数放在一起来分析一下。

  函数所在的文件:include/dedetemplate.class.php

  函数FillAtts(&$atts,$attlist)作用:设定属性的默认值

  这个函数就比较简单,因为,一般的块标记都有多个属性,例如:$attlist="titlelen=30,site='www.dedebase.com',addon=,row=8,ids=,orderby=id,subday=0",等这些值不一定是标签里面需要的,但是,设置一下默认值是必要的,所以,既然设置了这些属性就要处理这些属性,这个函数的处理以后的结果是把上面的属性当作键,把默认的属性值当作数组里面对应的值,即atts('titlelen'=>30,'site'=>'www.dedebae.com','addon'=>'','ids'=>'','orderby'=>'id','subday'=>0)这样一个数组。

  函数FillFields(&$atts,&$refObj,&$fields)作用:把上级的fields传递给atts

  这个函数则是在上面那个函数基础上处理属性中使用的系统变量var、global、field类型(不支持多维数组),这个函数看上去比上面的数组有点复杂,但是,细细读一下代码发现其实,这个也比较简单。

  把数组$atts里面的属性遍历出来,然后,判断一下遍历出来的值是不是有field.var.和global.若属性值里面有这个,就把这三个系统变量替换为空,若这个值已经设置了,那么,再把这个值覆盖掉原来的对应的值,放回到数组$atts里面。

  从上面分析可以看现函数FillFields(&$atts,&$refObj,&$fields)的作用就是替换系统变量field、var和global的,就这么简单,在块函数里面这二个函数是必须用到的。

  还有一个函数extract($atts,EXTR_OVERWRITE)与上面这二个函数一起使用,在动态模板标签里面这三个一起使用,这个函数的作用,是经过上面二个函数的处理后,把数组$atts里面的键当作变量,把数组$atts里面值当作变量的值,放到当前符号表中,以供下面使用。

  这个我们可以看一下plus_ask.php动态模板ask标签,只有通过extract($atts,EXTR_OVERWRITE)这个函数处理后,才能在sql语句:$query="SELECT id,tid,tidname,tid2,tid2name,title FROM`# __ask`WHERE$wheresql$orderby LIMIT$row"里面使用$row,要不这个$row变量在这里无法识别,所以,这个函数作用非常重要,它能把一个数组的键变成变量。

网友评论