本文讲一下将织梦dede:channel标签增加一个limit参数的功能。像织梦这样的内容管理系统,其很大的优点就在于其标签的使用上,让开发者能很方便的使用,但是也正是因为是用人家定义的标签,虽然满足的大部分的需求,但是如果有一些特殊需求的时候却老是让自己感觉很痛苦,总有那么一点点小地方把人给难倒。这个时候,我们可以考虑一下修改一下他的标签库文件来满足我们的需求。其实很简单。
不知道大家是否遇到过这样的情况,一般情况下,项目是从策划-设计-制作(切割)-程序来完成的,但由于大家彼此的分工和职能不同,我们不可能完美的考虑到下级的需求,比如我们程序和美工直接,美工在切割的时候,已经经历的考虑到了程序实现,但是毕竟人家并不专业,他们可能更倾向于如何让自己更加的简单,所以有的时候切出来的东西很多程序认为不能嵌套程序,其实不然,我们做程序的,尤其是做过底层开发的,应该知道,其实无论是什么页面,程序都是可以实现的,只有美工可以写出来,程序就能实现,无论这个程序是开源程序还是自己写的程序。要坚信这一点。今天就结合一个小例子,来改一下下这个channel标签,让他具备arclist标签的limit功能。
limit是什么功能,就是源于sql语句中的limit子句,这个子句作用就是控制读取的位置和读取的数量,比如limit 0,2,就是从第一个开始读,读两条记录。我们来看一下这个例子
效果图片
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<div class="c5_lm_l" style="float:right;"> <h3><a href="#" target="_blank">肝病科</a></h3> <p> <a href="#" title="大三阳" target="_blank">大三阳</a> <a href="#" title="预约医生" target="_blank">预约医生</a> <a href="#" title="专家答疑" target="_blank">专家答疑</a> <a href="#" title="专家讲座" target="_blank">专家讲座</a> </p> <p> <a href="#" title="肝囊肿" target="_blank">肝囊肿</a> <a href="#" title="其他肝病" target="_blank">其他肝病</a> <a href="#" title="肝损伤" target="_blank">肝损伤</a> <a href="#" title="肝硬化" target="_blank">肝硬化</a> </p> </div> |
从效果可以看到是用channel标签调用某个栏目的子栏目,但是我们看起html代码,子栏目分两行,而用了两个p标签,如果我们不修改channel标签,是不容易用这个标签实现这个效果的,只能让美工改页面了,但是我们如果可以增加一个limit参数,调用两次这个标签,第一个p里面读取前4条,第二个p里面读取后四条即可。虽然这个功能很简单,但是我们贵在了解其标签的定义,这样我们就知道如何来修改和自己定义标签了。
修改方法如下
找到include/taglib/channel.lib.php文件,找到$attlist = “typeid|0,reid|0,row|100,col|1,type|son,currentstyle|,cacheid|”;大约在文件开始的位置第36行左右,这一句就定义了本标签要从模板中获取的参数,和参数的默认值,比如typeid就是栏目的id,默认情况下为0,既然我们要增加一个参数,就可以在其后台再加一个参数limit|0,即改为
1 |
$attlist = "typeid|0,reid|0,row|100,col|1,type|son,currentstyle|,cacheid|,limit|0"; |
下面有个extract函数,他的作用就是将数组降维,这样我们就可以直接使用$limit了,他的值就是我们在模板中使用时传入的值,下面要改什么就很清楚了,当然就是改调用栏目的sql语句了,找到if($type==’top’),大约是在第78行,这个地方就是标签中type参数的作用了。top是其顶级栏目,son是调用其子栏目,self是调用同级栏目,我们要将其下方的三个sql语句中limit子句中的 0,改为$limit,即可。即改为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
if($type=='top') { $sql = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath From `#@__arctype` WHERE reid=0 And ishidden<>1 order by sortrank asc limit $limit, $line "; } else if($type=='son') { if($typeid==0) return ''; $sql = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath From `#@__arctype` WHERE reid='$typeid' And ishidden<>1 order by sortrank asc limit $limit, $line "; } else if($type=='self') { if($reid==0) return ''; $sql = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM `#@__arctype` WHERE reid='$reid' And ishidden<>1 order by sortrank asc limit $limit, $line "; } |
如何使用,看我们这个例子模板中是如何写的
1 2 3 4 5 6 7 8 9 |
<div class="c5_lm_l" style="float:right;"> <h3><a href="/ganbing/" target="_blank">肝病科</a></h3> <p>{dede:channel type='son' typeid='38' row='4'} <a href="[field:typelink/]" title="[field:typename/]" target="_blank">[field:typename/]</a> {/dede:channel}</p> <p>{dede:channel type='son' typeid='38' row='4' limit='4'} <a href="[field:typelink/]" title="[field:typename/]" target="_blank">[field:typename/]</a> {/dede:channel}</p> </div> |
这样参数limit就是控制调取的开始位置了,limit=’4′就是从第4条开始调取,如果不写默认就是从第一个。不会影响原来标签的使用。
本文链接: http://www.521php.com/archives/1172/
程序本天成,妙手偶得之!我们只是代码的搬运工!
转载请注明:http://www.521php.com/archives/1172/
2013年06月09日 上午 9:34 地狱中仰望天堂 | 引用 | #1
童鞋你客气了,厉害的人多了去了,我根本就不算什么,仅仅是入门了而已,有了点感觉了,做我们这行,必须要深入才行,要向别人学习