织梦CMS如何获取参数?

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

当然可以,织梦CMS(DedeCMS)非常灵活,获取URL参数是其核心功能之一,主要用于列表页、搜索页、表单提交等场景。

织梦cms 能否get到参数
(图片来源网络,侵删)

下面我将详细说明在织梦CMS中获取参数的各种方法和具体场景。

核心方法:使用 $get 全局变量

织梦CMS在处理PHP模板时,会自动将 $_GET$_POST 请求中的参数封装到一个全局数组 $get 中。这是在织梦模板和PHP文件中获取参数最主要、最安全的方式。

为什么推荐使用 $get 而不是直接使用 $_GET

  • 安全性:织梦对 $get 中的值进行了初步的过滤和转义,可以有效防止一部分XSS攻击。
  • 兼容性:这是织梦官方推荐的方式,能更好地适应未来版本的升级。

在列表页/频道页获取并筛选参数

这是最常见的用法,例如一个文章列表页,通过URL传递分类ID、关键字等参数来筛选内容。

织梦cms 能否get到参数
(图片来源网络,侵删)

URL示例: /plus/list.php?tid=2&keyword=织梦CMS

目标:plus/list.php 对应的模板文件(通常是 templets/default/list_栏目ID.htmlist_2.htm)中,获取 tidkeyword 的值,并用于显示和查询。

在模板文件(如 list_2.htm)中的用法:

{dede:global name='keyword'/}  <!-- 直接输出keyword参数值,用于显示在页面上 -->
<!-- 使用PHP标签进行更复杂的逻辑判断 -->
{dede:php}
    // 获取keyword参数
    $keyword = $get['keyword'];
    // 判断参数是否存在
    if (!empty($keyword)) {
        echo "您正在搜索与 <strong>" . htmlspecialchars($keyword) . "</strong> 相关的内容。";
    } else {
        echo "这是栏目ID为 " . $get['tid'] . " 的文章列表。";
    }
    // 获取其他参数
    $typeid = $get['tid'];
    echo "当前栏目ID是:" . $typeid;
{/dede:php}

在PHP文件(如 plus/list.php)中的用法:

织梦cms 能否get到参数
(图片来源网络,侵删)

如果你需要修改 list.php 的核心逻辑来处理参数,可以直接在这个文件中操作。

<?php
require_once(dirname(__FILE__)."/../include/config_base.php");
// 获取参数
$tid = isset($get['tid']) ? intval($get['tid']) : 0; // 强制转为整数,更安全
$keyword = isset($get['keyword']) ? $get['keyword'] : '';
// 使用参数进行数据库查询
if (!empty($tid)) {
    // 调用系统函数获取栏目信息
    $typeinfo = GetOneType($tid);
    $typeid = $typeinfo['id'];
    $typename = $typeinfo['typename'];
    $seo_title = $typeinfo['typename'].'_'.$cfg_webname;
}
// ... 后续的列表查询逻辑会自动使用这些全局变量 ...
require_once(DEDEINC."/arc.listview.class.php");
$arclist = new ListView();
// ...

页获取参数

你可能希望从文章内容页跳转过来时带上一些参数,比如来源页面、推广ID等。

URL示例: /a/1.html?from=bbs&uid=100

目标: 在文章内容页模板 article_article.htm 中获取 fromuid

在模板文件(article_article.htm)中的用法:

{dede:php}
    $from_page = $get['from'];
    $user_id = $get['uid'];
    if ($from_page == 'bbs') {
        echo "您是从论坛过来的,用户ID是:" . $user_id;
    }
{/dede:php}

在搜索页获取参数

搜索页的参数处理与列表页类似,但织梦通常有专门的搜索处理文件 plus/search.php

URL示例: /plus/search.php?keyword=织梦&searchtype=title

目标: 在搜索结果页模板 default/search.htm 中获取参数。

在模板文件(default/search.htm)中的用法:

<div class="search-box">
    <form action="/plus/search.php" method="get">
        <input type="text" name="keyword" value="{dede:global.name='keyword'/}" placeholder="请输入关键字">
        <select name="searchtype">
            <option value="title" {dede:global.name='searchtype' function='IsSelect(@me, "title")'/}>标题</option>
            <option value="body" {dede:global.name='searchtype' function='IsSelect(@me, "body")'/}>内容</option>
        </select>
        <button type="submit">搜索</button>
    </form>
</div>
<!-- 显示搜索结果 -->
{dede:loop table='dede_archives' sort='pubdate' row='10' if='title like "%织梦%"'}
    <a href="[field:arcurl/]">[field:title/]</a>
    <br>
{/dede:loop}

注意:上面的 {dede:loop} 只是一个示例,实际搜索功能应该使用织梦自带的搜索标签 {dede:global name='keyword' function='RemoveXSS(@me)'/}{dede:list} 配合 $get 变量来实现。


在自定义表单提交后获取参数

当用户提交一个自定义表单时,URL可能会包含 dopost 参数来标识操作类型。

URL示例: /plus/diy.php?action=post&diyid=1&dopost=sendsave

目标:plus/diy.php 中获取 diyiddopost

在PHP文件(plus/diy.php)中的用法:

<?php
require_once(dirname(__FILE__)."/../include/config_base.php");
// 获取操作类型
$dopost = $get['dopost'];
// 获取表单ID
$diyid = $get['diyid'];
if ($dopost == 'sendsave') {
    // 处理表单提交逻辑...
    // ...
}

重要注意事项

  1. 安全第一

    • 永远不要直接将 $get$_GET 的值直接输出到HTML中,除非你使用了 htmlspecialchars() 函数进行转义,或者使用了织梦的 {dede:global/} 标签(它内部做了处理)。
    • 对于用于数据库查询的数字ID类参数,一定要使用 intval() 函数强制转换为整数,防止SQL注入。$id = isset($get['id']) ? intval($get['id']) : 0;
  2. URL重写的影响

    • 当你开启了织梦的“伪静态”(URL重写)功能后,参数会以 /值/ 的形式出现在URL中,而不是 ?参数名=值
    • /a/2-1.html 中的 2 可能是栏目ID,1 是页码。
    • 在这种情况下,织梦的底层类(如 ArcView.class.php)会自动解析这些伪静态路径,并将解析后的值赋给 $get 数组,你仍然可以使用 $get['tid'] 来获取,前提是你的伪静态规则配置正确。
  3. 作用域

    • $get 全局变量主要在织梦的 模板解析阶段核心PHP文件 中有效。
    • 如果你创建了一个全新的、独立的PHP文件(不包含在织梦的核心流程中),你需要手动引入织梦的核心文件才能使用 $get,在你的文件开头加上 require_once(dirname(__FILE__)."/../include/config_base.php");
场景 获取方式 示例
通用/推荐 使用 $get 全局数组 $keyword = $get['keyword'];
模板中直接输出 使用 {dede:global} {dede:global name='keyword'/}
PHP文件中获取 使用 $get 全局数组 $typeid = intval($get['tid']);
数据库查询 使用 $get 并进行安全处理 $sql = "SELECT * FROMdede_archivesWHERE typeid = {$typeid}";

织梦CMS完全可以获取到URL参数,并且主要通过 $get 这个全局变量来实现,掌握这个用法,能让你在二次开发和功能定制时更加得心应手。

-- 展开阅读全文 --
头像
织梦body内如何调用相关标题?
« 上一篇 2025-12-21
Win2008织梦权限如何正确设置?
下一篇 » 2025-12-21

相关文章

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

目录[+]