Node add and save.

Главные вкладки

Аватар пользователя ady1503 ady1503 10 января 2023 в 21:14

Hello everyone.

I have to add to one of the content types the possibility that when NODE_TYPE_1 is saved, if field_1 (type number or string) has the value of something specific, when saving NODE_TYPE_1, NODE_TYPE_2 has to be added, created with the value of field_1 passed to one of the fields of NODE_TYPE_2.

Any idea what to use, a controller?, the hook_entity_insert? another hook?

I can't get to pass the value from field_1 to the field of NODE_TYPE_2 and save it. I only manage to create the NODE_TYPE_2 with no values or default values. Maybe I need pass several fields.

If anyone has any ideas and/or examples of this functionality.

Thanks

Всем привет.

Я должен добавить к одному из типов контента возможность того, что при сохранении NODE_TYPE-1, если field_1 (номер типа или строка) имеет значение чего-то определенного, при сохранении NODE_TYPE_1 должен быть добавлен NODE_TYPE_2, созданный со значением field_1 передается в одно из полей NODE_TYPE_2.

Любая идея, что использовать, контроллер?, hook_entity_insert? еще один крючок?

Я не могу передать переменную из field_1 в поле NODE_TYPE_2 и сохранить ее. Мне удается создать NODE_TYPE_2 только без значений или значений по умолчанию. Собственно можно пройти и несколько полей.

Если у кого-то есть идеи и/или примеры этой функциональности.

Спасибо

Комментарии

Аватар пользователя Andruxa Andruxa 11 января 2023 в 1:39

Maybe something like this:

<?php
/**
 * Implements hook_ENTITY_TYPE_presave for Node entities.
 */
function yourmodule_node_presave(NodeInterface $node) {
  if (
$node->getType() === NODE_TYPE_1) {
    
$field_values $node->get(FIELD_1)->getValue();
    if (
$field_values[0]['value'] === SPEC_VALUE) {
      
// or use foreach for multiple values

      

$passed_value $field_values[0]['value'];
      
// or any other field value from NODE_TYPE_1 using $node->get(...

      

$node_storage = \Drupal::entityTypeManager()->getStorage('node');

      

$new_node $node_storage->create([
        
'type' => NODE_TYPE_2,
        
'title' => 'some title',
         
// some other node properties
      
]);

      

$new_node->get(SOME_FIELD_OF_NODE_2)->setValue($passed_value);
      
$new_node->save();
    }
  }
}
?>
Аватар пользователя Andruxa Andruxa 11 января 2023 в 21:47

hook_entity_presave will run before each save of NODE_TYPE_1, regardless of whether the value of field_1 has changed and duplication of NODE_TYPE_2 is possible
perhaps, a check should be added to the code for changing the value of the field field_1