织梦typeid与top如何实现精准排序?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 织梦建站 正文

这个组合主要用于在网站的某个位置(如首页、栏目页)调用指定栏目下的文章列表。

织梦 typeid top
(图片来源网络,侵删)

核心标签解析

{dede:type}

这个标签的作用是获取一个栏目的信息,它本身通常不直接输出内容,而是作为一个“上下文环境”的设定器,一旦使用了 {dede:type},在其内部的所有标签(如 {dede:arclist}, {dede:field} 等)都会默认指向这个标签所指定的栏目。

常用属性:

  • typeid (必须): 指定要获取的栏目ID,这是它最重要的属性,告诉织梦你要操作的是哪个栏目。
  • row: 获取的栏目数量,通常设置为 1,因为我们一般只需要指定一个栏目。

{dede:arclist}

这是织梦CMS中最最核心的标签,用于获取文章列表,它非常强大,拥有大量的属性来控制输出的内容、数量、排序等。

常用属性:

织梦 typeid top
(图片来源网络,侵删)
  • typeid: 指定要获取文章的栏目ID,这个属性可以在 {dede:arclist} 单独使用,也可以被 {dede:type} 标签所覆盖。
  • row: 输出文章的数量,len`: 标题长度。
  • infolen: 内容摘要长度。
  • orderby: 排序方式,常用值:
    • sortrank (默认): 按文章排序级别(后台设置)。
    • pubdate: 按发布时间。
    • id: 按文章ID。
    • click: 按点击量。
  • orderway: 排序方向。desc (降序) 或 asc (升序)。
  • channelid: 指定内容模型ID,默认为文章模型 (1)。

typeidtop 的关系与用法

我们把这两个标签结合起来,并深入理解 typeidtop 的作用。

基本用法 - 调用指定栏目的文章列表

这是最常见的用法,假设我们要调用 ID 为 1 的栏目下的文章列表。

模板代码:

{dede:type typeid='1'}
    <h2><a href="[field:typelink/]">[field:typename/]</a></h2>
    <ul>
        {dede:arclist row='5' titlelen='30'}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        </li>
        {/dede:arclist}
    </ul>
{/dede:type}

代码解析:

  1. {dede:type typeid='1'}: 这行代码设定了一个“上下文”,告诉织梦:“接下来我们要操作的栏目是 ID 为 1 的那个栏目”。
  2. [field:typelink/][field:typename/]: 这是 {dede:type} 标签内的内置字段,分别输出该栏目的链接和名称。
  3. {dede:arclist row='5' titlelen='30'}: 在 {dede:type} 的“上下文”内,{dede:arclist} 默认就会调用 typeid='1' 这个栏目下的文章,所以这里的 typeid 属性可以省略。row='5' 表示调用5篇文章,titlelen='30' 表示标题最多显示30个字符。
  4. [field:arcurl/], [field:title/], [field:pubdate/]: 这些是 {dede:arclist} 标签内的内置字段,分别输出文章的链接、标题和发布时间。

在这种嵌套结构下,typeid 是由外层的 {dede:type} 标签指定的,内层的 {dede:arclist} 会继承这个 typeid


top 属性的强大作用 - 调用顶级栏目下的文章

top 是一个非常有用的属性,它的作用是获取当前栏目所在顶级栏目的ID,这在制作模板时,特别是多级栏目结构的网站,能实现非常灵活的调用。

什么时候需要用 top

当你希望调用当前栏目的顶级父栏目下的文章,而不是当前栏目本身时。

  • 网站首页:你想在首页调用“公司新闻”和“行业动态”这两个一级栏目下的文章。
  • 栏目页:你在一个三级栏目“技术支持 > 软件下载 > 版本历史”的页面,但你希望这里显示的是“技术支持”这个一级栏目下的所有文章。

top 如何与 typeid 结合?

top 不能单独用在 {dede:arclist} 里来指定顶级栏目,它需要配合 {dede:type} 来使用。

用法:

  1. {dede:type typeid='...'} 指定一个任意层级的子栏目
  2. 在内层的 {dede:arclist} 中,使用 typeid='~top'

示例:

假设你的栏目结构如下:

  • 栏目ID 1: 公司简介 (顶级)
  • 栏目ID 2: 新闻中心 (顶级)
    • 栏目ID 3: 公司新闻 (子栏目)
    • 栏目ID 4: 行业动态 (子栏目)
    • 栏目ID 5: 产品发布 (子栏目)

你想在“公司新闻”(ID=3) 这个栏目页里,调用它的顶级栏目“新闻中心”(ID=2) 下的所有文章。

模板代码:

{dede:type typeid='3'}
    <!-- 这里我们指定了当前栏目ID为3 -->
    <h2>顶级栏目 "[field:typename/]" 下的最新文章</h2>
    <ul>
        {dede:arclist typeid='~top' row='10' orderby='pubdate' orderway='desc'}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
        </li>
        {/dede:arclist}
    </ul>
{/dede:type}

代码解析:

  1. {dede:type typeid='3'}: 我们告诉织梦,当前上下文是“公司新闻”这个栏目(ID=3)。
  2. {dede:arclist typeid='~top'}: 关键点来了!typeid='~top' 的意思是:“不要用当前栏目的ID(3),而是用当前栏目(3)的顶级父栏目的ID(2)来获取文章列表”。
  3. 这段代码最终的效果是:在“公司新闻”栏目页,调用了“新闻中心”顶级栏目下的10篇最新文章。

top 的一个更简化的写法(仅适用于特定场景):

如果你只是想在当前栏目页调用其顶级栏目的文章,甚至可以省略外层的 {dede:type}

<h2>顶级栏目下的最新文章</h2>
<ul>
    {dede:arclist typeid='~top' row='10' orderby='pubdate' orderway='desc'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
    {/dede:arclist}
</ul>

在这种情况下,织梦会自动识别“当前栏目”的ID,~top 会找到它的顶级栏目ID。


总结与对比

组合方式 模板代码 解释与用途 适用场景
基本调用 {dede:type typeid='1'}{dede:arclist}{/dede:type} 调用指定ID栏目下的文章。typeid 由外层 {dede:type} 决定。 首页调用固定栏目、列表页调用同级栏目等。
调用顶级栏目 {dede:type typeid='3'}{dede:arclist typeid='~top'}{/dede:type} 调用当前栏目(ID=3)的顶级栏目下的文章。typeid~top 动态获取。 在子栏目页显示其父栏目或顶级栏目的内容,实现布局统一和内容聚合。
独立调用顶级栏目 {dede:arclist typeid='~top'} 当前栏目页,调用当前栏目的顶级栏目下的文章。typeid~top 自动获取当前栏目的顶级ID。 快速在子栏目页实现调用上级栏目的功能,代码更简洁。

核心要点:

  1. typeid:是指定栏目ID的“定位符”,它可以是固定的数字(如 typeid='1'),也可以是动态的(如 typeid='~top')。
  2. top:不是一个独立的标签,而是 typeid 属性的一个特殊值(~top),它的作用是将栏目ID定位到当前栏目的顶级父栏目
  3. 嵌套关系{dede:type} 设定环境,{dede:arclist} 在这个环境中执行操作,理解这个上下文关系是掌握织梦标签的关键。

希望这个详细的解释能帮助你彻底理解 typeidtop 在织梦中的用法!

-- 展开阅读全文 --
头像
dede list 调用不出来
« 上一篇 01-03
Mathematica与C语言如何高效结合?
下一篇 » 01-03

相关文章

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