织梦几个重要条件判断标签学习

admin2019-11-061468

相信用过织梦的人都知道,dedecms标签的威力,一个小小的标签就能调用出我们相调用的东西来,而不用管php程序是如何运行的,这就为一些完全不懂程序的朋友,提供了方便,这也许就是织梦在所以cms系统里面最有名的重要重要原因之一吧。

如果说织梦里面的带有条件的标签有多少?可以说绝大多数都是带有条件的标签,因为,一般的标签都有属性,这些属性就相当于条件,例如,标签{dede:arclist row=5}{/dede:arclist}这里面的row=5就可以看作织梦标签里的条件,但是本教程讲的条件标签,是与php程序里面的if或与mysql里面的where有直接关系的几个标签,因为,牵涉到相对于织梦其它标签,更接近编程,所以,特别要介绍一下。

我们最熟悉的就是织梦条件标签就是,万能标签

{dede:loop table='dede_archives'if=''}底层模板{/dede:loop},

这个标签里面的if=""就是用来查询表dede_archives的条件,这个非常灵活。这个标签在织梦里面被称为万能循环标签,果然是名富其实,这个可能查询出表中任何数据,甚至包括用户名和密码,这一点有点吓人,连这个也能查出来,有点可怕。

那有人可能就要问,如果这个什么都能调用,那是不是就可以只用这一个织梦标签,就可以解决织梦模板里面所有数据调用?可以这么,它几乎能把所有的数据都能调用出来,当然,可以了,为什么只梦还要做那么多标签?有时候用这个非常灵活,很强悍,但是有像调用作者,来源,这些东西,再用这个调用,感觉有点大才小用,杀鸡焉用牛刀,所以,不同的数据,用不同的标签调用,最好。

这个标签之所以,有这个强悍的功能,是因为,在这个标签对应的标签文件loop.lib.php里面,有这么一句sql代码:SELECT*FROM$tablename$ifcase$sort LIMIT 0,$row,通过这行代码,把你给的数据库表和条件当作条件,来查询数据库,从这里也就可以看出,实际上loop标签,最终是去查询数据库,用的是sql语言,懂sql语言的一看就知道。

既然说到loop标签,关于sql语句,就不得不说第二个我们要介绍的标签

{dede:sql sql=""}底层模板{/dede:sql}

如果loop标签对sql稍作“掩饰”,让我们在标签中看不到sql语句,那么,sql标签,则是让我们站长直接用sql语句来查询数据库,更直接,在后面的sql=''里面直接写sql语句。这样sql可以直接查询数据库表了,对于熟悉sql语句的朋友,这个不错的选择用这个,这个功能与loop功能一样强悍,可以调用出表中的所有数据,可以说如果不考虑效率和成本等因素,使用这个完全可以实现,调用织梦数据。

另外,sql标签有一个其它标签不具有的功能,就是可以夸数据库或服务器里面的里面数据,这一点真是不一般的历害。举个例子,如果你在你服务器安装了二个数据库,一个织梦系统的,一个是论坛系统,那么,你可以织梦系统上面调用,论坛里面的数据,这一点对于同时安装织梦和论坛系统的人来说,非常好,完全可以不用整合,就可以实现夸数据库调用数据。

上面讲的是二个都可以称为万能的织梦标签,这二个标签,可以实现织梦前台模板调用绝大多数功能,所以,当我们在使用一般的标签,调用数据调用不出来的时候,我们就要考虑用这二个万能标签了,虽然,这二个标签都是有要懂点sql语句,但是都比较好理解。

讲这二个标签,目的,实际上是为引出另一个标签{dede:if}{/dede:if}可以这么,如果你不是做织梦二次开发的,很少有人接触到这个条件标签,即使你是做模板的,也很少能接触到这个标签,不是因为这个标签,不重要,是因为,这个一般用在二次开发中,特别是织梦后台开发。

在织梦系统中,这个标签用在了199个文件中,比一般的标签用到的次数都要多,可见这个条件标签在二次开中的重要性了。当然,如果你不是做功能开发的话,完全不可以不管这个标签,因为,这个标签不能用在前台模板中。只能用在后台模板,例如,文件a.php里面引入了模板a.htm,那么,可以在模板a.htm里面应用这个条件标签。

应用举例说明:

{dede:if field.state==0}启用{else}禁用{/dede:if}

这个标签的意思就是,如果state==0的话,就显示“启用”这二个字,否则就显示“禁用”。

{dede:if!preg_match("#defaultpic#",$fields['litpic'])}<img src='{dede:field.litpic/}'/>{/dede:if}

这个标签没有用{else},它直接通过正则表达式判断,即,如果不匹配的话,显示图片<img src='{dede:field.litpic/}'/>。这是第二种条件调用方式。

从上面二个例子就可以看出,这个条件标签跟php里面的if(){}else{}逻辑上一样,只不过在php里面,还可以更深层次的if,例如,if(){}else{if(){}else{}}。

这个标签用在后台模板中,如果我想在前台中也用条件标签,除了上面的loop和sql标签外,织梦还给我们提供了另一个标签,也可以当作条件标签{dede:php}{/dede:php},这个中间就可以简单的写php条件语句。

最后一个问题,为什么dede:if}{/dede:if}不能用在前台模板?而loop等万能标签不能用在后台模板?你可能说,因为一个是前台,一个是后台模板,当然不能用了,这样回答跟没有说一样。之所以,他们不能用在对方模板中,是因为,它们的模板引擎不一样。

在织梦里面,存在二套模板引擎,一套是前台模板用的静态模板引擎,对应的文件是include/dedetag.class.php,而另一套是后台模板用的动态模板引擎,对应的文件是include/dedetemplate.class.php。这才是二者不能混用的根本原因。如果有兴趣的朋友,可以阅读一下这二个模板引擎,当然,前提是有相当的php基础。大家也可以学一下smart那个优秀的模板引擎,再学织梦的特别是自学的朋友,直接看织梦系统的模板引擎,很费力,以前本人学习的时候,也是这个样子,当学习完smart后,再来看织梦模板引擎,就相当比较容易了,因为,原理都是大同小异。


网友评论