Bagaimana cara menggunakan kait presave untuk menyimpan nilai bidang sebagai judul simpul?

8

Saya memiliki bidang tanggal khusus dalam tipe simpul 'hari'. Ketika node disimpan (atau diedit kemudian disimpan), saya ingin mendapatkan nilai field_date (bukan tanggal yang dipublikasikan) dan menyimpannya ke dalam kolom judul.

Saya ingin tahu caranya, mungkin menggunakan modul untuk:

hook_presave

  • DAPATKAN NILAI FIELD

  • SET TITLE AS NILAI FIELD

  • SIMPAN NODE

Kevin howbrook
sumber
Apa yang Baru di Drupal 8: Entity Field API lompat ke 4:20 jika Anda mau.
No Sssweat

Jawaban:

16

Anda perlu menerapkan 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
sumber
1
Mengapa Anda memuat node ketika sedang dilewatkan ke hook sebagai $entityobjek?
Jamie Hollern
2
Selain itu, memanggil $ entitas-> save () di hook presave menyebabkan rekursi tak terbatas. Ini bukan jawaban yang benar.
Jamie Hollern
1
@JamieHollern Anda benar, kodenya bermasalah, sekarang saya edit dengan jawaban yang benar. Terima kasih atas komentar Anda.
Adrian Cid Almaguer
3

Untuk entitas pengguna tipe

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

Untuk entitas tipe profil saya telah menggunakan kode di bawah ini

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

Ini berhasil bagi saya untuk mendapatkan dan menetapkan nilai bidang tanggal menggunakan kait presave berdasarkan tipe konten / ** * Menerapkan hook_entity_presave (). * /

berfungsi YOUR_MODULE_global_entity_presave (Drupal \ Core \ Entity \ EntityInterface $ entitas) {if ($ entitas-> bundle () == 'blog') {$ diterbitkan = $ entitas-> get ('dibuat') -> nilai; $ entitas-> set ('field_published_date', date ('Ymd \ TH: i: s', $ diterbitkan)); }}

santhosh
sumber