织梦关联文章副栏目,如何实现?

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

一篇文章可以同时属于主栏目和副栏目,并且当你在副栏目中浏览时,能够看到所有属于该副栏目的文章(无论它们的主栏目是什么)。

这需要两个步骤:

  1. 为文章设置副栏目(在后台发布或修改文章时)。
  2. 在前台模板中调用副栏目的关联文章(使用织梦的标签)。

第一步:为文章设置副栏目

这是实现功能的基础,织梦的文章模型本身就支持“副栏目”字段。

在后台发布/编辑文章时设置

  1. 登录织梦后台,进入“[内容]” -> “添加文章” 或 “编辑文章”。
  2. 在文章编辑页面,向下滚动,找到 “副栏目” 这个选项。
  3. 它通常是一个多选框,列出了你网站中所有的栏目。
  4. 选择 你希望这篇文章关联到的副栏目,可以选一个,也可以选多个。
  5. 发布或更新文章。

注意:一个文章必须有且仅有一个主栏目(在顶部“栏目选择”处选择),但可以有零个、一个或多个副栏目。

副栏目”选项不存在或不可用

极少数情况下,你可能需要检查一下:

  • 检查文章模型:确保你使用的文章模型(在“频道模型”中设置)包含了“副栏目”这个字段,默认的“文章模型”是包含的。
  • 检查权限:确保你当前账号有权限编辑文章和设置副栏目。

第二步:在前台模板中调用副栏目的关联文章

这是实现前台展示的关键,我们需要使用织梦的 {dede:arclist} 标签,并利用它的 typeidaddfieldschannelid 等属性。

假设我们要在 栏目A 的列表页模板(list_articlehtm)中,显示所有关联到 栏目A 的文章(这些文章的主栏目可能是B、C、D等)。

核心标签:{dede:arclist}

我们需要使用以下关键属性:

  • typeid='这里填副栏目的ID':这是最重要的参数,告诉织梦我们要获取哪个副栏目下的文章。
  • addfields='type,mid':这个参数用于获取附加字段,因为我们要判断文章的主栏目是否等于当前栏目,所以需要获取文章的 typeid(主栏目ID)和 mid(模型ID,有时需要用到)。
  • channelid='1':指定文章所在的频道ID。1 通常代表“文章频道”,如果你的网站有自定义模型,请填写对应的频道ID。
  • reid='0':表示不获取副栏目本身及其子栏目的文章,而是获取所有以该栏目为“副栏目”的文章,这是实现关联的核心。
  • row='10':显示的文章数量。
  • titlelen='30'长度。

示例代码

假设你在 list_article.htm 模板中,想在列表上方显示一个“相关文章”板块,这些文章的主栏目是其他栏目,但副栏目是当前栏目。

{dede:arclist typeid='这里替换成当前副栏目的ID' addfields='typeid,mid' channelid='1' reid='0' row='8' titlelen='30'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span class="info">([field:pubdate function="MyDate('Y-m-d', @me)"/])</span>
    </li>
{/dede:arclist}

问题来了typeid='这里替换成当前副栏目的ID' 这个ID是固定的吗?不,我们需要动态获取当前栏目的ID。

如何动态获取当前栏目ID并调用?

织梦在列表页中,有一个内置变量 typeid,它就代表了当前页面的栏目ID,我们可以直接使用它。

最终的、可用的模板代码:

将下面的代码放到你想要显示关联文章的位置,list_article.htm 的循环之外。

<h3>相关栏目文章</h3>
<ul class="related-list">
    {dede:arclist 
        typeid='[field:typeid/]' 
        addfields='typeid,mid' 
        channelid='1' 
        reid='0' 
        row='10' 
        titlelen='30'
        orderby='pubdate'
        orderway='desc'
    }
        <li>
            <a href="[field:arcurl/]" title="[field:title/]">[field:title/]</a>
            <span class="date">([field:pubdate function="MyDate('m-d', @me)"/])</span>
        </li>
    {/dede:arclist}
</ul>

代码解释:

  • typeid='[field:typeid/]':这是动态获取当前栏目的ID,并将其作为副栏目ID进行查询。
  • addfields='typeid,mid':获取文章的主栏目ID (typeid) 和模型ID (mid),虽然在这个例子中mid没用到,但加上typeid是为了代码的完整性和潜在扩展性。
  • reid='0':这是实现“副栏目关联”的魔法,它告诉织梦不要找常规的子栏目,而是找所有 dede_arctiny (或 dede_archives) 表中 typeid 字段(主栏目)不等于当前栏目ID,但 typeid2 字段(副栏目)包含当前栏目ID 的文章。
  • orderby='pubdate' orderway='desc':按发布时间倒序排列,让最新的文章显示在最前面。

总结与注意事项

  1. 功能本质:织梦通过 typeid (主栏目) 和 typeid2 (副栏目) 两个字段来实现这个功能。reid='0' 是触发 typeid2 查询的关键。
  2. 后台设置:务必在后台为文章正确设置主栏目和副栏目,否则前台无法调用。
  3. 模板代码:核心是 {dede:arclist} 标签的 typeidreid='0' 的组合使用。
  4. 性能考虑:如果你的网站文章量非常大,且副栏目关联的文章也很多,这种查询可能会对数据库造成一定压力,建议合理设置 row 值,不要一次调用过多文章。
  5. SEO影响:这个功能非常适合做“相关阅读”或“专题聚合”,可以有效增加网站的内链,对SEO非常有利,你可以做一个“技术分享”副栏目,然后将所有技术文章的主栏目设为不同的产品分类,但副栏目都勾选“技术分享”,然后在“技术分享”的列表页中,就能聚合所有技术文章。

通过以上步骤,你就可以在织梦CMS中完美实现“关联文章副栏目”的功能了。

-- 展开阅读全文 --
头像
c语言 stdcall
« 上一篇 05-01
C语言三角形九九乘法表如何实现?
下一篇 » 05-01

相关文章

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

目录[+]