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

下面我将详细说明在织梦CMS中获取参数的各种方法和具体场景。
核心方法:使用 $get 全局变量
织梦CMS在处理PHP模板时,会自动将 $_GET 和 $_POST 请求中的参数封装到一个全局数组 $get 中。这是在织梦模板和PHP文件中获取参数最主要、最安全的方式。
为什么推荐使用 $get 而不是直接使用 $_GET?
- 安全性:织梦对
$get中的值进行了初步的过滤和转义,可以有效防止一部分XSS攻击。 - 兼容性:这是织梦官方推荐的方式,能更好地适应未来版本的升级。
在列表页/频道页获取并筛选参数
这是最常见的用法,例如一个文章列表页,通过URL传递分类ID、关键字等参数来筛选内容。

URL示例:
/plus/list.php?tid=2&keyword=织梦CMS
目标: 在 plus/list.php 对应的模板文件(通常是 templets/default/list_栏目ID.htm,list_2.htm)中,获取 tid 和 keyword 的值,并用于显示和查询。
在模板文件(如 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)中的用法:

如果你需要修改 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 中获取 from 和 uid。
在模板文件(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 中获取 diyid 和 dopost。
在PHP文件(plus/diy.php)中的用法:
<?php
require_once(dirname(__FILE__)."/../include/config_base.php");
// 获取操作类型
$dopost = $get['dopost'];
// 获取表单ID
$diyid = $get['diyid'];
if ($dopost == 'sendsave') {
// 处理表单提交逻辑...
// ...
}
重要注意事项
-
安全第一:
- 永远不要直接将
$get或$_GET的值直接输出到HTML中,除非你使用了htmlspecialchars()函数进行转义,或者使用了织梦的{dede:global/}标签(它内部做了处理)。 - 对于用于数据库查询的数字ID类参数,一定要使用
intval()函数强制转换为整数,防止SQL注入。$id = isset($get['id']) ? intval($get['id']) : 0;
- 永远不要直接将
-
URL重写的影响:
- 当你开启了织梦的“伪静态”(URL重写)功能后,参数会以
/值/的形式出现在URL中,而不是?参数名=值。 /a/2-1.html中的2可能是栏目ID,1是页码。- 在这种情况下,织梦的底层类(如
ArcView.class.php)会自动解析这些伪静态路径,并将解析后的值赋给$get数组,你仍然可以使用$get['tid']来获取,前提是你的伪静态规则配置正确。
- 当你开启了织梦的“伪静态”(URL重写)功能后,参数会以
-
作用域:
$get全局变量主要在织梦的 模板解析阶段 和 核心PHP文件 中有效。- 如果你创建了一个全新的、独立的PHP文件(不包含在织梦的核心流程中),你需要手动引入织梦的核心文件才能使用
$get,在你的文件开头加上require_once(dirname(__FILE__)."/../include/config_base.php");。
| 场景 | 获取方式 | 示例 |
|---|---|---|
| 通用/推荐 | 使用 $get 全局数组 |
$keyword = $get['keyword']; |
| 模板中直接输出 | 使用 {dede:global}
| |
| PHP文件中获取 | 使用 $get 全局数组 |
$typeid = intval($get['tid']); |
| 数据库查询 | 使用 $get 并进行安全处理 |
$sql = "SELECT * FROMdede_archivesWHERE typeid = {$typeid}"; |
织梦CMS完全可以获取到URL参数,并且主要通过 $get 这个全局变量来实现,掌握这个用法,能让你在二次开发和功能定制时更加得心应手。
