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

时间:2016-01-29 15:36:56

标签: symfony drupal drupal-8

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

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

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

2 个答案:

答案 0 :(得分:2)

<?php
namespace Drupal;
$node_v1 = \Drupal::request()->attributes->get('node');
$node_v2 = \Drupal::routeMatch()->getParameter('node')

?>

答案 1 :(得分:1)

构建数组中的

尝试使用当前nid的缓存标记

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