页 (article_article.htm)
这是最常见的情况,用户正在阅读一篇文章,你需要在文章详情页获取这篇文章自身的ID。

(图片来源网络,侵删)
方法1:使用全局变量 $arcid (最常用、最推荐)
页,系统会自动将当前文章的ID存储在一个名为 $arcid 的PHP全局变量中,你可以在模板文件中直接使用它。
使用方法:
直接在模板文件中写入 {$arcid} 即可。
示例:
假设你想在文章标题下方显示当前文章的ID,可以修改 article_article.htm 模板文件:
<h1>{dede:field.title/}</h1>
<p>文章ID是:<strong>{dede:global name='arcid'/}</strong></p>
{dede:field.body/}
代码解释:

(图片来源网络,侵删)
{dede:global name='arcid'/}:这是调用全局变量arcid的标准织梦标签语法。{$arcid}:在某些 newer 版本或特定配置下,也可以直接使用这种简写形式,但{dede:global name='arcid'/}兼容性最好。
方法2:使用 {dede:field.id/}
{dede:field} 标签用于获取当前文章的字段,id 字段就是文章的ID。
使用方法:
在模板文件中使用 {dede:field.id/}。
示例:
<h1>{dede:field.title/}</h1>
<p>文章ID也是:<strong>{dede:field.id/}</strong></p>
{dede:field.body/}
代码解释:
(图片来源网络,侵删)
{dede:field.id/}:直接调用文章数据表中的 id 字段,这种方法和方法1在文章内容页中的效果是完全一样的。
在列表页 (list_*.htm)
在列表页,情况会复杂一些,因为列表页会循环显示多篇文章,你不能直接获取一个固定的ID,而是需要在循环的每一次中,获取当前正在被处理的那篇文章的ID。
方法:在循环体内使用 {dede:field.id/}
在列表页的循环标签 {dede:list} 或 {dede:arclist} 内部,{dede:field.id/} 会指向当前循环文章的ID。
使用方法:
在 {dede:list} 循环标签内使用。
示例:
假设你想在列表页的文章标题后面显示对应的ID,可以修改 list_*.htm 模板文件:
<ul>
{dede:list pagesize='10'}
<li>
<a href="[field:link/]">[field:title]</a>
(ID: {dede:field.id/})
</li>
{/dede:list}
</ul>
<div class="dede_pages">
<ul>{dede:pagelist listitem="pre,next,end,option" listsize="5"/}</ul>
</div>
代码解释:
{dede:list ...}:这是一个循环标签,它会依次取出数据库中的文章。
{dede:field.id/}:在循环的每一次执行中,这个标签都会被替换成当前这篇文章的ID,如果循环到第3篇文章,它就会显示第3篇文章的ID。
在PHP代码中获取
如果你需要在自定义的PHP函数或文件中获取当前文章ID,你需要通过PHP代码来获取。
页的PHP文件中 (article.php)
在 article.php 这个PHP文件中,当前文章ID已经被解析并存储在 $arcid 变量中。
示例:
<?php
// 在 article.php 文件中
$currentArticleId = $arcid;
// 现在你可以在PHP代码中使用 $currentArticleId 这个变量了
echo "当前文章的ID是: " . $currentArticleId;
// 查询这篇相关的文章
$sql = "SELECT * FROM `dede_archives` WHERE id = $currentArticleId AND id != $currentArticleId LIMIT 5";
// ... 执行查询等操作
?>
在列表页的PHP文件中 (list.php)
在 list.php 中,情况更复杂,因为它处理的是一个列表,你需要先获取列表,然后在循环中获取每一项的ID。
示例:
<?php
// 在 list.php 文件中
require_once(dirname(__FILE__)."/../include/common.inc.php");
// 获取列表数据
$tid = (isset($typeid) && is_numeric($typeid)) ? $typeid : 0;
$dsql->SetQuery("SELECT id, title FROM `dede_archives` WHERE typeid = $tid ORDER BY id DESC");
$dsql->Execute();
while($row = $dsql->GetArray())
{
// $row['id'] 就是当前循环文章的ID
$currentArticleId = $row['id'];
echo "正在处理文章 ID: " . $currentArticleId . ",标题: " . $row['title'] . "<br>";
}
?>
总结与对比
场景
推荐标签/变量
说明
页
{dede:global name='arcid'/}
最推荐,直接调用系统全局变量,清晰明了。
页
{dede:field.id/}
同样有效,直接获取文章数据表的ID字段。
列表页
{dede:field.id/}
必须放在 {dede:list} 或 {dede:arclist} 循环标签内部使用。
PHP代码
$arcid
在 article.php 中直接使用。
PHP代码
$row['id']
在 list.php 的数据库循环中获取。
希望这个详细的解释能帮助你准确地在织梦CMS中获取当前文章的ID!
{dede:field} 标签用于获取当前文章的字段,id 字段就是文章的ID。
使用方法:
在模板文件中使用 {dede:field.id/}。
示例:
<h1>{dede:field.title/}</h1>
<p>文章ID也是:<strong>{dede:field.id/}</strong></p>
{dede:field.body/}
代码解释:

