dede如何获取父页面参数?

99ANYc3cd6
预计阅读时长 17 分钟
位置: 首页 织梦建站 正文
  1. 浏览器地址栏中的 URL 参数:访问 http://www.example.com/list.php?tid=1&pagesize=10,这里的 tidpagesize 就是参数,这是最常见的情况。
  2. 织梦栏目体系中的父栏目:当前栏目是“新闻动态”,它的父栏目是“网站首页”,想获取父栏目的 ID 或名称。

下面我将针对这两种情况,为你提供详细的解决方案和代码示例。

织梦 dede 获取父页面 参数
(图片来源网络,侵删)

获取 URL 传递的参数(GET 参数)

这是最常用的一种方法,通常用于列表页接收筛选条件、分页参数等。

方法 1:使用 $dsql 全局对象(推荐)

织梦的全局数据库对象 $dsql 提供了一个 GetOne() 方法,可以非常方便地获取并自动处理 GET 参数。

示例场景: 假设你有一个列表页 list.php,需要根据 URL 中的 tid (栏目ID) 来获取该栏目的名称。

代码实现

织梦 dede 获取父页面 参数
(图片来源网络,侵删)

在你的模板文件 list.htm 或者 PHP 动页文件 list.php 中,可以这样写:

<?php
// 引入全局数据库对象(如果在模板文件中,织梦会自动引入;在PHP文件中需要确保已引入)
// 如果在 list.php 中,通常不需要手动引入,因为 dedecms 的入口文件已经处理了。
// 使用 $dsql->GetOne() 获取 tid 对应的栏目信息
// $_GET['tid'] 会自动被处理和转义,防止SQL注入
$typename = $dsql->GetOne("SELECT typename FROM `#@_arctype` WHERE id = '{$_GET['tid']}'");
// 判断是否获取成功
if (is_array($typename)) {
    $current_typename = $typename['typename'];
    echo "当前栏目名称是: " . $current_typename;
} else {
    echo "未找到或未传递 tid 参数!";
}
// 如果你想获取多个参数,可以多次调用 GetOne
// 同时获取 tid 和pagesize
$pagesize = isset($_GET['pagesize']) ? intval($_GET['pagesize']) : 20; // 使用 isset 和 intval 更安全
echo "<br>每页显示条数: " . $pagesize;
?>

优点

  • 安全$dsql->GetOne() 内部会对 $_GET 数组中的值进行自动的过滤和转义,能有效防止 SQL 注入攻击。
  • 方便:代码简洁,一行即可搞定。

方法 2:直接使用 PHP 的 $_GET 超全局变量

如果你只是简单地获取参数值,并且不立即用于数据库查询,可以直接使用 $_GET

示例场景: 在列表页获取 keyword 参数,用于显示“您正在搜索xxx”的提示。

织梦 dede 获取父页面 参数
(图片来源网络,侵删)

代码实现

<?php
// 直接从 $_GET 数组中获取参数
$keyword = isset($_GET['keyword']) ? trim($_GET['keyword']) : '';
if (!empty($keyword)) {
    echo "<h3>搜索关键词: " . htmlspecialchars($keyword) . "</h3>";
}
// 注意:如果这个参数要用于 SQL 查询,必须手动过滤!
// $keyword = addslashes($keyword); 或使用 $dsql->Escape() 函数
?>

优点

  • 直接、原始。
  • 适用于非数据库查询的场景。

缺点

  • 不安全:直接用于 SQL 查询有极高的 SQL 注入风险,必须手动进行转义处理。

获取织梦栏目体系中的父栏目信息

这种情况通常用在当前页面(如列表页、内容页)需要知道它在栏目结构中的“上级”是谁。

方法 1:在列表页 (list.php / list.htm) 获取父栏目信息

列表页的父栏目信息通常存储在全局变量 $typelist$type 中。

示例场景: 在“新闻动态”列表页,想获取其父栏目“网站首页”的 ID 和名称。

