本文主要讲一个将织梦arclist标签修改成可以控制是否调用带有标题图片的文章,用过织梦的童鞋们都知道,dede:arclist标签是最常用的了,可以很方便的调用需要的文章,但是他有一个很难受的地方,就是我们如果调取图文并茂的文章,如果没有标题图片,会被一个默认图片所替换,不能直接调用带有图片的或者不带图片的。虽然我们可以通过织梦的dedesql标签或者php标签来做,但是有的时候没那么复制只是希望可以有这样一个功能而已。我其实已经很长时间不用织梦了,我最近一直在用帝国,帝国的标签就有这个功能。但是最近做一个门户,公司非要使用织梦,那我在做的过程中发现这一点很难受,于是就想改一下他的标签函数算了,其实很简单。
我们分析他的表,dede_archives是他的文章表,标题图片的字段为:litpic,他和帝国的字段不同,帝国有个ispic字段,为1就是有图片,织梦的话我们可以通过判断这个litpic是否为空来判断是否有图片,这是sql层,那么下面我就可以来修改他的标签函数库了。找到include/taglib文件夹,织梦的所有标签库都存在这里。找到arclist.lib.php文件,这个就是dede:arclist的标签库文件。我要自己定义一个标签,也是在这里增加即可。那么我要做这样几步。
1、找到return lib_arclistDone,差不多是第129行,在其前面加上一句
1 |
$ispic = $ctag->GetAtt('ispic'); |
这一句就是在arclist获取ispic参数的值。
2、还是找到这个return lib_arclistDone,在其传入参数里面加上这个$ispic,即将
1 2 3 4 5 6 7 8 |
return lib_arclistDone ( $refObj, $ctag, $typeid, $ctag->GetAtt('row'), $ctag->GetAtt('col'), $titlelen, $infolen, $ctag->GetAtt('imgwidth'), $ctag->GetAtt('imgheight'), $listtype, $orderby, $ctag->GetAtt('keyword'), $innertext, $envs['aid'], $ctag->GetAtt('idlist'), $channelid, $ctag->GetAtt('limit'), $flag,$ctag->GetAtt('orderway'), $ctag->GetAtt('subday'), $ctag->GetAtt('noflag'), $tagid,$pagesize,$isweight ); |
变为:
1 2 3 4 5 6 7 8 |
return lib_arclistDone ( $refObj, $ctag, $typeid, $ctag->GetAtt('row'), $ctag->GetAtt('col'), $titlelen, $infolen, $ctag->GetAtt('imgwidth'), $ctag->GetAtt('imgheight'), $listtype, $orderby, $ctag->GetAtt('keyword'), $innertext, $envs['aid'], $ctag->GetAtt('idlist'), $channelid, $ctag->GetAtt('limit'), $flag,$ctag->GetAtt('orderway'), $ctag->GetAtt('subday'), $ctag->GetAtt('noflag'), $tagid,$pagesize,$isweight,$ispic ); |
3、对传入的这个参数组织sql语句,找到if(preg_match(‘#spec#i’, $listtype)),差不多在301行,在其前面加上一句
1 2 3 4 5 |
if('1'==$ispic){ $orwheres[] = " arc.litpic != '' "; }else if('2'==$ispic){ $orwheres[] = " arc.litpic == '' "; } |
$orwheres就是sql语句的所有where子句。
这样这个标签库就修改完了,如何调用呢。
使用:
1 2 3 |
{dede:arclist typeid='622' row='4' titlelen='25' ispic='1'} <li><a href="[field:arcurl/]"><img src="[field:picname/]" width="159" height="108" alt="[field:fulltitle/]"></a><p><a href="[field:arcurl/]" target="_blank" title="[field:fulltitle/]">[field:title/]</a></p></li> {/dede:arclist} |
这个ispic参数,如何是1,就是调用带标题图片的,如果是2,就是调用不带图片的,如果不定义,就随便了!很简单吧!图片的路径可以用[field:picname/]来调用,以前我还不知道呢,所以有时间看一下他的标签库,其实写的很简单!
本文链接:http://www.521php.com/archives/1159/
程序本天成,妙手偶得之!我们只是代码的搬运工!
转载请注明:http://www.521php.com/archives/1159/