Вопросform fieldset- изменить по умолчанию установленное значение collapsed
Здраствуйте! В первую очередь хотелось по благодарить, за Ваш не легий труд! Успехов!
Ну и суть вопроса:- уже неделю не могу сообразить решение моей задачи..
Есть элементы формы:
$form['name1'] = array( '#type' => 'textarea', '#description' => 'name1', '#weight' => 1, ); $form['name2'] = array( '#type' => 'textarea', '#description' => 'name2', '#weight' => 2, ); $form['submit'] = array( '#type' => 'submit', '#value' => 'Предпросмотр', // Элемент ajax '#ajax' => array( //callback-функция 'callback' => 'preview_form_ajax', 'wrapper' => 'fc-form', ), '#weight' => 3, ); $fieldsets = array('name1', 'name2', 'submit'); $form['spoiler'] = array( '#type' => 'fieldset', '#title' => 'Добавить описание', '#collapsible' => true, '#collapsed' => true, '#weight' => 4, ); foreach ($fieldsets as $name) { $form['spoiler'][$name] = $form[$name]; unset($form[$name]); }
и фукция отправки ч\з ajax
function preview_form_ajax($form, &$form_state) { $markup_value= 'bla bla bla'; $form['result'] = array( '#markup' => $markup_value, '#weight' => 30, ); return $form; }
По умолчанию стоит '#collapsed' => true, форма свернута.
После отправки формы, скрипт отрабатывается и выводится значение $markup_value= 'bla bla bla';
Вопрос: Как сделать чтоб после отправки оставить форму в развернутом положении. и вывести результат $markup_value.
пробовал добавлять значения #ajax['method'] 'after', 'append', 'before', 'prepend' не помогает
рискно предположить что срабатывает function form_process_fieldset
if (!empty($element['#collapsed'])) { $element['#attributes']['class'][] = 'collapsed'; }
но print_r($element['#collapsed']); ни чего не находит((
Одна надежда на Вас подскажите как решить.
- fil.diesel
- 22.01.2012
- 6114
Комментарии
Прошу прощения за задержку с ответом, был крайне занят.
Спасибо, что откликнулись! Задавал подобный вопрос у Вас и на drupal.ru, в общем с двух рессурсов вы первый ответели. Ваш метод решения пробовал, почему то не срабатывает(( почемуто метод аякса в друпале обусловлен перерисовкой формы, после удачного срабатывания субмита. вот когда в форму добавляешь форм_сет_эрор, и он срабатывает форма остается развернутой!!
Единственно, что пока приходит в голову так это у филдсета выставить ид и в зависимости от положения филдсета изменить значение например класса у какого нибудь элемента например на "yes" или "no"...
В итоге получается по умолчанию у нас филдсет свернут - то есть у элемента значение "yes"
пишем функцию на jQuery, и проверяем если "yes" то выставляем значения коллабсета труе, далее меняем флаг
и при следующей перерисовки форма должна загрузиться развернутой!!!
но это только мои предположения... сейчас пишу с телефона, возможности потестить нет(( как опробую обязательно отпишусь.....вух.. настрочил)))
Мой метод должен срабатывать. Покажите, пожалуйста, полностью функции создания формы и её обработки на аяксе. Можете заодно почитать статью об обновнении форм на AJAX в Drupal 7.
Спасибо за помощь! Нашел ошибку
Оказывается form 'result' нужно было добавить к 'spoiler'...
Еще раз огромное спасибо!!! Без Вас бы не сообразил)
всегда пожалуйста :)
эх погорячился теперь сворачивается вся форма( наверно все таки прийдется прибегнуть к помощи jquery
посмотрите может у вас получится
Я переписал ваш код на такой, как он действительно должен выглядетью. Заодно поправил пару ошибок и неточностей. Этот код должен работать:
И вам очень не помешает внимательно прочитать про стандарты кодирования.
Эх... все равно не срабатывет((
за ссылку спасибо познавательно.
В общем пришел к одному решению. Не знаю на сколько правильно но работает))
добавляем js
и в функцию модуля preview_form_ajax
тогда все работает на ура))
p/s к филсету нужно добавить '#id'=>'edit-spoiler',
одна загвоздка. приоритет исполнения скрипта не могу выставить( поэтому пришлось повесить таймаут..
Я не верю, что не срабатывает. Вы можете показать сайт в Интернете и предоставить к нему доступ?
он на локалке пока. Проверял обработанный Вами код все рано не работает. я так понял это баг какойто, если есть ошибка в форме срабатывет
в collapse.js а если нет и аяксе указан 'method' => 'replace', он просто пррерисовывает форму и добавляет результат обработки аякса! а так как в форме укзан '#collapsed' => true, то форма и загружается всегда свернутой(
Нет, друпал полностью перерисовывает форму с учётом изменений, внесённых в форму при обработке её аяксом.
Хм... странно все это! Не пойму это только у меня так?
А как у Вас обрабытывается код? Пробовали запускать?
В итоге сделал как и описывал во втором посте работает на ура!
javascript fc_form.js
Ладно, сделали - и хорошо. Но я бы на вашем месте разобрался, почему не работает как надо.
Я уже и drupal переустанавливал, аналогичная ситуация! При правильно заполненных полях филсет сворачивается. и все тут...
А Вы пробовали запускать? Как у Вас обрабытывается код?
Проверил. На удивление, не работает. Всё меняется, кроме состояния филдсета. Надо будет на д.орг написать, что такой баг имеется.
фух ну слава богу! А то я уж начал думать, что руки то у меня, не под клавиатуру заточены))
Спасибо за помощь!
Комментировать