织梦产品分类展示如何调用?

99ANYc3cd6
预计阅读时长 20 分钟
位置: 首页 织梦建站 正文
  1. 调用分类列表:获取所有产品分类的名称、链接、ID等信息。
  2. 调用分类下的产品列表:根据获取到的分类ID,分别调用每个分类下的产品列表进行展示。

下面我将为您提供最常用、最核心的代码示例,并详细解释其含义和用法。

织梦产品分类展示调用
(图片来源网络,侵删)

调用所有产品分类列表(一级分类)

这是最基础的需求,通常用于制作网站的“产品分类”导航栏或侧边栏。

代码示例

{dede:channel type='top' currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a></li>"}
    <li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}

代码详解

  • {dede:channel}:这是织梦调用栏目的核心标签。
  • type='top':这是一个关键参数,表示只调用顶级栏目(也就是一级分类),如果你的产品分类是二级分类,你需要去掉这个参数或者调整它。
  • currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a></li>":这是一个非常有用的参数。
    • 作用:当用户当前所在的页面是这个分类时,会自动使用这里的代码样式。
    • ~typelink~:会被替换为当前分类的链接地址。
    • ~typename~:会被替换为当前分类的名称。
    • class='thisclass':你可以自定义一个CSS类名,用来给当前分类添加高亮样式,比如改变颜色或加粗。
  • [field:typelink/]:在标签内部使用,用于获取并输出分类的链接地址。
  • [field:typename/]:在标签内部使用,用于获取并输出分类的名称。

完整示例(带CSS样式)

<!-- HTML 结构 -->
<ul class="category-nav">
    {dede:channel type='top' currentstyle="<li class='active'><a href='~typelink~' class='thisclass'>~typename~</a></li>"}
        <li><a href="[field:typelink/]">[field:typename/]</a></li>
    {/dede:channel}
</ul>
<!-- CSS 样式 -->
<style>
.category-nav li {
    display: inline-block;
    margin-right: 15px;
}
.category-nav li a {
    text-decoration: none;
    color: #333;
}
.category-nav li.active a {
    color: #ff6600; /* 高亮颜色 */
    font-weight: bold;
}
</style>

调用分类及其下的产品列表(最常用)

这是最核心的需求,比如首页的产品展示区,通常需要“分类名称 + 该分类下的几款产品”的形式。

思路

  1. 使用 {dede:channelartlist} 这个高级标签,它可以循环顶级栏目,并且可以直接获取到当前栏目的ID。
  2. {dede:channelartlist} 的内部,使用 {dede:sql} 根据当前栏目的ID去查询该分类下的产品。
  3. 为了代码整洁和可复用,推荐使用 {dede:include} 将产品列表的调用代码写成单独的模板文件,然后引入。

直接在模板中编写(适合简单场景)

<!-- 循环所有顶级产品分类 -->
{dede:channelartlist typeid='0' row='10'}
    <div class="product-category-box">
        <!-- 1. 显示分类名称 -->
        <h2><a href="[field:typelink/]">[field:typename/]</a></h2>
        <!-- 2. 调用并显示该分类下的产品列表 -->
        <ul class="product-list">
            {dede:sql sql='SELECT * FROM `dede_archives` a JOIN `dede_addonproduct` p ON a.id = p.aid WHERE a.typeid = [field:id] AND a.arcrank > -1 ORDER BY a.pubdate DESC LIMIT 0,4'}
                <li>
                    <!-- 产品图片,使用[field:litpic/] -->
                    <a href="[field:arcurl/]">
                        <img src="[field:litpic/]" alt="[field:title/]">
                    </a>
                    <!-- 产品标题,使用[field:title/] -->
                    <a href="[field:arcurl/]">[field:title/]</a>
                </li>
            {/dede:sql}
        </ul>
    </div>
{/dede:channelartlist}

