chaihongjun.me

dedecms在arclist和list标签下调用redirecturl字段

  字段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}






知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。作者:柴宏俊»