织梦DedeCMS教程:channelartlist嵌套sql调用更多文章变量

在织梦DedeCMS中,使用dede:channelartlist标签嵌套dede:sql标签时,默认只能在sql语句里使用channelartlist提供的栏目变量,例如~id~、~typeid~、~typename~。如果希望引用当前文章的更多变量,比如~title~、~writer~、~shorttitle~等,这些变量默认不会被解析。下面介绍如何实现这一功能。

修改channelartlist标签库文件

首先,打开织梦CMS的标签库文件,路径为:/include/taglib/channelartlist.lib.php。在该文件中找到以下代码行:

$pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]);

在这行代码的下方,添加你需要引用的文章变量。例如,如果你需要使用~title~变量,则添加如下代码:

$pv->Fields['title'] = $refObj->Fields['title'];

按照同样的方式,可以添加其他变量,如~writer~、~shorttitle~等。

在模板中调用嵌套标签

完成上述修改后,就可以在模板中编写如下嵌套代码,实现channelartlist与sql的联合调用:

{dede:channelartlist typeid ='2,3,4,5'}
<div class="item" style="margin-top: 20px;">
<div class="item-t">
<div class="itc"> {dede:field name='typename'/} </div>
</div>
<div class="height10"></div>
{dede:sql sql="SELECT arc.*,addf.* FROM dede_archives arc LEFT JOIN dede_addonarticle addf ON arc.id=addf.aid WHERE arc.typeid=~id~ AND arc.writer=~title~ ORDER BY arc.id ASC LIMIT 0,30}
<div class="ilist">
<div class="il"> 
<a href="[field:id runphp=yes]$result=GetOneArchive(@me);@me=$result['arcurl'];[/field:id]" target="_blank">[field:title/]</a>
</div>
<div class="ir"> [field:pubdate function='strftime("%Y-%m-%d",@me)'/] </div>
</div> 
{/dede:sql}
</div>
{/dede:channelartlist}

通过以上修改,即可在dede:channelartlist嵌套dede:sql时,自由使用当前文章的更多变量,实现更灵活的数据调用。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。