Ребята, добрый день.
Может кто-нибудь поможет.
Есть форма, в которой при вводе данных в текстовое поле обновляется дропдаун (select) посредством AJAX.
Все обновляется, только вот проблема не сабмитится данное поле.
Проходил по коду xDebug-ом и увидел что при моей валидации (а если бы ее не было) то при сабмите в свойствах (получаю $form_state->getValues()) данное поле - пустое, такое как при начальной форме.
Пробовал разными способами, но либо не проходит валидацию с фразой "An illegal choice has been detected. Please contact the site administrator." (из FormValidator), либо просто в этом поле пустое значение.
Вообще не понятно.
Пробовал как в родных модулях, но там все немного не так, как у меня.
Там не сабмитятся опциональные значения.
Может кто сталкивался с данной проблемой.
То что ищет ГУГЛ не подходит, т.к. там стандартные вещи написаны из книг или из старых версий друпала.
ПОМОГИТЕ!!!!
Комментарии
См. https://www.drupal.org/project/examples
http://drupalrake.ru/articles/ochistit-pole-pri-ajax-zaprose
Я сталкивался с похожей проблемой, но немного другой, хотя лекарство может помочь.
Ребята спасибо, что пытались помочь.
Вроде как разобрался.
У меня просто ситуация не совсем стандартная была.
У меня не SELECT меняет поля, а поле меняет опции SELECT. При этом валидатор ругается. Я писал об этом.
Получается что мне нужно было перестроить форму заново. (Это я понял после дэбагинга соответствующих методов).
Использую метод $this->getCompleteForm() в методе buildForm моей формы. В зависимости от ситуации (новая форма или переформированная AJAXом) меняю опции. И вуаля... Работает...
Получилось немного костыльно, но....
Если кому интересны подробности могу рассказать.
Если знаете более хороший вариант, давайте обсудим.
Понятно, ты делаешь autocomplete?
Если да, в друпале есть стандартный механизм, либо через ctools, либо через собственный колбэк...
Если через свой колбэк -
в модуле реализуеи hook_menu
<?php
$items
['options/autocomplete/%'] = array('page callback' => 'my_options_autocomplete',
'page arguments' => array(2),
'type' => MENU_CALLBACK,
);
return $items;
function
my_options_autocomplete($nodetype, $text){$titles = db_select('node', 'n')
->fields('n',array('nid','title'))
->condition('type', $nodetype ,'=')
->condition('title', "%$text%" ,'LIKE')
->execute()
->fetchAllKeyed();
$match = array();
foreach($titles as $key=>$value){
$match["$value [id: $key]"] = '<span class="autocomplete_title">'.$value .'</span>';
}
drupal_json_output($match);
} //в форме $form['text_field_with_autocomplete'] = array(
'#type' => 'textfield',
'#size' => '100',
'#autocomplete_path' => 'options/autocomplete/' . $my_node_type, // например 'article'
'#description' => t('начинайте набор'),
); ?>
Форму надо вызывать через get_form иначе ajax не подключится
либо включать его вручную
ctools_include('ajax'); в форме
Как та бэ 8
Честно говоря не проверял до самых запятых Drupal 8 Form API. Вот врут или нет когда пишут, что движек 8 подобен Drupa 7? Подобен в смысле что возможности сохранены в полной мере (и расширены за счет поддержки HTML5).
Да, резевирование путей будет другим, но возможности автокомплита сохранены, что важно:
https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21...
В том то и дело что не очень он похож.
Я бы все таки перед тем как давать такой полный ответ, разобрался, а будет ли это работать.
Скажем так, $items['....'] уже не работает. Это заменено роутингами.
Как-то так.
Админка похожа и бартик всё такой же голубой. Далее сходства заканчиваются.
Все что не делается, не делается к лучшему, согласен.