织梦DedeCMS字段为空判断与iif标签高级用法教程

在织梦DedeCMS模板开发中,经常需要对字段值进行判断,例如当某个字段为空时显示默认内容,或者根据条件动态输出不同结果。本文将详细介绍两种实现方法,并讲解如何通过修改核心文件增加iif和elserun标签功能。

字段为空判断的基础用法

在内容页模板中,可以使用runphp=’yes’属性对字段进行PHP判断。以下代码演示了如何判断zufang_tel字段是否为空:

{dede:field.zufang_tel php=yes}
if(@me==""||empty(@me))
@me="<p>无</p>";
{/dede:field.zufang_tel}

注释:@me代表当前字段的值,可以在if语句中对其重新赋值,判断结束后@me的值即为最终输出的内容。

方法一:使用runphp进行字段判断

在内容页模板中,通过if判断语句检测字段是否有值,有则输出内容1,无则输出内容2。以下示例以自定义字段audio为例:

{dede:field.audio runphp='yes'}
if(@me<>'')@me="如果audio字段里有东西就输出这个,支持html代码,并且可以在代码中使用@me来调用audio字段值,但是不要有双引号。";
else
@me="如果audio字段里没有东西就输出这个,也是支持html代码,并且也是可以在代码中使用@me来调用audio字段值,也是不要有双引号。";
{/dede:field.audio}

注意:audio是用户自行添加的字段,使用时请替换为实际字段名称。

方法二:使用iif和elserun标签进行条件判断

通过修改核心文件,可以为DedeCMS模板增加iif和elserun标签功能,实现更灵活的条件输出。新增变量$str(最终显示内容)和$str_count(循环显示内容条数)。iif标签用于判断条件是否成立,如果成立则正常输出,如果不成立则执行elserun中的内容,若未指定elserun则返回空白。

以下示例演示在arclist标签中使用iif和elserun:

{dede:arclist orderby='click' titlelen='30' row='10' iif="$str_count>1" elserun="$str=暂时没有内容"}
<li><span class="gptlink">[field:textlink/]</span></li>
{/dede:arclist}

运行结果:如果arclist没有返回结果,则显示“暂时没有内容”。

另一个示例:在标题标签中使用iif判断:

<title>{dede:global name='cfg_webname' iif="strlen($str)>10" elserun="$str.='我的网站'"/} </title>

运行结果:如果cfg_webname长度大于10则正常显示,否则在标题后面追加“我的网站”。

核心文件修改步骤

要实现iif和elserun标签功能,需要修改/dede/include/pub_dedetag.php文件。请按照以下步骤操作:

第一步:搜索以下代码:

foreach($GLOBALS[$arr] as $k=>$v){

将其更改为:

$GLOBALS['autoindex']=0;
foreach($GLOBALS[$arr] as $k=>$v){
$GLOBALS['autoindex']++;

第二步:搜索以下代码:

$this->CTags[$i]->TagValue = $DedeMeValue;
}

在}后面添加以下代码:

$str = $this->CTags[$i]->TagValue;
$str_count = $GLOBALS['autoindex'];
if( $this->CTags[$i]->GetAtt("iif")!="" ){
if(! eval("return {$this->CTags[$i]->GetAtt('iif')} ;" )){
if($this->CTags[$i]->GetAtt("elserun")) {
$this->CTags[$i]->TagValue=eval("return {$this->CTags[$i]->GetAtt('elserun')} ;" );
}else{
$this->CTags[$i]->TagValue='';
}
}
}

完成以上修改后,即可在模板中正常使用iif和elserun标签进行条件判断输出。

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