(图片来源网络,侵删)
{dede:field.id/}:直接调用文章数据表中的id字段,这种方法和方法1在文章内容页中的效果是完全一样的。
在列表页 (list_*.htm)
在列表页,情况会复杂一些,因为列表页会循环显示多篇文章,你不能直接获取一个固定的ID,而是需要在循环的每一次中,获取当前正在被处理的那篇文章的ID。
方法:在循环体内使用 {dede:field.id/}
在列表页的循环标签 {dede:list} 或 {dede:arclist} 内部,{dede:field.id/} 会指向当前循环文章的ID。
使用方法:
在 {dede:list} 循环标签内使用。
示例:
假设你想在列表页的文章标题后面显示对应的ID,可以修改 list_*.htm 模板文件:
<ul>
{dede:list pagesize='10'}
<li>
<a href="[field:link/]">[field:title]</a>
(ID: {dede:field.id/})
</li>
{/dede:list}
</ul>
<div class="dede_pages">
<ul>{dede:pagelist listitem="pre,next,end,option" listsize="5"/}</ul>
</div>
代码解释:
{dede:list ...}:这是一个循环标签,它会依次取出数据库中的文章。{dede:field.id/}:在循环的每一次执行中,这个标签都会被替换成当前这篇文章的ID,如果循环到第3篇文章,它就会显示第3篇文章的ID。
在PHP代码中获取
如果你需要在自定义的PHP函数或文件中获取当前文章ID,你需要通过PHP代码来获取。
页的PHP文件中 (article.php)
在 article.php 这个PHP文件中,当前文章ID已经被解析并存储在 $arcid 变量中。
示例:
<?php // 在 article.php 文件中 $currentArticleId = $arcid; // 现在你可以在PHP代码中使用 $currentArticleId 这个变量了 echo "当前文章的ID是: " . $currentArticleId; // 查询这篇相关的文章 $sql = "SELECT * FROM `dede_archives` WHERE id = $currentArticleId AND id != $currentArticleId LIMIT 5"; // ... 执行查询等操作 ?>
在列表页的PHP文件中 (list.php)
在 list.php 中,情况更复杂,因为它处理的是一个列表,你需要先获取列表,然后在循环中获取每一项的ID。
示例:
<?php
// 在 list.php 文件中
require_once(dirname(__FILE__)."/../include/common.inc.php");
// 获取列表数据
$tid = (isset($typeid) && is_numeric($typeid)) ? $typeid : 0;
$dsql->SetQuery("SELECT id, title FROM `dede_archives` WHERE typeid = $tid ORDER BY id DESC");
$dsql->Execute();
while($row = $dsql->GetArray())
{
// $row['id'] 就是当前循环文章的ID
$currentArticleId = $row['id'];
echo "正在处理文章 ID: " . $currentArticleId . ",标题: " . $row['title'] . "<br>";
}
?>
总结与对比
| 场景 | 推荐标签/变量 | 说明 |
|---|---|---|
| 页 | {dede:global name='arcid'/} |
最推荐,直接调用系统全局变量,清晰明了。 |
| 页 | {dede:field.id/} |
同样有效,直接获取文章数据表的ID字段。 |
| 列表页 | {dede:field.id/} |
必须放在 {dede:list} 或 {dede:arclist} 循环标签内部使用。 |
| PHP代码 | $arcid |
在 article.php 中直接使用。 |
| PHP代码 | $row['id'] |
在 list.php 的数据库循环中获取。 |
希望这个详细的解释能帮助你准确地在织梦CMS中获取当前文章的ID!
