ВопросДинамическое содержимое формы и AJAX
Суть в следующем: есть форма, которая построчно, циклом, выводит записи из пользовательской таблицы, добавляя под каждый элемент кнопочки "не показывать", "удалить" и "редактировать". Сделано без аякса, с костылями, но, все же, работает. Что нужно сделать: выводить не всё содержимое записи и сразу под ней кнопки, а только заголовки, а если уже на них кликать, то будет раскрываться всё содержимое и кнопочки (как на форумах тег свернуть/показать). Собственно и вопрос - как это можно сделать? :)
Цикл формирования элементов формы
for ($i = 0; $i < $count; $i++) { $form['descr' . $i] = array( '#markup' => nl2br($jokes[$i]['text']) . '</i><br /><br />', ); $form['text' . $i] = array( '#markup' => '<i><b><small>' . $jokes[$i]['descr'] . '</small></b></i><br /><br />', ); if ($jokes[$i]['disabled'] > 0) { $value = 'Показывать'; } else { $value = 'Не показывать'; } $form['disabled' . $i] = array( '#type' => 'submit', '#value' => $value, '#submit' => array('rand_jokes_button_disable'), '#name' => 'dis' . $jokes[$i]['disabled'] . '.' . $jokes[$i]['id'], ); $form['delete' . $i] = array( '#type' => 'submit', '#value' => 'Удалить', '#submit' => array('rand_jokes_button_delete'), '#name' => 'del' . $jokes[$i]['id'], ); $form['edit' . $i] = array( '#type' => 'submit', '#value' => 'Редактировать', '#submit' => array('rand_jokes_button_edit'), '#name' => 'upd' . $jokes[$i]['id'], '#suffix' => '<hr /><br /><br />', ); } return $form;
Примеры обработки:
function rand_jokes_button_edit($form, &$form_state) { reset($form_state['input']); variable_set('rand_jokes_joke_id', substr(key($form_state['input']), 3)); $form_state['redirect'] = 'admin/config/rand_jokes/update/form'; } function rand_jokes_button_disable($form, &$form_state) { $send = new RandJoke(); reset($form_state['input']); $send->jokeid = substr(key($form_state['input']), 5); reset($form_state['input']); $send->disjoke(substr(key($form_state['input']), 3, 1)); }
Сразу еще спрошу - у меня способ, которым связана текстовая информация с обработками кнопок некрасивый, хоть и работоспособный: через массив $form_state['input'] - ключ его первого элемента идентичен параметру #name элемента, а значение #value элемента. Есть ли более элегантные способы однозначно определить какая кнопка была нажата, если заранее неизвестно даже сколько их будет?
- Гость
- 24.05.2012
- 2986
Комментарии
Вопрос - вы хотите, чтобы при нажатии на заголовок контент и кнопки подгружались на аяксе, или же просто показывалось до этого скрытое содержимое? Просто если заголовков не сильно много - то проще прятать содержимое на странице а потом его показывать. Но если много - то, конечно, лучше подгружать его порционно.
Ну в идеале, конечно, лучше бы на аяксе, но первый вариант тоже интересен :) Не подскажите как сделать? :)
Нашел такое решение:
Интересно про AJAX, как это можно на нем сделать. Ну и, опять-таки, способ передачи информации функциям обработки - как можно сделать красиво? :) Быть может, как-нибудь в '#submit' можно указать параметры для вызываемой функции?
Простите, пропустил обновление топика. Тема еще актуальна?
Спасибо за участие, с грехом пополам, но разобрался :)
Комментировать