Здравствуйте,
есть такая дилемма, выводить в метатег Description значение в зависимости от значения поля.
Есть поле Description, если оно заполнено - то выводить это значение. А если оно пустое, то выводить краткое содержание из текста.
Сейчас у меня в модуле Metatag вот такое значение стоит: [node:field_descript:value][node:summary]
Но это неправильно. Если поле постое. то все ок. А если заполнено, то идет сначала значение Поля а потом к нему еще и суммируется node:summary.
Как сделать правильно?
Может через хук?:
function bartik_page_attachments_alter(array &$page) {
$description = array(
'#type' => 'html_tag',
'#tag' => 'meta',
'#attributes' => array(
'name' => 'description',
'content' => 'your description content',
),
);
$page['#attached']['html_head'][] = [$description, 'description'];
}
Но я так подозреваю, внутри хука не будет информации о field_descript и node:summary...
Прошу помочь.
Комментарии
Во-первых, почему бы просто не удалить токен [node:summary], если он не нужен?
Во-вторых, почему бы не использовать hook_metatags_alter?
1. [node:summary] нужен, т.к. поле field_desript не везде заполнен, вернее заполнен в менее чем 15% документов. Везде его заполнить адский ручной труд, нод на сайте более 10 тыс. Поэтому там где это поле пустое, просто тупо выводиться [node:summary]
2. А как? Как получить данные [node:summary] и [node:field_descript:value] в нем?
Там же по ссылке серым по белому написано, что в переменной контекст есть ключ entity, в котором находится сущность.
Да, это я прочитал, но как мне обратиться к этой сущности?
PS: наверное это немного туповатый вопрос, я просто не знаю как это сделать Может укажете хотя бы направление, где есть примеры такого обращения. Буду премного благодарен
Обращайтесь к ней на "вы" и по имени-отчеству Например так:
<?php
$summary = $context['entity']->body->summary;
?>
Благодарю!
Попробуем!
И еще вопрос:
Работает ли hook_metatags_alter из файла темы или только из своего модуля?
Обычно всё что hook_ 100% работает из модуля, а из темы не всегда
Всем большое спасибо! Очень помогли.
В общем получилось вот так, может кому еще поможет. Из темы не работает, только из модуля:
<?php
function youmodulename_metatags_alter(array &$metatags, array &$context) {
$entity = $context['entity'];
if (isset($entity->field_descript->value)) {
$metatags['description'] = $entity->field_descript->value;
}
}
?>
Здесь поле field_descript - это поле в которое вы вставляете текст для Description, если поле пустое то там просто в модуле метатег прописано [node:summary].