如何在page.html.twig或node.html.twig中显示当前节点标题?


14

如果要在page.html.twig中显示当前节点标题(默认情况下似乎仅在node.html.twig中可用),则必须创建一个预处理函数,如下所示:

function theme_preprocess_page(&$variables, $hook) {
  // Set our page title so we can access it in page.html.twig
  if ($node = \Drupal::routeMatch()->getParameter('node')) {
    $variables['my_node_title'] = $node->title->value;
  }
}

然后,我必须覆盖page-title.html.twig,方法是将其复制到当前主题文件夹中并注释掉所有内容。

这似乎不是“正确的”。有没有更好的办法?

Answers:


21

由于有了,节点在页面模板中已经可用template_preprocess_page,因此不需要预处理功能。您可以使用以下命令输出标题:

{{ node.label }}

页面标题本身就是一个块,因此,如果不再需要它,只需将其从/ admin / structure / block区域中删除。无需将模板复制到您的主题或更改原始模板。


这似乎在首页上不起作用,node仅在上NULL。有没有办法获取任何页面标题,包括首页标题(即使使用标题替代)?
Florian Brucker

@FlorianBrucker是正确的-除非首页是节点,否则您将没有可用的节点变量。标题可能在中page['#title'],我不确定该标题是否包含VIews所做的任何替代(但可能)
Clive

@Clive不幸的是,这里page['#title']是一个空字符串page.html.twig
Florian Brucker

可惜,我认为这在过去的某个时候是正确的,显然现在不是。这个类似的问题可能会有所帮助
克莱夫(Clive)

@Clive,谢谢您的指导,但这也没有帮助我。我已经发布了有关此问题的问题
Florian Brucker

3

您可以将以下代码添加到node.html.twig主题模板文件夹的顶部:

{% if not page %}
  <h2{{ title_attributes }}>
    <a href="{{ url }}" rel="bookmark">{{ label }}</a>
  </h2>
{% endif %}

{% if page %}
  <h2{{ title_attributes }}>
    {{ label }}
  </h2>
{% endif %}

0

下面的代码用来完成您所显示的代码的Drupal 8代码。

function theme_preprocess_page(&$variables) {
  $request = \Drupal::request();
  $route_match = \Drupal::routeMatch();
  if ($route_match->getParameter('node')) {
    $page_title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());
    $variables['my_node_title'] = $page_title;
  }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.