web-dev-qa-db-ja.com

ノード作成フォームの複数値フィールドに任意の数の段落フィールドを作成します

用語参照を取得する段落フィールドがあります。

特定の語彙に含まれる用語の数を数え、特定のタイプのノードを作成するときに、段落の複数値フィールドのインスタンスをその数だけ作成する必要があります。これは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 ++;
  }
 }
}
2
drupalhgy

フォームが作成された後に複数値フィールド項目を追加する代わりに、フォームが作成される前にエンティティでこれを行うことができます:

/**
 * 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++;
    }
  }

}
6
4k4