菜鸟科技网

dede如何做两个模板,dede如何实现两个不同模板的调用?

在织梦(DedeCMS)系统中,使用两个不同的模板来展示内容是常见的需求,例如列表页和内容页使用不同风格,或者针对不同栏目定制专属模板,实现这一功能需要理解织梦的模板调用机制和标签规则,以下从模板创建、栏目关联、内容调用及动态切换等方面详细说明操作步骤。

dede如何做两个模板,dede如何实现两个不同模板的调用?-图1
(图片来源网络,侵删)

模板文件的创建与命名

织梦模板文件存放在/templets/目录下,通常分为默认模板(default/)和自定义模板目录,创建两个模板时,需先在templets/下新建文件夹(如template1template2),并在各自目录中创建对应的模板文件。

  • 模板1:/templets/template1/list_article.htm(列表页模板)
  • 模板2:/templets/template2/article_article.htm页模板)

模板文件需遵循织梦的命名规则,如列表页模板以list_页以article_开头,后跟栏目ID或自定义标识,若需动态切换模板,可通过在后台栏目设置中指定模板路径,或在内容页调用时通过PHP代码覆盖默认模板。

栏目设置与模板关联

  1. 后台栏目配置
    登录织梦后台,进入“栏目管理”->“添加栏目”,在“栏目列表选项”中找到“列表模板”和“文章模板”选项。

    • 若使用模板1,在“列表模板”输入/template1/list_article.htm,在“文章模板”输入/template1/article_article.htm
    • 若使用模板2,则分别输入/template2/list_article.htm/template2/article_article.htm
      保存后,该栏目的内容将自动调用对应的模板文件。
  2. 全局模板覆盖
    若需对全站生效,可在“系统”->“系统基本参数”->“核心设置”中修改“列表目录默认模板”和“文章目录默认模板”,但这种方式会统一全站风格,不推荐用于两个模板并存的情况。

    dede如何做两个模板,dede如何实现两个不同模板的调用?-图2
    (图片来源网络,侵删)

内容页模板的动态调用

若需在同一栏目下根据内容类型切换模板(如普通文章和图集使用不同模板),可通过修改/include/arc.archives.class.php文件实现,但需谨慎操作,避免破坏系统核心功能,更安全的方式是使用自定义字段和判断标签:

  1. 添加自定义字段
    在后台“内容模型管理”->“普通文章”->“字段管理”中添加一个字段(如templettype),用于标识内容使用的模板类型(如type1type2)。

  2. 模板文件中的判断逻辑 页模板(如article_article.htm)中,通过PHP代码判断自定义字段值,并调用不同模板:

    {dede:field name='id' runphp='yes'}
    $aid = @me;
    $row = $GLOBALS['dsql']->GetOne("SELECT templettype FROM `dede_archives` WHERE id='$aid'");
    $templet = $row['templettype'] == 'type1' ? '/template1/article_type1.htm' : '/template2/article_type2.htm';
    @me = $templet;
    {/dede:field}
    {dede:include filename='@me' ismake='yes'/}

    此代码会根据templettype字段的值动态加载不同的模板文件。

    dede如何做两个模板,dede如何实现两个不同模板的调用?-图3
    (图片来源网络,侵删)

列表页模板的差异化调用

若需在列表页展示不同风格的内容,可通过以下方式实现:

  1. 使用不同栏目调用不同模板
    在首页或其他列表页中,通过指定栏目ID调用不同模板的列表内容:

    {dede:channelartlist typeid='1,2'}
    {dede:type}[field:typelink/]{/dede:type}
    {dede:arclist titlelen='30' row='10'}
    [field:title/]
    {/dede:arclist}
    {/dede:channelartlist}

    其中typeid为栏目ID,可分别设置不同栏目使用不同的模板文件。

  2. 通过自定义字段筛选
    在列表页模板中使用SQL语句筛选特定字段的内容,并调用子模板:

    {dede:sql sql="SELECT id,title FROM `dede_archives` WHERE templettype='type1' LIMIT 10"}
    <a href="[field:id runphp='yes'] $id = @me; $url = GetOneArchive($id); @me = $url['arcurl']; [/field:id]">[field:title/]</a>
    {/dede:sql}

模板文件的结构与标签使用

两个模板的核心差异在于HTML结构和织梦标签的调用方式。

  • 模板1(简洁风格)

    <html>
    <head><title>{dede:global name='cfg_webname'/}</title></head>
    <body>
    {dede:arclist row='5'}
    [field:title/]
    {/dede:arclist}
    </body>
    </html>
  • 模板2(复杂风格)

    <html>
    <head><title>{dede:global name='cfg_webname'/}</title></head>
    <body>
    {dede:channel type='top'}
    [field:typename/]
    {/dede:channel}
    {dedarclist titlelen='50' row='10'}
    [field:title/] - [field:pubdate function="MyDate('Y-m-d',@me)"/]
    {/dede:arclist}
    </body>
    </html>

    需注意不同模板中标签的属性和嵌套规则,确保数据正确调用。

调试与注意事项

  1. 模板路径错误:确保后台填写的模板路径正确,且文件存在于指定目录。
  2. 缓存问题:修改模板后需在后台“生成”->“更新HTML”中清除缓存。
  3. 权限问题:确保/templets/目录及其子目录有写入权限。
  4. 备份核心文件:修改arc.archives.class.php等文件前需备份,避免系统崩溃。

以下为相关操作中的关键步骤对比:

操作环节 模板1实现方式 模板2实现方式
栏目模板关联 后台指定/template1/list.htm 后台指定/template2/list.htm
列表页差异化展示 指定栏目ID调用 SQL筛选特定字段内容
标签使用差异 简单{dede:arclist} 复杂嵌套标签+自定义函数

相关问答FAQs

问题1:如何在同一栏目下让部分内容调用模板A,部分调用模板B?
解答:可通过添加自定义字段(如templetflag类型,在内容页模板中使用PHP判断字段值并动态加载模板。

{dede:field name='templetflag' runphp='yes'}
if(@me == 'A') @me = '/templateA/article.htm';
else @me = '/templateB/article.htm';
{/dede:field}
{dede:include filename='@me' ismake='yes'/}

问题2:修改模板后前台页面未更新,是什么原因?
解答:可能是缓存未清除,解决方法:

  1. 登录织梦后台,点击“生成”->“一键更新网站”->“更新HTML”->“更新所有栏目”。
  2. 检查/data/目录下的缓存文件(如cache文件夹),手动删除缓存文件。
  3. 确认模板文件路径正确,且未被浏览器缓存(可按Ctrl+F5强制刷新)。
原文来源:https://www.dangtu.net.cn/article/9125.html
分享:
扫描分享到社交APP
上一篇
下一篇