Подскажите, может кто сталкивался. В общем нужно чтобы пользователь админки мог вводить телепрограмму на определенный день.
Допустим есть таблица tvshow:
datetime
tile
channel
В админке по-идее должна быть форма с вышеперечисленными полями. Можно как-то сделать чтобы не сохранять каждую передачу отдельно, а вывести такую форму, где пользоватьль смог-бы добавлять столько строк сколько нужно. Может кто подскажет. Извините если непонятно сформулировал.
Форма с переменным числом полей
Re: Форма с переменным числом полей
В yiicookbook в 3 главе, последней части разбирается данный вопрос "Обработка переменного числа полей в форме"
Re: Форма с переменным числом полей
выведи через php один раз саму форму, потом либо отправляй форму через AJAX, либо сложнее:
Например форма имеет id="tvshow" (<form id="tvshow">) и в ней есть вышеуказанные поля:
так же нужно добавить скрытое поле:
нужно добавить любой элемент добавления нового поля, например это будет ссылка "добавить новое поле", мы пишем jQuery код для неё:
Потом придётся и в PHP попотеть, тебе придёт массив из, придётся перебрать все результаты, проверить все ли значения полей на одном уровне были заполнены и т.п., но это уже пустяки, самую сложную часть я тебе написал.
вот, получилось даже более менее универсальненько может даже сам буду где-нибудь использовать ))
Например форма имеет 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 на странице при её загрузке>" />
Код: Выделить всё
$("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();
});
Код: Выделить всё
$_POST["tvshow"][0]['datetime']; // и т.п.
вот, получилось даже более менее универсальненько может даже сам буду где-нибудь использовать ))
Последний раз редактировалось demisang 2013.02.26, 01:30, всего редактировалось 2 раза.
Re: Форма с переменным числом полей
Спасибо, попробую