在Dedecms CMS V5.3中,提供了一个名为“loop”的万能循环标签。然而,这个标签只能循环出指定表中的字段,而像“[field:arcurl/]”这样的链接标签却无法被解析出来。遗憾的是,在Dedecms官方论坛上并未找到相关的解决方案,因此我们需要手动编写代码来解决这个问题。 以下是官方提供的原始代码示例:

{dede:loop table='dede_archives' sort='' row='4' if=''}
[field:title/]
{/dede:loop}
    
接下来,我们将介绍如何通过自定义函数来解决问题。
### 解决方案 1. **修改 Include/common.func.php 文件** 打开 `Include/common.func.php` 文件,并在第 54 行之后添加以下函数代码:

function IDReturnURL($ID)
{
    global $dsql;
    $query = "Select arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,
              tp.defaultname,tp.namerule,tp.moresite,tp.siteurl,tp.sitepath 
              from dede_archives arc left join dede_arctype tp on arc.typeid=tp.id where arc.id = ".$ID;
    $row = $dsql->GetOne($query);
    $ReturnURL = GetFileUrl($row['id'],$row['typeid'],$row['senddate'],$row['title'],$row['ismake'],
               $row['arcrank'],$row['namerule'],$row['typedir'],$row['money'],$row['filename'],$row['moresite'],$row['siteurl'],$row['sitepath']);
    return $ReturnURL;
}
    
2. **模板调用方式的修改** 在模板文件中,我们对调用方式进行如下修改:

{dede:loop table='dede_archives' sort='' row='4' if=''}
  • ·[field:title function=cn_substrR(@me,44)/]
  • {/dede:loop}
    通过以上步骤,问题已经成功解决!
    ### 自定义 SQL 标签的应用 同样的逻辑也可以应用于自定义 SQL 标签。例如,可以使用以下代码实现链接的输出:
    
    [field:id runphp='yes']$arcRow=GetOneArchive(@me);@me=$arcRow['arcurl'];[/field:id]
        
    这种方法的核心在于使用 `[field:id function=IDReturnURL(@me)/]` 来替代 `[field:arcurl/]` 标签。通过自定义函数 `IDReturnURL`,我们可以动态生成所需的 URL。 总结来说,通过上述方法,我们不仅解决了 Dedecms 中 loop 标签无法解析 `[field:arcurl/]` 的问题,还为自定义 SQL 标签提供了灵活的解决方案。希望这篇文章能够帮助到正在面临类似问题的开发者们!