代码详解

  • {dede:channelartlist}
    • typeid='0':表示调用所有顶级栏目,如果你想指定某些分类,可以写成 typeid='1,3,5'
    • row='10':表示调用10个顶级分类。
    • [field:id]:在内部,这个变量代表当前循环到的分类的ID。{dede:sql} 正是利用这个ID去查询产品。
  • {dede:sql}
    • sql='...':在这里写自定义的SQL查询语句。
    • SELECT * FROM ...:查询dede_archives(文章主表)和dede_addonproduct(产品附加表)的关联数据。
    • WHERE a.typeid = [field:id]这是关键,它筛选出属于当前分类的产品。
    • AND a.arcrank > -1:这个条件很重要,它用于过滤掉被“禁用”或“待审核”的文章,只显示正常发布的内容。
    • ORDER BY a.pubdate DESC:按发布时间倒序排列,最新的在最前面。
    • LIMIT 0,4:限制只查询4条记录,也就是每个分类下显示4个产品,你可以根据需要修改。
  • [field:litpic/]:产品缩略图地址。
  • [field:title/]
  • [field:arcurl/]:产品文章的完整URL链接。

使用模板包含(推荐,代码更清晰)

当产品列表的调用逻辑比较复杂时,直接写在模板里会很臃肿,推荐使用“包含文件”的方式。

第一步:创建产品列表模板文件

织梦产品分类展示调用
(图片来源网络,侵删)

在您的模板目录(通常是 /templets/default/)下创建一个新文件,product_list_item.htm

product_list_item.htm 文件内容:

<ul class="product-list">
    {dede:sql sql='SELECT * FROM `dede_archives` a JOIN `dede_addonproduct` p ON a.id = p.aid WHERE a.typeid = ~typeid~ AND a.arcrank > -1 ORDER BY a.pubdate DESC LIMIT 0,4'}
        <li>
            <a href="[field:arcurl/]">
                <img src="[field:litpic/]" alt="[field:title/]">
            </a>
            <a href="[field:arcurl/]">[field:title/]</a>
        </li>
    {/dede:sql}
</ul>

注意:这里我们把 [field:id] 换成了 ~typeid~,这是一个占位符,{dede:include} 在包含文件时,会用传入的实际值替换它。

第二步:在主模板中调用

{dede:channelartlist typeid='0' row='10'}
    <div class="product-category-box">
        <h2><a href="[field:typelink/]">[field:typename/]</a></h2>
        <!-- 引入产品列表模板,并传递typeid参数 -->
        {dede:include file='product_list_item.htm' typeid='[field:id]' /}
    </div>
{/dede:channelartlist}

{dede:include} 标签的作用就是将 product_list_item.htm 的内容插入到这里,并且把当前分类的ID [field:id] 作为 typeid 参数传递过去,这样 product_list_item.htm 里的 ~typeid~ 就能被正确替换了,这种方式使主模板非常干净,易于维护。


常见问题与注意事项

  1. 分类ID和产品ID:确保你的产品模型使用的是正确的附加表名(如 dede_addonproduct),如果你的产品模型名称是“产品”,那么附加表名通常就是 dede_addonproduct
  2. SQL查询效率{dede:sql} 虽然灵活,但直接写SQL语句需要注意性能,如果分类和产品数量非常多,建议尽量使用织梦官方提供的标签,因为它们通常有缓存机制,对于中小型网站,上述方法完全够用。
  3. typeid 参数{dede:channelartlist}typeid{dede:channel}typeid 含义不同,前者是限定要循环哪些顶级分类,后者是限定要调用哪些分类(包括子分类,除非指定 type='top')。
  4. URL静态化:如果你的网站开启了URL静态化,[field:arcurl/][field:typelink/] 会自动生成 .html 后缀的静态链接。

希望这份详细的指南能帮助您在织梦CMS中完美地实现产品分类的展示!

-- 展开阅读全文 --
头像
C语言程序设计与实验指导,如何高效入门?
« 上一篇 03-20
织梦后台模板如何修改
下一篇 » 03-20

相关文章

取消
微信二维码
支付宝二维码

目录[+]