Форма с переменным числом полей

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
akul333
Сообщения: 61
Зарегистрирован: 2013.01.31, 14:51

Форма с переменным числом полей

Сообщение akul333 »

Подскажите, может кто сталкивался. В общем нужно чтобы пользователь админки мог вводить телепрограмму на определенный день.
Допустим есть таблица tvshow:
datetime
tile
channel
В админке по-идее должна быть форма с вышеперечисленными полями. Можно как-то сделать чтобы не сохранять каждую передачу отдельно, а вывести такую форму, где пользоватьль смог-бы добавлять столько строк сколько нужно. Может кто подскажет. Извините если непонятно сформулировал.
Аватара пользователя
TBIKC
Сообщения: 133
Зарегистрирован: 2011.07.23, 16:30

Re: Форма с переменным числом полей

Сообщение TBIKC »

В yiicookbook в 3 главе, последней части разбирается данный вопрос "Обработка переменного числа полей в форме"
Аватара пользователя
demisang
Сообщения: 159
Зарегистрирован: 2012.10.27, 15:03
Контактная информация:

Re: Форма с переменным числом полей

Сообщение demisang »

выведи через php один раз саму форму, потом либо отправляй форму через AJAX, либо сложнее:
Например форма имеет id="tvshow" (<form id="tvshow">) и в ней есть вышеуказанные поля:

Код: Выделить всё

<div class='row'>
<input type="text" name="tvshow[0][datetime]" />
<input type="text" name="tvshow[0][title]" />
<input type="text" name="tvshow[0][channel]" />
</div>
так же нужно добавить скрытое поле:

Код: Выделить всё

<input type="hidden" name="next_tvshow_id" id="next_tvshow_id" value="<сколько всего строк полей tvshow на странице при её загрузке>" />
нужно добавить любой элемент добавления нового поля, например это будет ссылка "добавить новое поле", мы пишем jQuery код для неё:

Код: Выделить всё

$("a.add_new_tvshow_field").on("click", function(e) {
    e.preventDefault(); // отменяем переход по ссылке
    var newFields = '';
    var elems = $("#tvshow > div input"); // сли есть <select>, то придётся самому дописывать код
    var nextIncrement = parseInt($("#next_tvshow_id").attr("value")); // Получаем значение слудующего порядкового ID для новой записи
    JQuery.each(elems, function(i, obj) { // Перебираем все элементы оригинальной формы
        var newField =  $(obj).clone(); // делаем с них копии
        newField.attr("name",  newField.attr("name").replace(/\[[\d]+\]/i, nextIncrement)); // меняем у копии аттрибут name (увеличиваем его ID на +1)
        newField.attr("value",  "");  // Очищаем значение поля, которое может присутствовать в клонируемом объекте
        newFields = newFields + newField.html(); // Скидываем html-код получившегося элемента в общий буфер для вставки на страницу
        
        newFields = newFields + "<a href='javascript:void(0)' class='remove'>Покончить с этим навсегда!</a>";
    });
    $("#next_tvshow_id").attr("value", nextIncrement+1); // Увеличиваем следующий ID для последующий вставки
    $("#tvshow").find("div:last").after("<div class='row'>" + newFields  + "</div>"); // непосредственно добавляем новые поля на странице
});
// Удаление существующего или только что добавленного поля
$("#tvshow a.remove").on("click", function(e) {
    e.preventDefault();
    $(this).parent().remove();
});
 
Потом придётся и в PHP попотеть, тебе придёт массив из

Код: Выделить всё

$_POST["tvshow"][0]['datetime']; // и т.п.        
, придётся перебрать все результаты, проверить все ли значения полей на одном уровне были заполнены и т.п., но это уже пустяки, самую сложную часть я тебе написал.

вот, получилось даже более менее универсальненько 8-) может даже сам буду где-нибудь использовать ))
Последний раз редактировалось demisang 2013.02.26, 01:30, всего редактировалось 2 раза.
akul333
Сообщения: 61
Зарегистрирован: 2013.01.31, 14:51

Re: Форма с переменным числом полей

Сообщение akul333 »

Спасибо, попробую
Ответить