Вы здесь

Как удалить <link rel="delete-form" href="..." /> и иже с ним из head в D8?

1

Привет всем!

Столкнулся с проблемой: как удалить эти глупые теги из head в восьмёрке. Ибо, как показал SEO замер на протяжении полугода в Яшке, это косвенно мешает продвижению сайта.

Я имею ввиду вот эти МЕТА теги:

<link rel="delete-form" href="/node/{id}/delete" />
<link rel="edit-form" href="/node/{id}/edit" />
<link rel="version-history" href="/node/{id}/revisions" />
<link rel="revision" href="/mypage" />

Роюсь в гугле и пробую вот так, по аналогии с добавлением тегов, в MYTHEME.theme файле:

function MYTHEME_page_attachments_alter(array &$page) {
  unset($page['#attached']['html_head_link']);
}

Или вот так:

function MYTHEME_html_head_alter(&$head_elements) {
  unset($head_elements['#attached']['html_head_link']);
}

Но ничего не происходит. ОК. Спросил на Drupal Answers — ничего толкового и рабочего (собственно, там всегда так по восьмёрке, не удивили). Через модули, типа Metatag это не решается (issue об этом завели только сегодня).

Да, есть большая ветка об этом, но там выложен патч для файлов ядра, где просто закомменчены строчки, которые эту ересь в head добавляют.. то есть не вариант вообще.

Как решить эту проблему?

Версия Drupal: 
8.x
Категория: 
Theming
Вопрос задан 10.03.2016 - 17:57

Ответы

1

Можно убрать их сразу из вывода контроллера.
<?php

/**
 * @file
 * Contains \Drupal\example\EventSubscriber\ExampleSubscriber.
 */

namespace Drupal\example\EventSubscriber;

use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;

/**
 * Example event subscriber.
 */
class ExampleSubscriber implements EventSubscriberInterface {

  /**
   * Removes node link tags from controller result.
   */
  public function onKernelView(GetResponseForControllerResultEvent $event) {
    $controller_result = $event->getControllerResult();

    if (isset($controller_result['#entity_type']) && $controller_result['#entity_type'] == 'node') {
      unset($controller_result['#attached']['html_head_link']);
      $event->setControllerResult($controller_result);
    }

  }

  /**
   * {@inheritdoc}
   */
  static function getSubscribedEvents() {
    return [KernelEvents::VIEW => ['onKernelView', 10]];
  }

}
Ответ дан 10.03.2016 - 23:21
Аватар пользователя Chi
Chi
68

Можно то можно, но не совсем понятно почему в модуле taxonomy линки добавляются в hook_page_attachments_alter() и соответственно через него и убираются, а в node в контроллере (NodeViewController), в модуле ядра book - через препроцесс.

Комментарий оставлен 10.03.2016 - 23:33

Разные люди в разное время писали. Создай issue на орге.

Комментарий оставлен 11.03.2016 - 00:02

То есть, я так понимаю, кроме как через свой модуль или вырезание из контроллера — это не решается? Ну то есть, через MYTHEME.theme не пройдут манипуляции с разными хуками?

Комментарий оставлен 12.03.2016 - 10:24

В данном случае только модуль.

Комментарий оставлен 12.03.2016 - 18:50