代码实现

list.php 文件中,织梦已经获取了当前栏目的信息,并存储在 $type 数组里,父栏目的信息也在其中。

<?php
// 在 list.php 的循环查询之前,$type 变量已经包含了当前栏目的完整信息
// $type['reid'] 就是父栏目的 ID
// $type['topid'] 是顶级栏目的 ID
// $type['typename'] 是当前栏目的名称
if ($type['reid'] > 0) {
    // 获取父栏目信息
    $parent_type = $dsql->GetOne("SELECT id, typename FROM `#@_arctype` WHERE id = '{$type['reid']}'");
    if (is_array($parent_type)) {
        echo "父栏目ID: " . $parent_type['id'] . "<br>";
        echo "父栏目名称: " . $parent_type['typename'] . "<br>";
    }
} else {
    echo "当前栏目是顶级栏目,没有父栏目。";
}
?>

在模板文件 list.htm 中,可以直接使用 {dede:field.reid/}{dede:field.parentname/}(如果标签存在的话,或者通过PHP传递变量)。


方法 2:在内容页 (article_article.php / article.htm) 获取父栏目信息

页的父栏目信息可以通过文章的 typeid 反向查询得到。

示例场景: 在文章详情页,想获取该文章所在栏目的父栏目信息。

代码实现

article.php 中,文章信息已经获取,存储在 $arc 数组里。

<?php
// 在 article.php 中,$arc['typeid'] 存储了文章所属的栏目ID
$typeid = $arc['typeid'];
// 获取当前文章所在栏目的信息
$current_type = $dsql->GetOne("SELECT * FROM `#@_arctype` WHERE id = '$typeid'");
if (is_array($current_type) && $current_type['reid'] > 0) {
    // 获取父栏目信息
    $parent_type = $dsql->GetOne("SELECT id, typename FROM `#@_arctype` WHERE id = '{$current_type['reid']}'");
    if (is_array($parent_type)) {
        echo "文章所属栏目的父栏目ID: " . $parent_type['id'] . "<br>";
        echo "文章所属栏目的父栏目名称: " . $parent_type['typename'] . "<br>";
    }
}
?>

在模板文件 article.htm 中,可以通过 {dede:field.typeid/} 获取当前栏目ID,然后通过自定义标签或PHP代码来获取父栏目信息。


总结与最佳实践

需求场景 推荐方法 代码示例 注意事项
获取 URL 参数 (如 ?tid=1) $dsql->GetOne() $typename = $dsql->GetOne("SELECT ... WHERE id = '{$_GET['tid']}'"); 首选方法,安全可靠,自动防SQL注入。
获取 URL 参数 (仅显示用) $_GET $keyword = isset($_GET['keyword']) ? $_GET['keyword'] : ''; 仅用于非数据库查询,如显示、JS变量等。
获取父栏目信息 (列表页) $type['reid'] $parent_id = $type['reid']; list.php 中,$type 变量已存在,直接取用即可。
获取父栏目信息 (内容页) 通过 $arc['typeid'] 反查 $current_type = $dsql->GetOne("... WHERE id = '{$arc['typeid']}'"); 需要先获取当前栏目信息,再通过 reid 获取父栏目。

核心要点

  1. 安全第一:任何来自用户输入的数据(尤其是 $_GET, $_POST)都不能直接拼接到 SQL 语句中,优先使用 $dsql 提供的安全方法。
  2. 区分场景:清楚你要获取的是“浏览器URL参数”还是“织梦栏目树中的父级关系”,选择对应的方法。
  3. 善用全局变量:织梦在加载页面时会初始化很多有用的全局变量(如 $type, $arc),熟悉它们可以让你事半功倍。
-- 展开阅读全文 --
头像
dede likearticle分页怎么实现?
« 上一篇 2025-12-12
大气的织梦后台dedecms模板如何获取?
下一篇 » 2025-12-12

相关文章

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

目录[+]