Многоуровневая ajax-форма Drupal 8

88
20 сентября 2019, 17:10

Начал изучать сие чудо (Drupal 8) и не могу найти нормальную информацию как писать сложные модули на нём. Начал писать модуль в виде формы. Построение формы:

public function buildForm(array $form, FormStateInterface $form_state) {
  $form['tab_group'] = [
  '#type' => 'container',
  '#attributes' => ['id' => 'tab-group-container'],
  ];
  // кнопка
  $form['tab_group']['btn_popular'] = [
  '#type' => 'button',
  '#value' => $this->t('Популярные'),
  '#data' => static::getCountries(),
  '#ajax' => [
    'callback' => '::btnPopularCallback',
    'event' => 'click',
    'wrapper' => 'roaming-container',
  ],
  ];
  /* Еще две такие же кнопки */
  // контейнер, в который всё будет вставляться
  $form['roaming_container'] = [
  '#type' => 'container',
  '#attributes' => ['id' => 'roaming-container'],
  ];
return $form;
}

По нажатию на эту кнопку выполняется callback-функция:

public function btnPopularCallback(array $form, FormStateInterface &$form_state):array {
$i = 0;
foreach ($form_state->getTriggeringElement()['#data'] as $item)
{
  $curr_item = 'item_'.$i;
  $form['roaming_container'][$curr_item] = [
    '#type' => 'image_button',
    '#prefix' => '<a href="#" class="roaming-item">',
    '#suffix' => '</a>',
    '#markup' => static::getCountryItem($form_state, $item),
    '#attributes' => [
      'id' => [$curr_item],
    ],
    '#data' => $item,
    '#ajax' => [
      'callback' => 'CountryPageCallback',
      'event' => 'click',
      'method' => 'replace',
      'wrapper' => 'roaming-container',
    ],
  ];
  $i++;
}
return $form['roaming_container'];
}

Всё вроде бы хорошо. Элементы выводятся. Пишу для этих элементов коллбэки, практически аналогичные, но они даже не вызываются. Ajax у этих элементов не работает.

Код из консоли браузера:

<div id="roaming-container" data-drupal-selector="edit-roaming-container" class="js-form-wrapper form-wrapper">
<a href="#" class="roaming-item">
    <!-- Разметка (img и span) -->
</a>
...
<a href="#" class="roaming-item">
    <!-- Разметка (img и span) -->
</a>
</div>
READ ALSO
Codeigniter Fatal error: Class &#39;CI_Controller&#39; not found

Codeigniter Fatal error: Class 'CI_Controller' not found

Пытаюсь вызвать session или модель в system/core/Commonphp Для этого мне сначала необходимо загрузить экземпляр класса CI_Controller

101
Simple Xml - Указать тип

Simple Xml - Указать тип

Как получить изображение, когда в XML один enclosure я знаю

84
Как убрать домен из всех ссылок в WordPress?

Как убрать домен из всех ссылок в WordPress?

Нужно убрать домен со всех ссылок wp , что бы был вид не http://domaincom/post, а просто /post?

87
Composer, расширение openssl

Composer, расширение openssl

При попытке выполнения команды Composer install в проекте, вылетает ошибка

96