¿Cómo usar el gancho de preajuste para guardar un valor de campo como título de nodo?

8

Tengo un campo de fecha personalizado en un nodo tipo 'día'. Cuando se guarda el nodo (o se edita y luego se guarda), me gustaría obtener el valor field_date (no la fecha de publicación) y guardarlo en el campo de título.

Me gustaría saber cómo, quizás usando un módulo para:

hook_presave

  • OBTENER VALOR DE CAMPO

  • ESTABLECER TÍTULO COMO VALOR DE CAMPO

  • AHORRE NODO

Kevin howbrook
fuente
Novedades de Drupal 8: Entity Field API salte a 4:20 si lo desea.
No Sssweat

Respuestas:

16

Necesita implementar 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;
  }
}
Adrian Cid Almaguer
fuente
1
¿Por qué cargaría el nodo cuando se pasa al gancho como el $entityobjeto?
Jamie Hollern
2
Además, llamar a $ entity-> save () en un enlace de guardado previo provoca una recursión infinita. Esta no es una respuesta correcta.
Jamie Hollern
1
@JamieHollern Tienes razón, el código tuvo problemas, ahora edito con la respuesta correcta. Gracias por tu comentario.
Adrian Cid Almaguer
3

Para entidad de tipo usuario

/**
 * Implements hook_entity_presave().
 */
function YOUR_MODULE_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {
  $entity->field_uhid->value = 'testing';     //set value for field
}
nehapandya
fuente
3

Para la entidad de tipo perfil, he usado el siguiente código

/**
 * 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;
 }
}
nehapandya
fuente
0

Esto funcionó para mí para obtener y establecer el valor del campo de fecha usando el enlace de guardado previo basado en el tipo de contenido / ** * Implementa hook_entity_presave (). * /

function YOUR_MODULE_global_entity_presave (Drupal \ Core \ Entity \ EntityInterface $ entity) {if ($ entity-> bundle () == 'blog') {$ updated = $ entity-> get ('created') -> value; $ entity-> set ('field_published_date', date ('Ymd \ TH: i: s', $ publicado)); }}

santhosh
fuente