织梦不用arclist如何调用文章id?

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

以下是几种常见且有效的方法,涵盖了从模板到PHP代码的各种情况。

织梦不用arclist 调用文章id
(图片来源网络,侵删)

在当前文章页面获取当前文章ID (最常用)

这是最常见的需求,比如在文章详情页 (article_article.htm) 想要获取当前正在浏览的文章的ID。

使用全局变量 $arcid

在织梦的模板文件中,可以直接使用一个预定义的全局变量 $arcid 来获取当前文章的ID,这个变量在文章内容页、文章列表页等页面都会被自动设置。

示例: 在文章详情页 (/templets/default/article_article.htm) 的任意位置,你可以这样使用:

<p>当前文章的ID是:{dede:global name='arcid'/}</p>

或者直接在PHP代码块中使用:

织梦不用arclist 调用文章id
(图片来源网络,侵删)
{dede:geturl runphp='yes'}
    @me = "当前文章的ID是:" . $arcid;
{/dede:geturl}

优点:

  • 最简单、最直接,无需任何额外的标签或查询。
  • 性能最好,因为是直接读取的内存变量。

适用场景:

  • 在文章详情页 (article_article.htm)。
  • 在文章列表页等与文章相关的页面,获取当前上下文的文章ID。

使用 {dede:field}

{dede:field} 标签用于获取当前文章的某个具体字段。id 就是其中一个字段。

示例: 在文章详情页 (article_article.htm) 中:

织梦不用arclist 调用文章id
(图片来源网络,侵删)
<p>当前文章的ID是:{dede:field.id/}</p>

或者,如果你想同时获取文章ID和标题:

<p>
    文章ID: {dede:field.id/}
    文章标题: {dede:field.title/}
</p>

优点:

  • 语义清晰,明确表示要获取“字段”。
  • 除了ID,还可以方便地获取 title, description, pubdate 等所有文章字段。

适用场景:

  • 在文章详情页,当你不仅需要ID,还需要其他文章信息时,非常方便。

在列表页或其他页面获取指定文章ID

如果你想在列表页 (list_article.htm) 或首页 (index.htm) 中,通过某种条件(比如标题、关键词)来查询并获取某篇文章的ID,这时就需要用到SQL查询。

使用 {dede:sql} 标签进行自定义查询

{dede:sql} 标签允许你在模板中直接执行SQL语句。

示例1:根据文章标题获取ID

假设你想获取标题为“织梦CMS教程”的文章的ID。

{dede:sql sql="SELECT id FROM dede_archives WHERE title='织梦CMS教程'"}
    <p>找到的文章ID是:[field:id/]</p>
{/dede:sql}

注意:

  • dede_archives 是织梦存储文章基本信息的核心表。
  • 中包含单引号 ,可能会导致SQL语法错误,需要进行转义处理,织梦通常有内置的函数来处理,但直接写死字符串时要注意。
  • 这种方法效率较低,不推荐在循环中频繁使用。

示例2:根据文章别名获取ID (更推荐)

使用文章别名比标题更稳定,因为别名是唯一的。

{dede:sql sql="SELECT id FROM dede_archives WHERE alias='dede-tutorial'"}
    <p>找到的文章ID是:[field:id/]</p>
{/dede:sql}

在PHP代码或文件中获取文章ID

如果你在织梦的PHP文件(如 include/extend.func.php 自定义函数,或者PHP页面模板)中需要获取文章ID,方法与模板中略有不同。

在当前文章页面 (article.php)

article.php 是处理文章详情页的PHP文件,你可以通过全局变量 $arcid 来获取。

// 在 article.php 或其包含的文件中
$article_id = $arcid;
// 现在你可以在PHP代码中使用 $article_id 这个变量
echo "当前文章的ID是: " . $article_id;

在列表页或其他页面

在其他页面,$arcid 可能不存在或不是你想要的值,这时你需要手动获取。

示例:在列表页 (list.php) 获取当前栏目下的文章ID

// 在 list.php 或其包含的文件中
// 假设你已经知道了当前栏目的ID ($typeid 变量已存在)
$channelid = 1; // 假设是文章模型ID,通常为1
$catid = $typeid; // 当前栏目ID
// 使用DedeCMS的数据库类进行查询
$dsql = new DedeSql(false);
$dsql->SetQuery("SELECT id FROM dede_archives WHERE channelid = $channelid AND typeid = $catid ORDER BY id DESC LIMIT 1");
$dsql->Execute('get_id');
if($row = $dsql->GetArray('get_id')) {
    $lastest_article_id = $row['id'];
    echo "最新一篇文章的ID是: " . $lastest_article_id;
}
$dsql->Close();

总结与对比

方法 适用场景 优点 缺点
{dede:global name='arcid'/} 当前文章详情页 最简单、性能最高 仅限当前页面,无法主动查询
{dede:field.id/} 当前文章详情页 语义清晰,可同时获取其他字段 仅限当前页面
{dede:sql} 在任意模板中根据条件查询 灵活,可以按任意条件查找 性能较差,不推荐循环使用,有SQL注入风险
PHP代码 $arcid 在PHP文件(如article.php)中 直接、高效 依赖于页面上下文,不通用
PHP代码 DedeSql 在PHP文件中需要复杂查询 功能强大,灵活 代码量稍多,需要了解数据库结构

核心建议:

  • 如果你在文章详情页 (article_article.htm) 想要当前文章的ID,请毫不犹豫地使用 {dede:global name='arcid'/}{dede:field.id/},这是最标准、最高效的方式。
  • 如果你需要在首页、列表页等地方根据标题、别名等条件去查找某篇文章的ID,才考虑使用 {dede:sql} 标签,但要尽量减少使用频率。
  • 如果你在编写PHP扩展或修改PHP文件,请使用全局变量 $arcidDedeSql 类进行查询。

-- 展开阅读全文 --
头像
dede datalist 查询的是哪个数据表?
« 上一篇 2025-12-06
dede plus ad js.php存在什么安全风险?
下一篇 » 2025-12-06

相关文章

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