Drupal 8将当前nid传递给块模板

Posted

技术标签:

【中文标题】Drupal 8将当前nid传递给块模板【英文标题】:Drupal 8 passing current nid to block template 【发布时间】:2016-01-29 15:36:55 【问题描述】:

我创建了一个自定义模块,它使用自定义块来显示节点列表(在这种特殊情况下我不能使用 D8 视图)。 在 block twig 模板中,我需要在当前 nid(当前页面的节点 ID)上过滤此列表,并以这种方式将值传递给 twig:

$node = \Drupal::routeMatch()->getParameter('node');
$nid = $node->nid->value;
return array(
        'currentnid' => $nid,
    );

一切正常,但更改页面nid 传递给块模板仍然相同。我认为这与模板缓存有关:通过清除缓存并重新加载页面,我得到了当前页面的正确值,但移动到另一个页面我仍然得到相同的 nid! 我可以做些什么来防止 nid 值被缓存? 我认为最好的解决方案是直接在模板中获取当前的nid 值,但我在自定义块中,我不知道如何获取它。任何的想法?我已经检查了kint() 输出,并且当前页面nid 不存在于块模板级别。

【问题讨论】:

也许你应该问drupal.stackexchange.com 非常感谢@malcolm 我不知道那个网站,我一定会试试的。 【参考方案1】:
<?php
namespace Drupal;
$node_v1 = \Drupal::request()->attributes->get('node');
$node_v2 = \Drupal::routeMatch()->getParameter('node')

?>

【讨论】:

你可以使用这个【参考方案2】:

在你的构建数组中尝试使用你当前的 nid 缓存标签

return array(
    'currentnid' => $nid,
    '#cache' => [
        'tags' => ['node:'.$nid],
    ],
);

【讨论】:

以上是关于Drupal 8将当前nid传递给块模板的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 7 列出当前用户所属的有机组

将变量传递给 drupal 模板

可以将 NULL 传递给块参数吗?

Drupal 8添加javascript并使用自定义模块在钩子中传递数据

使用 nid 参数在 Drupal 视图中为每个节点加载 Ajax

如何在视图过滤器中使用标记 - Drupal 7