Drupal 9教程:https://www.specbee.com/blogs/programmatically-creating-block-in-drupal-9
官方教程:https://www.drupal.org/node/2101565
个人遇到两个坑:
1. Drupal 8不能再像Drupal 7那样通过arg获取参数了。下面是获取参数的一个例子:
$node = \Drupal::routeMatch()->getParameter('node');
if ($node)
$nid = $node->id();
2. Drupal 8会自动缓存很多东西,如果不声明缓存上下文,那么block的内容就相当于静态的。指定缓存的方法是给返回的元素增加以下属性:
'#cache' => array('contexts' => array('url')),
具体contexts的值参考:Cache Contexts文档
评论1
返回空数组,可以让block什么都不显示。但是…
返回空数组,可以让block什么都不显示。但是,还是要制定#cache属性,否则会被缓存下来,认为所有页面都是空。