В Drupal 8, как вы добавляете атрибуты к ссылке, сгенерированной полем основной ссылки? (или, как правило, массив визуализации с типом #, установленным в "ссылка")


Итак, у меня есть ситуация, когда у меня есть поле основной ссылки на узле. Я хотел оформить эту ссылку с помощью пользовательских атрибутов, поэтому я создал переопределение field.html.twig для этого, только чтобы обнаружить, что сама ссылка напечатана в другом месте. Похоже, что для ссылки не существует шаблона или темы; учитывая, что основная функция отладки Twig не сообщает о вызове дочернего шаблона.

Я попытался вытащить URL-адрес напрямую и отобразить свою собственную ссылку, но это класс (Drupal\Core\Url) отсутствует в белом списке веток, поэтому вывод URL-адреса просто вызовет WSOD. Похоже, что нет объекта атрибутов, в который я мог бы что-то добавить.

Я мог бы использовать theme_preprocess_field для прямого вызова Drupal\Core\Url->toString() и сохранить его в другой переменной, но я бы выбросил все атрибуты, созданные по умолчанию. Я бы предпочел принять участие в том, как Drupal напрямую отображает эту ссылку; или, если она не расширяема, по крайней мере, знаю, как повторяйте то, что делает ядро.

(Для записи решение, рекомендованное в другом вопросе об использовании поля theme_preprocess_ для записи атрибутов в #параметры, похоже, не работает.)

РЕДАКТИРОВАТЬ: Как и было запрошено, вот код, который я использовал для крючка предварительной обработки для добавления атрибутов:

function MYTHEME_preprocess_field(&$variables) {
    $element = $variables['element'];
    if ($element['#name'] == 'field_extra_links') {
        $variables['items'][0]['content']['#options']['attributes']['class'][] = 'Button';
    }
}
Author: Libertardian, 2016-03-07

1 answers

Отвечая на мой собственный вопрос: первоначальное предложение на самом деле было правильным решением; то, как я настроил свою тему, означало, что крючок не загружался. Глупые ошибки!

 0
Author: Libertardian, 2016-03-11 17:19:02