ノードタイプ「day」にカスタム日付フィールドがあります。ノードが保存される(または編集されてから保存される)とき、field_date値(公開された日付ではない)を取得して、titleフィールドに保存します。
モジュールを使用して、次の方法を知りたいのですが。
hook_presave
フィールド値を取得
タイトルをフィールド値として設定
ノードを保存
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;
}
}
タイプがuserのエンティティの場合
/**
* 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;
}
}
これは、コンテンツタイプに基づくpresaveフックを使用して日付フィールド値を取得および設定するのに役立ちました/ ** * 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)); }}