Hướng dẫn thêm HTML tags vào trong <head> in Drupal 8

Hướng dẫn thêm HTML tags vào trong <head> in Drupal 8

Drupal 8 project

In a previous article I've shown you how you can add new html elements to the <head> of your Drupal 7 site. Recently, however, I was working on a Drupal 8 project and encountered the need to do this in D8. And it took me a while to figure it out so I thought I'd share the process with you.

>> Sử dụng parallel processing để tiết kiệm time importing databases

>> Hướng dẫn nâng cấp Frontend Toolset với Grunt và LibSass

As you know, in Drupal 7 we use drupal_add_html_head() from anywhere in the code to add a rendered element into the <head>. This is done by passing a render array and most of the time you'll use the type #tag. In Drupal 8, however, we no longer have this procedural function so it can be a bit tricky to find out how this is done.

Although existing in Drupal 7 as well, the #attached key in render arrays really becomes important in D8. We can no longer add any scripts or stylesheets to any page without such proper attachment to render arrays. In my last article I've shown you how to add core scripts to pages in case they were missing (which can happen for anonymous users). In essence, it is all about libraries now that get attached to render arrays. So that is most of what you'll hear about.

But libraries are not the only thing you can attach to render arrays. You can also add elements to the head of the page in a similar way you'd attach libraries. So if we wanted to add a description meta tag to all of the pages on our site, we could implement hook_page_attachments() like so:

/**
 * Implements hook_page_attachments().
 */
function module_name_page_attachments(array &$page) {
  $description = [
    '#tag' => 'meta',
    '#attributes' => [
      'name' => 'description',
      'content' => 'This is my website.',
    ],
  ];
  $page['#attached']['html_head'][] = [$description, 'description'];
}

In the example above we are just adding a dummy description meta tag to all the pages. You probably won't want to apply that to all the pages though and rather have the content of the description tag read the title of the current node. In this case you can implement hook_entity_view() like so:

/**
 * Implements hook_entity_view().
 */
function demo_entity_view(array &$build, \Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display, $view_mode, $langcode) {
  if ($entity->getEntityTypeId() !== 'node') {
    return;
  }

  $description = [
    '#tag' => 'meta',
    '#attributes' => [
      'name' => 'description',
      'content' => \Drupal\Component\Utility\SafeMarkup::checkPlain($entity->title->value),
    ],
  ];
  $build['#attached']['html_head'][] = [$description, 'description'];
}

Now you targeting the node entities and using their titles as the content for the description meta tag. And that is pretty much it.

Hope this helps.

Bạn thấy bài viết này như thế nào?: 
No votes yet

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Cựu nhân viên Google trở thành tân CEO của Yahoo!
Cựu nhân viên Google trở thành tân CEO của Yahoo!

Theo tờ thời báo New York, lãnh đạo lâu năm của Google sẽ bắt đầu dẫn dắt Yahoo! vượt qua khó khăn sau một loạt các rắc rối liên quan đến vị trí CEO của công ty.

Giới thiệu bạn đọc Drupal 8  và Composer
Giới thiệu bạn đọc Drupal 8 và Composer

You will also notice in composer.json under the “require” section is where drupal/token and drupal/devel are added

Coi chừng mua nhầm phần mềm diệt vi rút Kaspersky giả
Coi chừng mua nhầm phần mềm diệt vi rút Kaspersky giả

Bán sản phẩm một cách bài bản, có cả đội hỗ trợ, thậm chí còn “tố” các đại lí bán phần mềm Kaspersky giả mạo, tuy nhiên cả 2 trang web www.kasperskyvietnam.com và www.kaspersky.net.vn, đều là mạo danh.