단락 필드에 포함 된 양식 필드의 동작을 어떻게 변경합니까?


18

Drupal 8 의 단락 모듈을 사용하여 단락 필드에 포함 된 양식 필드의 동작을 변경하려고합니다. 이것은 AJAX 콜백과 같은 동작을 추가하고 상태 등을 사용하여 다른 필드 표시를 숨길 수 있도록합니다.

이 함수를 사용하여 단락 상위 필드에 액세스 할 수 있습니다.

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

그러나 단락 내부의 필드에 어떻게 액세스합니까?

시도 hook_field_widget_form_alter했지만 아무 소용이 없습니다.

어떻게해야합니까?

참고 : 저는 여전히 Drupal 개발에 익숙하지 않습니다.


당신의 ALTER에서 이것을 시도 kint($form);하고 kint($form_id);그것은 당신에게 ALTER 후크 ID의 ID를 제공해야하고 그것은 또한 당신이 변경하려는 것에 대해 당신에게 배열 경로를 제공해야합니다.
Danny Englander

답변:


14

단락 ^ 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';
  }
}

6
"Paragraphs Classic"대신 "Paragraphs EXPERIMENTAL"위젯을 사용하는 경우 위젯 유형은 paragraphs대신입니다 entity_reference_paragraphs.
Dalin

1
몇 가지 유용한 것들 (이 훅을 디버깅하는 것이 불가능하기 때문에) : /* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Dalin

1

를 사용 hook_form_alter하면 위젯에서 오는 것조차도 양식의 모든 것을 변경할 수 있습니다. 쉽게 조금 지저분해질 수 있으며 위젯으로 엉망이되면 쉽게 깨지는 경향이 있습니다.

위젯을 변경하려면 자신이 할 수있는 작업을 수행하십시오. 위젯은 플러그인 (PHP 클래스)이므로 사용자가 소유 한 서브 클래스를 만들고 기능을 완전히 덮어 쓰거나 기능을 확장하여 변경할 수 있습니다.

위젯은 주석 시스템을 사용하므로 이름, ID 등을 클래스 위의 주석으로 정의해야합니다. 가장 쉬운 방법은 단순히 원래 위젯을 복사하고 변경하여 새로운 이름과 ID를 지정하는 것입니다. 나머지는 필요와 같이 있어야합니다.

Drupal이 새 플러그인을 찾도록 캐시를 지우십시오.


-1

단락 문제 대기열에이 패치 가 있습니다 .

새로운 후크를 추가합니다.

hook_form_paragraphs_subform_alter()
hook_form_paragraphs_subform_TYPE_alter()
hook_form_paragraphs_subform_WIDGET_alter()
hook_form_paragraphs_subform_WIDGET_TYPE_alter()

1
이 의견에 따르면 이러한 후크는 코어를 선호하여 추가되지 않았습니다 hook_field_widget_WIDGET_TYPE_form_alter().
powpow12 2019
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.