6

如何在 Drupal 中构建一个能够显示该块当前所在的视图页面的节点 ID 的块?

我正在使用视图来构建我的网站的一大块,但我需要能够在 PHP 模式下制作“智能”块,这将根据视图显示的内容具有动态内容。

如何找到视图当前显示的 $nid?

4

6 回答 6

14

这是获取节点 ID 的更可靠的方法:

<?php
    // Check that the current URL is for a specific node:
    if(arg(0) == 'node' && is_numeric(arg(1))) {
        return arg(1); // Return the NID
    }
    else { // Whatever it is we're looking at, it's not a node
      return NULL; // Return an invalid NID
    }
?>

即使您的节点具有path和/或pathauto模块的自定义路径,此方法也有效。

仅供参考,如果您打开该path模块,Drupal 生成的默认 URL 在文档中称为“系统路径”。如果您确实打开了path模块,您可以设置在文档中称为“别名”的自定义路径。

由于我总是path打开模块,一开始让我感到困惑的一件事是该函数是否有可能arg返回别名的一部分而不是系统路径的一部分。

事实证明,该arg函数将始终返回系统路径,因为arg函数基于$_GET['q']...经过一番研究,似乎$_GET['q']总是返回系统路径。

如果要从实际页面请求中获取路径,则需要使用$_REQUEST['q']. 如果path启用了模块,$_REQUEST['q']则可能返回别名或系统路径。

于 2009-11-23T16:58:40.537 回答
7

对于解决方案,尤其是在路径中涉及视图参数的解决方案,department/%/list请参阅博客文章Node ID as View Argument from SEO-friendly URL Path

于 2010-11-18T06:18:12.487 回答
2

最后,这个片段完成了工作——它只是剥离了干净的URL并报告了最后一个参数。

<?php
    $refer= $_SERVER ['REQUEST_URI'];
    $nid = explode("/", $refer);
    $nid = $nid[3];
?>

鉴于评论回复,上述内容可能简化为,使用 Drupalarg()函数获取请求路径的一部分:

<?php
    $nid = arg(3);
?>
于 2009-11-04T18:20:59.343 回答
1

有几种方法可以解决这个问题:

  1. 您可以使用 Views 制作您的块,并通过参数传递 nid。

  2. $view您可以通过使用下面的代码访问对象来手动传入 nid 。它是一个数组$view->result。视图中的每一行都是该数组中的一个对象,每个对象的 nid 都在该对象中。因此,您可以对其运行 foreach 并轻松获取视图中所有行的所有 nid。

第一个选项要容易得多,所以如果这适合您的需要,我会选择它。

于 2009-11-03T18:14:58.817 回答
1

您应该考虑面板模块。这是一个非常大的模块,需要一些工作才能真正发挥它的潜力。所以考虑到这一点。

您可以使用它来设置包含多个视图/块的页面,这些视图/块可以放置在不同的区域。它使用一个称为上下文的概念,它可以是与您正在查看的内容相关的任何内容。您可以使用该上下文来确定正在查看哪个节点,不仅可以更改块,还可以更改布局。它也更干净一些,因为您可以将 PHP 代码从管理界面中移开。

在旁注中,它也是由意见作者撰写的。

于 2009-11-03T22:11:40.933 回答
0

Drupal 7 的新内容:获取节点 ID 的正确方法是使用函数 menu_get_object();

例子:

$node = menu_get_object();
$contentType = node_type_get_name($node);

Drupal 8 有另一种方法。看一下这个:

arg() 已弃用

于 2015-05-28T11:13:49.167 回答