本文讲的主要是将dede:channelartlist标签增加一个limit参数,让其可以控制读取的开始位置。其修改类似于织梦内置标签优化之二-dede:channel标签优化的修改。做过稍微复制一点的网站的都知道,网站除了有首页,列表页,内容页之外,还有一个封面页(频道页)。比如一个栏目有子栏目,那么这个栏目本身所对应的页面应该是封面页面,当然做成列表页也是可以的。这个dede:channelartlist标签就是一般在封面页(频道页)用到的,当然这个标签是可以在全局使用的,这里是举一个例子。
我给其增加limit参数的原因是我们经常会遇到这样的情况。如图:
很明显,我们看到这个封面页面其所有的子栏目,被一个广告位所分割成两部分,如果不修改这个标签的功能,我们很难达到这样的效果。而如果我们增加一个limit这样的参数,就可以控制读取开始位置,分两次读取或多次读取来达到这样的目的,这样,即使他被分成几部分,都不会受影响了。先来看一下我的代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<div class="box3"> {dede:channelartlist row='3' limit='0'} <div class="box3_info"> <div class="box3_title"><h3>{dede:field name='typename'/}</h3><a href="{dede:field name='typeurl'/}" title="更多>>">更多>></a></div> <div class="box3_info_top"> {dede:arclist titlelen='30' infolen='40' row='1' ispic='1'} <div class="box3_info_topl"><a href="[field:arcurl/]" title=""><img src="[field:picname/]" width="120" height="80" alt="[field:fulltitle/]" /></a></div> <div class="box3_info_topr"> <h3><a href="[field:arcurl/]" title="[field:fulltitle/]">[field:title/]</a></h3> <p>[field:infos/]...<a href="[field:arcurl/]" title="详细">[详细]</a></p> </div> {/dede:arclist} </div> <ul> {dede:arclist titlelen='50' row='2' limit='1,2'} <li><a href="[field:arcurl/]" title="[field:fulltitle/]">[field:title/]</a></li> {/dede:arclist} </ul> </div> {/dede:channelartlist} </div> <!-- /糖尿病类型 --> <!-- 广告2 --> <div class="ad1"><a><img src="{dede:global.cfg_templets_skin/}/tnb/images/ad2.jpg" width="960" height="90" alt=""></a></div> <!-- /广告2 --> <!-- 糖尿病并发症 --> <div class="box4"> <div class="box4_title"><h3>糖尿病并发症</h3></div> <div class="box4_info"> {dede:channelartlist row='6' limit='3'} <div class="box3_info box4_info2"> <div class="box3_title"><h3>{dede:field name='typename'/}</h3><a href="{dede:field name='typeurl'/}" title="更多>>">更多>></a></div> <div class="box3_info_top"> {dede:arclist titlelen='30' infolen='40' row='1' ispic='1'} <div class="box3_info_topl"><a href="[field:arcurl/]" title=""><img src="[field:picname/]" width="120" height="80" alt="[field:fulltitle/]" /></a></div> <div class="box3_info_topr"> <h3><a href="[field:arcurl/]" title="[field:fulltitle/]">[field:title/]</a></h3> <p>[field:infos/]...<a href="[field:arcurl/]" title="详细">[详细]</a></p> </div> {/dede:arclist} </div> <ul> {dede:arclist titlelen='50' row='2' limit='1,2'} <li><a href="[field:arcurl/]" title="[field:fulltitle/]">[field:title/]</a></li> {/dede:arclist} </ul> </div> {/dede:channelartlist} </div> </div> |
我们可以看到,我用了两次这个标签,第一次,指定limit开始位置为0,当然这里也可以不指定,默认就是从第一个,读取了三条,第二个,我指定开始位置为3,这样就从第4个开始读取,这里应该理解,因为这里是sql语句的定义,0是第一个,1是第2个。这样就达到了我们的目的,还可以看到,内部的arclist标签也是用到了我们织梦内置标签小优化之一——arclist标签优化的内容,结合limit和ispic,实现了没有默认图片的图文并茂功能。修改过程如下:
1、找到include/taglib/channelartlist.lib.php文件,这个就是这个标签的类库文件。找到$attlist = ‘typeid|0,row|20,cacheid|’;大约在第43行左右,这里就是定义获取的标签参数的,比如他会获取typeid参数,如果获取不到,默认就是0,所以,我们增加一个limit参数,让其默认值为0,即改为
1 |
$attlist = 'typeid|0,row|20,cacheid|,limit|0'; |
2、修改读取的sql语句:找到下方的$dsql->SetQuery(“SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,大约在第78行左右,我们将其limit子句,加上我新增的limit参数。即改为
1 2 |
$dsql->SetQuery("SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM `#@__arctype` WHERE $tpsql ORDER BY sortrank ASC LIMIT $limit,$totalnum"); |
这里为什么可以直接使用$limit,就是和第二讲中的一样,他在上面有个extract函数,将我们之前定义好的获取参数进行了降维,这个函数大家可以查一下用法。这样就可以将数组的key变为变量直接使用了。这样整个修改就完成了,很简单吧,这样的修改同样不会影响以前的本标签的使用。
程序本天成,妙手偶得之!我们只是代码的搬运工!
转载请注明:http://www.521php.com/archives/1187/
2013年04月10日 下午 3:41 周洪伟 | 引用 | #1
来过