帝国CMS多模型内容协同展示:同一列表页的灵活调用技巧
在网站开发实践中,我们经常面临在同一页面展示多样化内容的挑战,首页需要同时呈现文章、下载、产品等多类型数据,或者根据分类、标签、时间等不同维度差异化调用内容,帝国CMS作为国内领先的建站系统,凭借其强大的标签语法和SQL查询功能,能够轻松实现"同一列表页多模型内容协同展示"的效果,本文将深入探讨这一技术,通过具体案例详解实现方法。
结合项调用的核心概念解析
"结合项"是指在内容调用过程中用于筛选和定位的条件参数,主要包括:
- 模型标识(
tbname):指定调用的数据表,如文章、下载、产品等 - 分类筛选(
classid):按栏目ID进行内容分类 - 标签关联(
keyid):基于标签系统进行内容关联 - 时间范围(
newstime):按发布时间筛选内容 - 自定义字段:如"是否推荐"、"点击量"、"作者"等扩展字段
通过灵活组合这些结合项,我们可以在同一页面区域实现差异化内容展示,满足复杂的网站布局需求。
典型应用场景
- 左右分栏展示:左侧展示"文章模型+国内新闻分类"的热门内容,右侧呈现"下载模型+软件分类"的最新资源
- 优先级排序展示:顶部按"是否置顶"字段显示置顶内容,下方展示普通内容
- 动态标签联动:根据用户访问的标签ID,动态调用包含该标签的不同模型内容
- 聚合:结合时间、分类、模型等多个维度,实现复杂的内容展示逻辑
实现方法详解
并列展示
需求描述:首页"资源推荐"区域需要同时展示"文章模型"的热门资讯和"下载模型"的最新软件,并排呈现。
实现步骤:
确定模型表名
- 文章模型默认表名:
[!db.pre!]ecms_news - 下载模型默认表名:
[!db.pre!]ecms_download
提示:表名可通过"后台→管理数据表→查看表名"确认,
[!db.pre!]为系统自动生成的表前缀,避免手动修改带来的兼容性问题。
分别调用不同模型数据
使用[ecmsinfo]标签,通过tbname参数指定模型,结合SQL语句实现精确筛选:
<!-- 调用文章模型的热门资讯 --> [ecmsinfo]"select * from [!db.pre!]ecms_news where checked=1 and classid=5 order by onclick desc limit 10",10,30,0,0,2,0[/ecmsinfo] <!-- 调用下载模型的新软件 --> [ecmsinfo]"select * from [!db.pre!]ecms_download where checked=1 and classid=8 order by newstime desc limit 10",10,30,0,0,2,0[/ecmsinfo]
参数说明:
checked=1已审核classid:指定栏目IDorderby:排序方式(onclick点击量降序、newstime时间降序)limit:限制显示数量
布局优化
为使两种类型内容并排显示,可采用CSS布局技术:
.content-wrapper {
display: flex;
justify-content: space-between;
}
.content-column {
width: 48%;
}
<div class="content-wrapper">
<div class="content-column">
<!-- 文章内容区域 -->
[ecmsinfo]...[/ecmsinfo]
</div>
<div class="content-column">
<!-- 下载内容区域 -->
[ecmsinfo]...[/ecmsinfo]
</div>
</div>
基于字段的条件展示
需求描述:同一列表页中,按"是否置顶"字段区分,顶部显示置顶内容,下方显示普通内容。
实现方案:
<!-- 置顶内容 --> [ecmsinfo]"select * from [!db.pre!]ecms_news where isgood=1 order by newstime desc limit 5",5,30,0,0,2,0[/ecmsinfo] <!-- 普通内容 --> [ecmsinfo]"select * from [!db.pre!]ecms_news where isgood=0 order by newstime desc limit 10",10,30,0,0,2,0[/ecmsinfo]
其中isgood=1表示置顶内容,isgood=0表示普通内容,通过这种方式,可以实现内容的优先级展示。
动态标签联动展示
需求描述:根据用户访问的标签ID,动态调用包含该标签的不同模型内容。
实现方案:
<!-- 获取当前标签ID -->
<?php
$tagid = $_GET['tagid'];
if(empty($tagid)) $tagid = 1; // 默认标签ID
?>
<!-- 调用包含该标签的文章内容 -->
[ecmsinfo]"select * from [!db.pre!]ecms_news where CONCAT(',',keyids,',') like '%,$tagid,%' order by newstime desc limit 8",8,30,0,0,2,0[/ecmsinfo]
<!-- 调用包含该