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 только без значений или значений по умолчанию. Собственно можно пройти и несколько полей.
Если у кого-то есть идеи и/или примеры этой функциональности.
Спасибо
Комментарии
Maybe something like this:
<?php
$passed_value = $field_values[0]['value'];
$node_storage = \Drupal::entityTypeManager()->getStorage('node');
$new_node = $node_storage->create([
$new_node->get(SOME_FIELD_OF_NODE_2)->setValue($passed_value);
/**
* 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
// or any other field value from NODE_TYPE_1 using $node->get(...
'type' => NODE_TYPE_2,
'title' => 'some title',
// some other node properties
]);
$new_node->save();
}
}
}?>
Спасибо большое.
Сейчас применять буду ваш код.
Я использовал hook_entity_insert и не получается.
Спасибо.
hook_entity_insert is executed once when the node is created
as far as I understand, you need NODE_TYPE_2 to be created every time you change NODE_TYPE_1
Thanks. Your code working as is expected.
Muchas gracias.
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
Yes, yes now I make it functionality with if conditionality.
And is perfect.
Thanks