织梦调用当前二级栏目

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

使用全局变量 $type

织梦在栏目页和文章页,都会自动将当前栏目的信息加载到一个全局数组变量 $type 中,我们只需要通过这个变量来获取即可。

织梦调用当前二级栏目
(图片来源网络,侵删)

在列表页 (list_*.php) 调用当前二级栏目

这是最直接的场景,因为列表页本身就是为某个栏目服务的。

假设你的栏目结构如下:

  • 一级栏目:新闻中心 (ID=1)
  • 二级栏目:公司新闻 (ID=2)
  • 二级栏目:行业动态 (ID=3)

当用户访问 公司新闻 的列表页时,$type 变量里就存储了 公司新闻 这个栏目的所有信息。

示例代码 (在列表页模板 list_*.php 中)

你可以直接在模板文件中使用以下代码:

<h1 class="current-category-title">
    <a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
</h1>
<p class="category-description">
    {dede:field name='description'/}
</p>

$type 变量中常用字段说明

字段名 说明 示例
typename 栏目名称 (最常用) 公司新闻
typedir 栏目目录 (不带域名) /news/company/
typeurl 栏目完整链接 (自动生成,最常用) http://www.yoursite.com/news/company/
id 栏目ID 2
description 栏目简介 这里是公司新闻的详细描述...
seotitle 栏目SEO标题 公司新闻 - 您的公司名称
keywords 栏目关键词 公司新闻, 公司动态, 企业资讯

在文章页 (article_*.php) 调用当前二级栏目

文章属于某个栏目,所以文章页也可以通过 $type 变量获取它所属栏目的信息,这个方法同样适用于一级、二级、三级等任意层级的栏目。

示例代码 (在文章页模板 article_*.php 中)

在文章详情页,你想显示“本文所属栏目”:

<div class="article-meta">
    <span>本文所属分类:</span>
    <a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
</div>
<div class="article-category-desc">
    {dede:field name='description' function='htmlspecialchars(@me)'/}
</div>

注意:在文章页,{dede:field name='typename'}{dede:global.name/} 是不同的。

  • {dede:field name='typename'}:获取的是当前文章所属栏目的名称。
  • {dede:global.name/}:获取的是你后台设置的“网站名称”。

在首页或首页某个特定位置调用当前二级栏目

这个需求稍微复杂一些,因为首页不属于任何一个具体栏目,通常我们想表达的是“根据用户点击进入的二级栏目,在首页显示该栏目的信息”,这需要结合 JSPHP 来实现,或者使用更灵活的 arclist

方法A:使用JS切换(用户体验好,推荐)

这种方法是前端实现,通过JS改变首页显示的内容,而不需要刷新页面。

  1. 在首页模板 index.htm 中,为要显示栏目信息的区域设置一个ID

    <div class="current-category-info" id="categoryDisplayArea">
        <!-- 默认内容,比如欢迎语 -->
        <p>欢迎访问,请点击上方栏目导航。</p>
    </div>
  2. 在首页的 <head> 或底部引入一个JS文件static/js/category.js):

    // category.js
    function showCategoryInfo(typeId) {
        // 使用AJAX请求获取栏目信息
        fetch(`/include/getCategoryInfo.php?id=${typeId}`)
            .then(response => response.json())
            .then(data => {
                if (data.success) {
                    document.getElementById('categoryDisplayArea').innerHTML = `
                        <h2><a href="${data.typeurl}">${data.typename}</a></h2>
                        <p>${data.description}</p>
                    `;
                }
            })
            .catch(error => console.error('Error:', error));
    }
  3. 在织梦根目录下创建一个PHP文件 include/getCategoryInfo.php

    <?php
    // 引入数据库配置
    require_once (dirname(__FILE__) . "/../include/common.inc.php");
    $typeid = isset($_GET['id']) ? intval($_GET['id']) : 0;
    if ($typeid > 0) {
        $query = "SELECT * FROM `#@__arctype` WHERE id = $typeid";
        $row = $dsql->GetOne($query);
        if (is_array($row)) {
            $result = array(
                'success' => true,
                'typename' => $row['typename'],
                'typeurl' => GetTypeUrl($row['id'], $row['typedir'], $row['isdefault'], $row['defaultname'], $row['ispart'], $row['namerule'], $row['moresite'], $row['siteurl'], $row['sitepath']),
                'description' => $row['description']
            );
            echo json_encode($result);
        } else {
            echo json_encode(array('success' => false, 'message' => '栏目不存在'));
        }
    } else {
        echo json_encode(array('success' => false, 'message' => '无效的栏目ID'));
    }
    ?>
  4. 修改首页的栏目链接,让它们调用JS函数:

    <!-- 原来的链接 -->
    <a href='{dede:type}[field:typelink/]{/dede:type}'>公司新闻</a>
    <!-- 修改为 -->
    <a href="javascript:;" onclick="showCategoryInfo(2)">公司新闻</a>
    <a href="javascript:;" onclick="showCategoryInfo(3)">行业动态</a>

方法B:使用 {dede:arclist} 标签(静态化友好)

如果你的首页是静态生成的,并且想根据某个参数(如URL中的 typeid)来显示特定栏目,可以使用 arclist

  1. 修改栏目链接,让它们传递 typeid 参数:

    <!-- 链接到首页并带上栏目ID -->
    <a href='/index.php?typeid=2'>公司新闻</a>
    <a href='/index.php?typeid=3'>行业动态</a>
  2. 在首页模板 index.htm 中,使用PHP判断和 arclist

    {dede:php}
        $typeid = isset($_GET['typeid']) ? intval($_GET['typeid']) : 0;
        if ($typeid > 0) {
            // 获取栏目信息
            $typeInfo = $dsql->GetOne("SELECT typename, description FROM `#@__arctype` WHERE id = $typeid");
            // 输出栏目名称和简介
            echo "<h2><a href='/list.php?tid=" . $typeid . "'>" . $typeInfo['typename'] . "</a></h2>";
            echo "<p>" . $typeInfo['description'] . "</p>";
        }
    {/dede:php}
    <!-- 根据typeid调用该栏目的文章列表 -->
    {dede:arclist typeid='$typeid' titlelen='40' row='10'}
        <li><a href="[field:arcurl/]">[field:title/]</a></li>
    {/dede:arclist}
你的位置 想要做什么 推荐方法
列表页 (list_*.php) 获取当前栏目的名称、链接、简介等。 直接使用 {dede:field name='typename'}
文章页 (article_*.php) 获取当前文章所属栏目的信息。 直接使用 {dede:field name='typename'}
首页 (index.htm) 根据用户点击动态显示某个二级栏目的信息。 推荐JS方法,用户体验好,无需刷新页面。
首页 (index.htm) 生成静态页面时,根据URL参数显示特定栏目内容。 使用 arclist + PHP判断,适合纯静态化方案。

对于绝大多数情况,记住在 列表页文章页 使用 {dede:field name='xxx'} 调用 $type 变量里的信息即可。

-- 展开阅读全文 --
头像
dede list col
« 上一篇 今天
c语言 varargs用法
下一篇 » 今天

相关文章

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