织梦获取当前页的数据列表函数GetArcList()

admin2020-01-021169

函数名:GetArcList($atts,$refObj='',$fields=array())

作用:获取当前页数据列表

所在文件:include/datalistcp.class.php

参数:$atts数组,$fields数组,$refobj对象,注意这三个参数都没有用到

这个函数的作用是通过业务逻辑php程序文件设定的sql语句,然后,通过这个函数把这个sql查询出来,然后,返回到调用处。这里面的三个参数,其实,都没有用到,既然,没有用到为什么我们设置sql后,还能查询这个sql语句?

其实,是这样的,当我们调用这个函数,首先得实例化这个分页类,实例化后,这个通过设定sql语句,就可以把我们在业务逻辑层设置的sql语句,保存到$this->sourceSql变量里面了。而GetArcList()函数又是这个分页类的一个方法,当然,这个方法可以调用这个类的属性了,所以,虽然,参数没有用,但是,其实,一样可以调用我们设置好的sql语句。

这是类中常用的一种方法,类都有这个功能,如果你经常做织梦二次开发,你会发现,很多的织梦函数,并没有参数,但是,他一样可以调用我们在调用这个类的文件里设置的sql或其它语句。只要把类实例化后,就可以实现,当然,要实现这个功能,必须设置类的属性,而不是具体的函数/方法的属性。

代码分析:

其实,这个函数非常简单,就是用Execute()函数,把sql语句查询出来,然后,通过while循环,把查询出来的结果通过GetArray()函数,把一条一条的记录保存到$rsArray里面,并且返回这个数组到调用处。

因为这个函数是标签{dede:datalist}调用的,我们再把这个标签编译后的php代码拿出来分析一下:

360截图1624122372113102.jpg

从上面的代码我们得知$blockValue是一个数组,也就是函数GetArray()返回的查询结果数组。

非常重要的一点:在foreach($blockValue as$key=>$fields)里面的$fields,这里必须是$fields,若换成其它的变量将调用不出任何内容。请问为什么?如果你不看下面的教程,就能想出来说明你对织梦模板引擎已经掌握了,如果想不出来,也没有关系,说明还需要努力。

请看一下foreach里面的代码:

<?php echo $fields['id']; ?>
<?php echo GetDateMk($fields['senddate']); ?>
<?php echo GetTypename($fields['typeid']); ?>

发现了没有?是不是都是把$fields数组里面的值调用出来。

再问,请问这个$fields和foreach里面的$fields是同一个吗?可以说是同一个也可以说不是,为什么这样回答,因为,foreach遍历时,这里面的键和值都是同一个,但是,&lt;?php echo$fields['id'];?&gt;里面$fields并不是来自forach,而是,标签{dede:field.id/}编译后php代码。这一点必须理解,当然,我们一般不会去自己开发模板引擎,除非你自己去写个像织梦这样的系统,但是,虽然,我们一般不写但是,我们一定要弄明白他们之间的逻辑关系。

这样可以为以我们自己开发自己的标签作知识储备。

光这样分析还是不够的,我要证明一下,我上面分析的没有问题,只需要去分析一下模板引擎即可。

打开模板引擎文件找到field标记如下所示:

360截图1624122372113102.jpg

原来标签{dede:field.id/}对应的php代码&lt;?php echo$fields['id'];?&gt;就是通过这个处理后得到的。

再找到datalist标记代码如下所示:

150739lbqmygz8z0vszqbq.png.

现在我把$fields改成$field,看看是不是还能调用出内容来,如果正常调用的话,说明我们分析的就是错的,如果调用不出内容的话,说明我们分析的就是对的。

登录后台“核心”——&gt;“我发布的文档”,显示的内容如下:

360截图17780529107128134.jpg

完全显示不出内容来了,这就说明我们分析的完全正确。

这个小小技巧是通过foreach遍历时的值也就是$fields,跟field标记编译后的php代码的相同,相同后程序是不管你的foreach里面的$fields和大括号里面的$fields是不是来源相同,只要一样就可以调用foreach把数组单元存放到$fields里面的内容。


网友评论