web-dev-qa-db-ja.com

段落フィールドに含まれるフォームフィールドの動作を変更するにはどうすればよいですか?

Drupal 8の Paragraphs モジュールを使用して、段落フィールドに含まれるフォームフィールドの動作を変更しようとしています。これにより、=のような動作を追加できますAJAXコールバック、状態などを使用して他のフィールドを非表示にする.

この関数を使用して、段落の親フィールドにアクセスできます。

function hook_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { 
}

しかし、段落内のフィールドにどのようにアクセスしますか?

私が試してみました hook_field_widget_form_alterですが、役に立ちません。

どうすればよいですか?

注:私はまだDrupal開発にかなり慣れていません。

17
bart_88

パラグラフ^ 1.3以降、 hook_field_widget_WIDGET_TYPE_form_alter() を使用できます(フックの使用について良いコメントがあるため、8.2バージョンをリンクしました)。

次の例はmodules/contrib/paragraphs/tests/modules/paragraphs_test/paragraphs_test.moduleにあります

/**  
 * Implements hook_field_widget_WIDGET_TYPE_form_alter().  
 */  
function paragraphs_test_field_widget_entity_reference_paragraphs_form_alter(&$element, &$form_state, $context) {
  if ($element['#paragraph_type'] == 'altered_paragraph') {
    $element['subform']['field_text']['widget'][0]['#title'] = 'Altered title';
  }
}
14

hook_form_alterを使用すると、ウィジェットからのものなど、フォーム内のあらゆるものを変更できます。それは簡単に少し乱雑になる可能性があり、ウィジェットをいじくると簡単に壊れる傾向があります。

ウィジェットを変更したい場合は、独自のウィジェットを作成してください。ウィジェットはプラグイン(PHPクラス)なので、自分のサブクラスを自分のものにして、関数を完全に上書きするか、関数を拡張することで変更できます。

ウィジェットは注釈システムを使用するため、クラスの上にコメントとして名前、IDなどを定義する必要があります。最も簡単な方法は、元のウィジェットをコピーして、新しい名前とIDを変更するだけです。残りは必要なようにする必要があります。

Drupal新しいプラグインを見つけるために、キャッシュをクリアすることを忘れないでください。

1
googletorp

段落ブラウザーをフィールドウィジェットとして使用している場合、もう1つひねりがあります。適合するフックはhook_field_widget_paragraphs_browser_form_alter()という名前です。理解するのにかなりの時間を費やしました...

0
eigentor