用語参照を取得する段落フィールドがあります。
特定の語彙に含まれる用語の数を数え、特定のタイプのノードを作成するときに、段落の複数値フィールドのインスタンスをその数だけ作成する必要があります。これはHook_form_alterで実行できますか?
これらのフィールドは、ユーザーが追加をクリックするのではなく、ノード作成フォームが読み込まれたときに読み込まれることが重要です。
どんな助けでも大歓迎です
私はこれを試しましたが、ノードを保存するときに新しいフィールドは保存されません
function hook_form_alter(&$form, $form_state, $form_id) {
if ($form_id == 'my_form') {
$item = $form['field_features']['widget']['0'];
// get taxonomy terms
$query = \Drupal::entityQuery('taxonomy_term');
$query->condition('vid', "my_voc");
$tids = $query->execute();
$terms = \Drupal\taxonomy\Entity\Term::loadMultiple($tids);
$count = count($terms);
$i = '1';
foreach($terms as $term){
$form['field_features_para']['widget'][$i] = $item;
$form['field_features_para']['widget'][$i]['#delta'] = $i;
$form['field_features_para']['widget'][$i]['#weight'] = $i;
$i ++;
}
}
}
フォームが作成された後に複数値フィールド項目を追加する代わりに、フォームが作成される前にエンティティでこれを行うことができます:
/**
* Implements hook_ENTITY_TYPE_create() for 'node'.
*/
function mymodule_node_create(\Drupal\node\NodeInterface $node) {
if ($node->getType() == 'my_content_type') {
// get taxonomy terms
$query = \Drupal::entityQuery('taxonomy_term');
$query->condition('vid', "my_voc");
$tids = $query->execute();
$terms = \Drupal\taxonomy\Entity\Term::loadMultiple($tids);
$count = count($terms);
$i = '1';
foreach ($terms as $term) {
$paragraph = \Drupal::entityTypeManager()->getStorage('paragraph')->create([
'title' => 'Paragraph ' . $i,
'type' => 'my_paragraph_type',
// more field data
]);
$node->field_features_para[] = $paragraph;
$i++;
}
}
}