dede如何调用顶级栏目下的二级栏目?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 DEDE建站 正文
  1. 找到顶级栏目的 ID
  2. 使用带有顶级栏目 ID 条件的 {dede:channel} 标签进行调用。

下面我将为您提供几种最常用和最实用的方法,并附上详细的代码解释。

dede调用某个顶级栏目下二级栏目
(图片来源网络,侵删)

准备工作:如何找到顶级栏目 ID?

在编写代码之前,您必须先知道您要调用的那个“顶级栏目”的 ID 是多少。

  1. 登录您的 DedeCMS 后台。
  2. 进入【核心】 -> 【栏目管理】。
  3. 找到您想要调用的那个顶级栏目(产品展示”)。
  4. 将鼠标光标移动到该栏目名称上,在浏览器左下角的状态栏会显示该栏目的编辑链接,.../catalog_add.php?cid=1
  5. 这个 cid=1 中的 1 就是这个顶级栏目的 ID,请记下这个 ID。

最常用的方法(推荐)

这是最直接、最常用的方法,直接在模板文件中使用 {dede:channel} 标签,并通过 topidreid 参数来指定。

标签代码

{dede:channel type='son' typeid='这里填入顶级栏目ID'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

代码详解

  • {dede:channel}:这是 DedeCMS 调用栏目的核心标签。
  • typeid='这里填入顶级栏目ID'这是关键,将您准备工作中找到的顶级栏目 ID 填到这里,它告诉系统从哪个栏目开始查找其子栏目。
  • type='son':这个参数指定了调用的类型。
    • son:表示调用当前栏目(由 typeid 指定)的直接子栏目(即二级栏目)。
    • self:表示调用当前栏目本身。
    • top:表示调用顶级栏目。
  • [field:typelink/]:这是栏目链接的单标签,会输出该二级栏目的完整网址。
  • [field:typename/]:这是栏目名称的单标签,会输出该二级栏目的名称。

完整示例

假设您的“产品展示”顶级栏目 ID 是 2,您想在首页的某个位置调用它的所有二级栏目,代码可以这样写:

<div class="product-categories">
    <h3>产品分类</h3>
    <ul>
        {dede:channel type='son' typeid='2'}
        <li><a href="[field:typelink/]" title="[field:typename/]">[field:typename/]</a></li>
        {/dede:channel}
    </ul>
</div>

这段代码会生成一个类似这样的 HTML 列表:

dede调用某个顶级栏目下二级栏目
(图片来源网络,侵删)
<div class="product-categories">
    <h3>产品分类</h3>
    <ul>
        <li><a href="/plus/list.php?tid=5" title="手机">手机</a></li>
        <li><a href="/plus/list.php?tid=6" title="电脑">电脑</a></li>
        <li><a href="/plus/list.php?tid=7" title="相机">相机</a></li>
    </ul>
</div>

使用 reid 参数(效果相同)

reid 参数的含义是“父栏目ID”,它与 typeidson 类型在效果上是等价的,您可以选择自己觉得更直观的一种。

标签代码

{dede:channel type='son' reid='这里填入顶级栏目ID'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

代码详解

  • reid='这里填入顶级栏目ID':这里的 reid 指定了父栏目的 ID,系统会查找所有 reid 等于这个值的栏目,也就是它的子栏目。
  • type='son':在这里可以省略,因为 reid 参数本身就隐含了查找子栏目的意思,但为了代码清晰,建议保留。

调用顶级栏目下的所有栏目(包括二级、三级...)

如果您不仅仅是想调用二级栏目,而是想调用顶级栏目下的所有层级的子栏目(“产品展示”下的“手机”、“电脑”,以及“手机”下的“智能手机”、“功能机”),可以使用 type='sun' 参数。

标签代码

{dede:channel type='sun' typeid='这里填入顶级栏目ID'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

代码详解

  • type='sun'sun 是 "son" 的扩展,表示“所有子孙栏目”,会递归地查找所有层级的子栏目。

进阶:调用带封面文章的二级栏目

我们希望调用的二级栏目列表,每个栏目项都包含一张封面图片,这需要结合 {dede:arclist} 标签来实现。

标签代码

{dede:channel type='son' typeid='这里填入顶级栏目ID'}
    <dl>
        <dt>
            <a href="[field:typelink/]">
                <img src="[field:typedir function='str_replace("{cmspath}","",@me)'/images/defaultpic.jpg']" alt="[field:typename/]" />
            </a>
        </dt>
        <dd>
            <a href="[field:typelink/]">[field:typename/]</a>
        </dd>
    </dl>
{/dede:channel}

代码详解

这里的关键在于如何获取栏目的封面图,DedeCMS 的栏目本身不直接存储封面图路径,但有一个通用方法:

dede调用某个顶级栏目下二级栏目
(图片来源网络,侵删)
  1. 约定存放位置:我们会将栏目的封面图命名为 pic.jpgcover.jpg,并放在该栏目对应的目录下的 images 文件夹中。
  2. 构造路径
    • [field:typedir/]:获取栏目的目录路径,/a/product/phone
    • function='str_replace("{cmspath}","",@me)':这是一个自定义函数,用于去除路径中的 {cmspath} 变量,得到相对于网站根目录的路径。
    • '/images/defaultpic.jpg':这是默认图片的路径,如果栏目目录下没有 pic.jpg,则显示这个默认图。
    • 最终路径[field:typedir function='str_replace("{cmspath}","",@me)'/images/pic.jpg'] 会生成类似 /a/product/phone/images/pic.jpg 这样的路径。

注意:此方法的前提是您已经为每个二级栏目上传了封面图,并且遵循了上述的命名和存放规则。

需求 推荐标签 代码示例
调用指定顶级栏目的二级栏目 {dede:channel type='son' typeid='ID'} {dede:channel type='son' typeid='2'}<a href="[field:typelink/]">[field:typename/]</a>{/dede:channel}
调用指定顶级栏目的所有子孙栏目 {dede:channel type='sun' typeid='ID'} {dede:channel type='sun' typeid='2'}...
调用带封面图的二级栏目 {dede:channel} + 自定义图片路径 {dede:channel type='son' typeid='2'}<img src="[field:typedir function='str_replace("{cmspath}","",@me)'/images/pic.jpg']" />...{/dede:channel}

希望这些详细的解释和示例能帮助您完美地解决问题!

-- 展开阅读全文 --
头像
织梦background url如何正确设置路径?
« 上一篇 今天
unsigned long取值范围是多少?
下一篇 » 今天

相关文章

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

目录[+]