Как использовать крючок предварительного сохранения для сохранения значения поля в качестве заголовка узла?
У меня есть настраиваемое поле даты в узле типа "день". Когда узел будет сохранен (или отредактирован, а затем сохранен), я хотел бы получить значение field_date (не дату публикации) и сохранить его в поле заголовка.
Я хотел бы знать, как, возможно, с помощью модуля:
Сохранение крюка
ПОЛУЧИТЬ ЗНАЧЕНИЕ ПОЛЯ
УСТАНОВИТЕ ЗАГОЛОВОК В КАЧЕСТВЕ ЗНАЧЕНИЯ ПОЛЯ
СОХРАНИТЬ УЗЕЛ
5 answers
Вам необходимо реализовать сохранение hook_entity_presave()
/**
* Implements hook_entity_presave().
*/
function YOUR_MODULE_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {
switch ($entity->bundle()) {
// Here you modify only your day content type
case 'day':
// Setting the title with the value of field_date.
$entity->setTitle($entity->get('field_date')->value);
break;
}
}
Для сущности типа пользователь
/**
* Implements hook_entity_presave().
*/
function YOUR_MODULE_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {
$entity->field_uhid->value = 'testing'; //set value for field
}
Для сущности типа профиль я использовал приведенный ниже код
/**
* Implements hook_entity_presave().
*/
function YOUR_MODULE_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {
if ($entity->getEntityType()->id() == 'profile') {
$zipcode = $entity->field_zip_code->value;
$url = "http://maps.googleapis.com/maps/api/geocode/json?address=".$zipcode."&sensor=false";
$details=file_get_contents($url);
$result = json_decode($details,true);
$lat=$result['results'][0]['geometry']['location']['lat'];
$lng=$result['results'][0]['geometry']['location']['lng'];
$entity->field_geolocation->lat = $lat;
$entity->field_geolocation->lng = $lng;
}
}
Это помогло мне получить и установить значение поля даты с помощью крючка предварительного сохранения на основе типа контента
/**
* Implements hook_entity_presave().
*/
function YOUR_MODULE_global_entity_presave(Drupal\Core\Entity\EntityInterface $entity)
{
if ($entity->bundle() == 'blog') {
$published = $entity->get('created')->value;
$entity->set('field_published_date', date('Y-m-d\TH:i:s', $published));
}
}
Вы можете изменить и сохранить заголовок в любом доступном поле, используя автоматическую метку сущности https://www.drupal.org/project/auto_entitylabel