在drupal 8中添加元标记

时间:2016-03-10 10:25:01

标签: drupal-8

我刚刚参加了drupal 8并希望将meta标签添加到我的drupal 8网站。

我做到了这一点:

  1. 在我的THEME.theme文件中添加了以下代码

    /**
     * Implements hook_page_attachments_alter().
     *
     * Include meta tags and fonts using attachment method.
     */
    function bartik_page_attachments_alter(array &$page) {
     // echo "<pre>"; echo "BEFORE"; print_r($page);
      // Include fonts.
      $font_attributes = array(
        'rel' => 'stylesheet',
        'type' => 'text/css',
        'href' => 'https://fonts.googleapis.com/css?family=Lato:400,100,100italic,300,300italic,400italic,700',
      );
    
      $page['#attached']['html_head_link'][] = array($font_attributes);
    
      // Set up meta tags.
      // Modern IE & chrome-frame rendering engine tag.
      $rendering_meta = array(
        '#type' => 'html_tag',
        '#tag' => 'meta',
        '#attributes' => array(
          'name' => 'SKYPE_TOOLBAR',
          'content' => 'SKYPE_TOOLBAR_PARSER_COMPATIBLE',
        ),
      );
      $page['#attached']['html_head'][] = [$rendering_meta, 'rendering_meta'];
     //echo "<pre>"; echo "AFTER"; print_r($page);
    }
    
    1. 清除了cashe。
  2. 此代码只附加登录页面的元标记,即在我的情况下是:

    mysite.com/user/login
    

    我做错了什么?我应该怎么做才能将它附加到整个网站

4 个答案:

答案 0 :(得分:9)

我将meta标签添加到头部的做法是:

function theme_preprocess_html(&$variables) {

  $xuacompatible = [
    '#tag' => 'meta',
    '#attributes' => [
      'http-equiv' => 'x-ua-compatible',
      'content' => 'ie=edge',
    ],
  ];


  $variables['page']['#attached']['html_head'][] = [$xuacompatible, 'x-ua-compatible'];
}; 

导致

<meta http-equiv="x-ua-compatible" content="ie=edge">

也许不是最好的解决方案,但它有效:)

祝你好运

答案 1 :(得分:7)

以下代码可供我使用基本页面内容类型的自定义字段覆盖元标题和说明:

/**
 * Implements hook_preprocess_html() for html templates.
 */
function theme_preprocess_html(&$variables)
{
    // Add META tag title + description from back-office node basic page field
    $node = \Drupal::routeMatch()->getParameter('node');// Load the node entity from current route
    if ($node) {
        if ($node->getType() === 'page') {// Check if node type is basic page
            $title = [
                '#tag' => 'meta',
                '#attributes' => [
                    'name' => 'title',
                    'content' => $node->get('field_custom_meta_title')->value,
                ],
            ];
            $description = [
                '#tag' => 'meta',
                '#attributes' => [
                    'name' => 'description',
                    'content' => $node->get('field_custom_meta_description')->value,
                ],
            ];
            $variables['page']['#attached']['html_head'][] = [$title, 'title'];
            $variables['page']['#attached']['html_head'][] = [$description, 'description'];
        }
    }
}

快乐的编码!

答案 2 :(得分:0)

也许试试这个模块https://www.drupal.org/project/metatag 或创建预处理功能?

答案 3 :(得分:0)

我想对Antoine的答案做一个小小的改动,因为标题metatag不会像他描述的那样起作用。需要更改数组以允许&lt; title&gt;命名惯例。以下是我在自定义模块中使用它的示例:

function meta_manager_preprocess_html(&$variables) {
    $node = \Drupal::routeMatch()->getParameter('node');

    if ($node) {        // Make sure we are in a node
        $title = [
          '#tag' => 'title',            // Set title for element
          '#value' => 'Sample Title'    // Set value for title
        ];
        $description = [
          '#tag' => 'meta',             // Set meta for element
          '#attributes' => [            // Set attributes for meta
            'name' => 'description',
            'content' => 'Sample Description',
          ],
        ];
        $variables['page']['#attached']['html_head'][] = [$title, 'title'];
        $variables['page']['#attached']['html_head'][] = [$description, 'description'];
    }
}

注意:另请注意,默认情况下会有&lt; title&gt;在html.html.twig文件中标记,因此如果你这样做,那么你可能想要将其注释掉或先删除它。

我也正在研究这个模块,在每个页面上实现自定义元标记信息,以便进行更多自定义,但这适用于通用应用程序。或者,您可以使用Antoine使用的示例,将自定义字段添加到其内容类型中。