Wie speichere ich einen Feldwert mit dem Presave-Hook als Knotentitel?

8

Ich habe ein benutzerdefiniertes Datumsfeld in einem Knotentyp 'Tag'. Wenn der Knoten gespeichert (oder bearbeitet und dann gespeichert) wird, möchte ich den Wert field_date (nicht das Veröffentlichungsdatum) abrufen und im Titelfeld speichern.

Ich würde gerne wissen wie, vielleicht mit einem Modul:

hook_presave

  • FELDWERT ERHALTEN

  • TITEL ALS FELDWERT EINSTELLEN

  • NODE SPEICHERN

Kevin Howbrook
quelle
Was ist neu in Drupal 8: Entity Field API. Fahren Sie mit 4:20 fort, wenn Sie möchten.
Kein Sssweat

Antworten:

16

Sie müssen den hook_entity_presave () implementieren

/**
 * 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
quelle
1
Warum sollten Sie den Knoten laden, wenn er als $entityObjekt in den Hook übergeben wird?
Jamie Hollern
2
Der Aufruf von $ entity-> save () in einem Presave-Hook führt zu einer unendlichen Rekursion. Dies ist keine richtige Antwort.
Jamie Hollern
1
@JamieHollern Du hast recht, der Code hatte Probleme, jetzt bearbeite ich mit der richtigen Antwort. Vielen Dank für Ihren Kommentar.
Adrian Cid Almaguer
3

Für Entität vom Typ Benutzer

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

Für Entität vom Typ Profil habe ich unten Code verwendet

/**
 * 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
quelle
0

Dies funktionierte für mich, um den Datumsfeldwert mithilfe des Presave-Hooks basierend auf dem Inhaltstyp / ** abzurufen und festzulegen. * Implementiert hook_entity_presave (). * /

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

Santhosh
quelle