字段redirecturl使用场景:网站有一专题栏目,绝大专题都是由设计前端单独切图制作完成,属于纯手工制作非页面模板生成,因此只能在调用的时候使用跳转调用。
前端优化考虑:该专题栏目的页面几乎绝大部分都是跳转地址,不利于页面优化,因此需要直接在页面写出专题的真实静态URL。redirecturl保存的就是专题的真实静态URL,因此只要调用出redirecturl即可。
1.如果不是列表栏目页面:
让arclist标签支持跳转字段redirecturl:
redirecturl是存放在附加表中,和自定义的字段一样,需要使用只需要指定channelid:
{dede:arclist typeid='1’ row=’1’ addfields=’redirecturl’ channelid=’1’ orderby=’pubdate’} <a href="[field:redirecturl/]" target="_blank">[field:title/]</a> {/dede:arclist}
2.如果是列表栏目页:
让list标签支持跳转字段redirecturl:
list不支持像自定义字段那样调用redirecturl,需要修改文件include/arc.listview.class.php
//如果不用默认的sortrank或id排序,使用联合查询(数据量大时非常缓慢) if(preg_match(’/hot|click|lastpost/’, $orderby)) { $query = "SELECT arc.*,tp.typedir,tp.typename,tp.isdefault,tp.defaultname, tp.namerule,tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath $addField FROM `chj_archives` arc LEFT JOIN `chj_arctype` tp ON arc.typeid=tp.id $addJoin WHERE {$this->addSql} $ordersql LIMIT $limitstart,$row"; }
在这段代码前面增加:
$addField .= ’,’.$addtable.’.redirecturl’;
然后调用的时候将字段加上:
{dede:list row=’1’ addfields=’redirecturl’ orderby=’pubdate’} <a href="[field:redirecturl/]" target="_blank">[field:title/]</a> {/dede:list}
需求更深一层,当前专题栏目有些是单独制作的专题,有些是模板生成的,如果全部使用redirecturl必然有些URL是无法输出的。所以需要判断,当redirecturl为空的时候还是默认输出文档URL arcurl:
1.非列表页 {dede:arclist typeid=’1’ row=’1’ flag=’j’ addfields=’redirecturl’ channelid=’1’ orderby=’pubdate’} <a href="[field:array runphp=’yes’] if(@me[’redirecturl’]==’’) @me=@me[’arcurl’]; else @me=@me[’redirecturl’];[/field:array]" target="_blank"> [field:title/]</a> {/dede:arclist} 2.列表页 {dede:list row=’1’ addfields=’redirecturl’ orderby=’pubdate’} <a href="[field:array runphp=’yes’] if(@me[’redirecturl’]==’’) @me=@me[’arcurl’]; else @me=@me[’redirecturl’];[/field:array]" target="_blank"> [field:title/]</a> {/dede:list}