Як я можу змінити поведінку полів форми, що містяться в полі абзацу?


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);це повинно дати вам ідентифікатор для зміни гака id, і він також повинен дати вам шляхи масиву для того, що ви хочете змінити.
Danny Englander

Відповіді:


14

Оскільки в абзацах ^ 1.3 ви можете використати гачку_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замість entity_reference_paragraphs.
Далін

1
Деякі корисні речі (адже неможливо налагодити ці гачки): /* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Далін

1

Використовуючи hook_form_alterви можете змінити що-небудь у формі, навіть речі, що надходять із віджетів. Він може легко стати трохи безладним, і він, як правило, легко зламається, коли ви псуєтесь з віджетами.

Якщо ви хочете змінити віджети, що ви можете зробити, зробіть свій власний віджет. Віджети - це плагіни (клас PHP), тож ви можете зробити свій підклас таким, який у вас є, та змінити або повністю перезаписавши функції, або розширивши функції.

У віджетах використовується система анотацій, тому вам потрібно визначити ім'я, 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.