Как использовать крючок предварительного сохранения для сохранения значения поля в качестве заголовка узла?


У меня есть настраиваемое поле даты в узле типа "день". Когда узел будет сохранен (или отредактирован, а затем сохранен), я хотел бы получить значение field_date (не дату публикации) и сохранить его в поле заголовка.

Я хотел бы знать, как, возможно, с помощью модуля:

Сохранение крюка

  • ПОЛУЧИТЬ ЗНАЧЕНИЕ ПОЛЯ

  • УСТАНОВИТЕ ЗАГОЛОВОК В КАЧЕСТВЕ ЗНАЧЕНИЯ ПОЛЯ

  • СОХРАНИТЬ УЗЕЛ

Author: Adrian Cid Almaguer, 2016-03-12

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;
  }
}
 18
Author: Adrian Cid Almaguer, 2017-11-26 20:33:05

Для сущности типа пользователь

/**
 * Implements hook_entity_presave().
 */
function YOUR_MODULE_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {
  $entity->field_uhid->value = 'testing';     //set value for field
}
 3
Author: nehapandya, 2017-02-17 05:37:26

Для сущности типа профиль я использовал приведенный ниже код

/**
 * 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;
 }
}
 3
Author: nehapandya, 2017-02-20 13:27:02

Это помогло мне получить и установить значение поля даты с помощью крючка предварительного сохранения на основе типа контента

/**
 * 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));
 }
}
 0
Author: santhosh, 2020-05-29 16:59:01

Вы можете изменить и сохранить заголовок в любом доступном поле, используя автоматическую метку сущности https://www.drupal.org/project/auto_entitylabel

 0
Author: paulcap1, 2020-09-10 10:55:05