使用全局变量 {dede:global name='filename'/} (最推荐)
这是 DedeCMS 官方提供的最直接、最简单的方法,专门用于获取当前页面的文件名(不含后缀)。
语法:
{dede:global name='filename'/}
特点:
- 简单高效:直接调用,无需复杂逻辑。
- 结果准确:返回的是当前模板文件的主文件名,如果文件是
article_article.htm,它将返回article_article。 - 适用范围广:可以在任何模板文件中使用。
示例场景: 假设您想在文章详情页的面包屑中显示“文章详情”,而不是固定的文字。
面包屑代码示例:
<div class="breadcrumb">
<a href="{dede:global.cfg_cmsurl/}/">首页</a> >
<a href="{dede:type typeid='1'}[field:typelink/]{/dede:type}">栏目名称</a> >
文章详情
</div>
使用 filename 变量后,可以动态替换“文章详情”:
<div class="breadcrumb">
<a href="{dede:global.cfg_cmsurl/}/">首页</a> >
<a href="{dede:type typeid='1'}[field:typelink/]{/dede:type}">栏目名称</a> >
{dede:global name='filename'/}
</div>
注意:这种方法获取的是模板文件名,而不是文章标题,如果您的意图是获取文章的标题,应该使用 [field:title/]。
使用PHP代码 {dede:geturl runphp='yes'} (最灵活)
当您需要更复杂的处理,比如获取带后缀的文件名,或者对文件名进行修改时,可以在模板中嵌入 PHP 代码。
语法:
{dede:geturl runphp='yes'}
$filename = basename($dtp->GetSourceResult(), '.htm');
// 如果需要带后缀,使用下面这行
// $filename = basename($dtp->GetSourceResult());
@me = $filename;
{/dede:geturl}
代码解析:
{dede:geturl runphp='yes'}:开启 PHP 执行模式。$dtp->GetSourceResult():获取当前页面的完整路径。basename():从路径中提取文件名。/templets/default/article_article.htm会得到article_article.htm。', '.htm:basename的第二个参数是文件后缀,将其移除,只得到主文件名article_article。@me = $filename;:将处理后的结果赋值给@me变量,@me是 DedeCMS 模板中 PHP 代码块的输出变量。
示例场景: 您想获取文件名,并将其转换为大写,并加上“_PAGE”后缀。
{dede:geturl runphp='yes'}
$filename = basename($dtp->GetSourceResult(), '.htm');
@me = strtoupper($filename) . '_PAGE';
{/dede:geturl}
如果当前文件是 article_article.htm,输出结果将是 ARTICLE_ARTICLE_PAGE。
通过JS获取当前URL并解析 (前端方法)
这种方法完全在浏览器端执行,不依赖 DedeCMS 的模板引擎,它获取的是浏览器地址栏里的 URL,而不是服务器上的模板文件名。
适用场景:
- 当您需要在 JavaScript 代码中获取当前页面的文件名时。
- 或者想验证一下 URL 中的文件名。
代码示例:
在您的模板文件中 <head> 或 <body> 标签内加入以下 script:
<script>
// 获取当前页面的完整URL
var currentUrl = window.location.href;
// 创建一个临时的 <a> 标签来解析路径
var a = document.createElement('a');
a.href = currentUrl;
// 获取文件名(带后缀)
var filenameWithExt = a.pathname.split('/').pop();
// 获取文件名(不带后缀)
var filename = filenameWithExt.split('.')[0];
// 在控制台打印出来,方便查看
console.log("完整URL: " + currentUrl);
console.log("带后缀的文件名: " + filenameWithExt);
console.log("不带后缀的文件名: " + filename);
// 您可以将 filename 变量用于其他JS逻辑
</script>
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
{dede:global name='filename'/} |
最简单、最官方、性能最好 | 功能单一,只能获取不带后缀的模板文件名 | 绝大多数场景,如动态面包屑、页面标题等。 |
{dede:geturl runphp='yes'} |
最灵活,可以进行任何PHP字符串处理 | 代码稍复杂,对新手不友好 | 需要对文件名进行复杂处理(如拼接、大小写转换等)。 |
| JS方法 | 完全在前端,不受模板限制 | 获取的是浏览器URL,可能和服务器文件名不一致(如URL重写) | 需要在JavaScript中获取URL信息,或进行前端交互。 |
对于绝大多数 DedeCMS 用户,强烈推荐使用第一种方法 {dede:global name='filename'/},它简洁、高效且是官方支持的,能满足大部分调用文件名的需求。
如果您需要更高级的定制,再考虑使用第二种 PHP 方法,第三种 JS 方法则主要用于前端特定的逻辑。
