是的,DedeCMS(织梦CMS)的文章完全可以使用不同的模板,这是DedeCMS一个非常核心和强大的功能,它允许网站管理员根据不同的栏目、不同的需求,为文章展示设置完全不同的样式和布局。
DedeCMS的模板系统是“栏目”驱动的,而不是整个网站只有一个固定的文章模板。
下面我将详细解释如何实现这一点,包括其原理、具体操作方法和高级技巧。
核心原理:栏目与模板的关联
在DedeCMS中,文章的最终显示页面是由以下几个因素决定的:
- 栏目设置:每个栏目都有一个独立的属性,其中最重要的属性之一就是“文章列表模板”和“页模板”。
- 文章模型:不同的文章模型(如普通文章、产品、软件下载等)也可以有不同的内容页模板。
- 特殊标记:通过一些特殊标记,可以在同一个模板中实现动态切换。
核心逻辑是: 当用户点击一篇文章进入内容页时,系统会首先查找这篇文章所属的栏目,然后使用该栏目设置的“页模板”来渲染这篇文章。
如何为不同栏目设置不同的模板
这是最常用、最标准的方法,假设你有两个栏目:“公司新闻”和“产品中心”,你希望它们的文章页面长得不一样。
操作步骤:
-
登录后台:使用管理员账号登录DedeCMS后台。
-
进入栏目管理:在左侧菜单中找到【栏目管理】->【栏目管理】。
-
选择并编辑栏目:
- 找到你想要设置模板的栏目,公司新闻”,点击其后面的【修改】按钮。
- 在弹出的编辑页面中,找到“高级选项”或“栏目自定义属性”部分。
- 找到“页模板”这个选项。
- 点击输入框右侧的【选择】或【浏览】按钮,从你的模板目录(通常是
/templets/目录)中选择一个专门为“公司新闻”设计的模板文件,article_news.htm。 - 保存修改。
-
重复操作:
- 用同样的方法,编辑“产品中心”栏目。
- 为它选择另一个不同的模板文件,
article_product.htm。
-
创建模板文件:
- 在你的
/templets/目录下,创建article_news.htm和article_product.htm这两个文件。 - 在这两个文件中,你可以编写完全不同的HTML结构和DedeCMS标签。
article_news.htm可能只包含标题、正文、发布时间。article_product.htm除了基本信息外,还可能包含产品规格、价格、下载链接、相册等功能。
- 在你的
效果:
- 当用户访问“公司新闻”栏目下的任何一篇文章时,页面将使用
article_news.htm模板来显示。 - 当用户访问“产品中心”栏目下的任何一篇文章时,页面将使用
article_product.htm模板来显示。
高级技巧:在同一模板中动态切换内容
你可能不想创建多个模板文件,而是希望在一个模板文件里,根据文章所属的不同栏目,显示不同的内容块,这可以通过DedeCMS的条件判断标签来实现。
实现方法:
在你的默认文章内容页模板(通常是 article_article.htm)中,使用 if 标签进行判断。
示例代码 (article_article.htm):
{dede:include filename="head.htm"/}
<div class="article-container">
<h1>{dede:field.title/}</h1>
<div class="article-info">
<span>作者:{dede:field.writer/}</span>
<span>时间:{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/}</span>
<span>来源:{dede:field.source/}</span>
</div>
<div class="article-content">
{dede:field.body/}
</div>
<!-- ======== 核心部分:根据栏目ID动态显示不同内容 ======== -->
{dede:if fieldtypeid == '1'}
<!-- 如果文章属于栏目ID为1的“公司新闻”,则显示以下内容 -->
<div class="news-related">
<h3>相关新闻</h3>
{dede:arclist row='5' titlelen='30'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</div>
{/dede:if}
{dede:if fieldtypeid == '2'}
<!-- 如果文章属于栏目ID为2的“产品中心”,则显示以下内容 -->
<div class="product-specs">
<h3>产品规格</h3>
<table>
<tr><td>型号:</td><td>{dede:field.product_model/}</td></tr>
<tr><td>价格:</td><td>{dede:field.product_price/}</td></tr>
</table>
</div>
<div class="product-gallery">
<h3>产品图片</h3>
{dede:field.product_images function='getimgs(@me, 600, 400, 0, '')'/}
</div>
{/dede:if}
<!-- 如果不属于以上任何栏目,可以显示一个默认内容或什么都不显示 -->
{dede:if fieldtypeid != '1' && fieldtypeid != '2'}
<!-- 默认内容或留空 -->
{/dede:if}
</div>
{dede:include filename="footer.htm"/}
说明:
fieldtypeid是一个系统变量,代表文章所属栏目的ID。- 你需要先去后台查看你的“公司新闻”和“产品中心”栏目的ID,然后将
== '1'和== '2'修改成你自己的栏目ID。 - 这种方法的好处是维护一个模板文件即可,但缺点是模板文件会变得比较臃肿,逻辑复杂。
使用文章模型实现差异化
DedeCMS还支持“文章模型”,可以理解为文章的“数据结构”,不同的模型可以有不同的自定义字段。
- 例如:你可以创建一个“产品”模型,它除了标题、正文外,还有“价格”、“规格”、“下载地址”等自定义字段。
- 你可以为“产品”模型设置一个专门的模板,当使用这个模型发布文章时,系统会自动调用对应的模板。
这种方法适合于数据结构差异巨大的内容类型,但设置起来比单纯换模板要复杂。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 按栏目设置模板 | 最标准、最清晰、性能最好、易于维护。 | 需要创建多个模板文件。 | 强烈推荐,绝大多数情况下都应使用此方法。 |
| 同一模板内条件判断 | 只需维护一个模板文件。 | 模板文件逻辑复杂,不易阅读和调试,可能影响性能。 | 栏目间差异不大,或需要在一个大系统里做细微调整时。 |
| 使用不同文章模型 | 数据结构完全不同,功能扩展性强。 | 配置复杂,需要创建模型、字段、模板,不适合新手。 | 产品、软件、下载等与普通文章数据结构差异巨大的类型。 |
给新手的建议:
直接使用第一种方法——在栏目管理中为不同栏目设置不同的“文章内容页模板”,这是DedeCMS设计的初衷,也是最稳定、最不容易出错的方式,先掌握好这个基础,再根据需要去探索更高级的技巧。
