2010-01-28 3 views
1

Im ищет способ иметь форму в cakephp, которую пользователь может добавлять и удалять поля формы перед отправкой, после осмотра и запроса на торт IRC ответ кажется используйте Jquery, но после нескольких часов осмотра я не могу понять, как это сделать.Добавить и удалить поля формы в Cakephp

Один пример я имею это в торт я нашел на - http://www.mail-archive.com/[email protected]/msg61061.html, но после того, как все мои усилия, я не могу получить этот код, чтобы работать правильно (я думаю, что его призывающих контроллеры/моделей, которые не перечисляют в примере)

Я также нашел прямой пример jQuery (http://mohdshaiful.wordpress.com/2007/05/31/form-elements-generation-using-jquery/), который делает то, что мне бы хотелось, чтобы моя форма была выполнена, но я не могу решить, как использовать хелпер формы cakephp с ней, чтобы заставить ее работать правильно и получить правильное название. (очевидно, помощник $ form - php, поэтому я не могу сгенерировать что-либо с этим после загрузки браузера).

Я новый к пирогу и никогда не использовал jQuery, и я абсолютно зациклен на том, как это сделать, поэтому, если у кого-то есть пример cakephp, он работает или может указать мне в правильном направлении, что мне нужно для завершения этого будет очень признателен.

Заранее спасибо

ответ

6

Я бы прямой маршрут Jquery, лично. Я полагаю, вы могли бы PHP генерировать код для jquery для вставки (таким образом вы могли бы использовать хелпер формы), но он добавляет сложности, не нажимая ничего.

Поскольку хелпер формы просто генерирует html, взгляните на html, который вы хотите сгенерировать. Предположим, вы хотите, чтобы что-то «добавляло другое поле», при нажатии на него добавляется другое поле в html. Ваш HTML, чтобы добавить будет что-то вроде:

<input type="text" name="data[User][field][0]" /> 

Теперь, чтобы использовать JQuery, чтобы вставить его, я хотел бы сделать что-то вроде связывания функции add_field на событие щелчка по ссылке.

$(document).ready(function() { 
     $("#link_id").click('add_field'); 
     var field_count = 1; 
    }); 

    function add_field() 
    { 
     var f = $("#div_addfield"); 
     f.append('<input type="text" name="data[User][field][' + field_count + ']" />'); 
     field_count++; 
    } 

Конечно, если пользователь покидает страницу без отправки и возвращения, они теряют свои успехи, но я думаю, что это об основах того, что вы пытаетесь достичь.

+0

Отлично, я действительно рассматривал это как раз, но хотел посмотреть, есть ли еще более торт-ориентированный способ сделать это, Cheers – kwhohasamullet

+0

Это хороший ответ. как можно поставить валидацию на стороне сервера? и для экономии вы используете saveAll()? – Mikelangelo

0

Это был мой подход, чтобы удалить элементы:

По мнению, я должен был это:

echo $form->input('extrapicture1uploaddeleted', array('value' => 0)); 

Логика я следовал в том, что значение 0 означает, пока не будут удалены, а значение 1 означало удалено , следуя логической логике.

Это был обычный элемент ввода, но с CSS я использовал свойство display: none, потому что я не хотел, чтобы пользователи видели это в форме. Тогда я сделал то, что потом пользователи нажали кнопку «Удалить», чтобы удалить элемент ввода для загрузки изображения, появилось сообщение с подтверждением, и при подтверждении значение элемента ввода, скрытого с помощью CSS, изменилось бы с 0 на 1:

$("#deleteextrapicture1").click(
    function() { 
     if (confirm('Do you want to delete this picture?')) { 
      $('#extrapicture1upload').hide(); 
      // This is for an input element that contains a boolean value where 0 means not deleted, and 1 means deleted. 
      $('#DealExtrapicture1uploaddeleted').attr('value', '1'); 
     } 
     // This is used so that the link does not attempt to take users to another URL when clicked. 
     return false; 
    } 
); 

В контроллере, состояние $ this-> данные [ 'Deal'] [ 'extrapicture1uploaddeleted']! = '1' означает, что дополнительное изображение 1 не была удалена (удалить кнопку загрузки с JavaScript) , $ this-> data ['Deal'] ['extrapicture1uploaddeleted'] == '1' означает, что изображение было удалено.

Я попытался использовать скрытый элемент ввода и изменить его значение с помощью JavaScript так, как я объяснил выше, но у меня возникла ошибка черной дыры от CakePHP Security. По-видимому, это не позволило мне изменить значение входных элементов с помощью JavaScript, а затем отправить форму. Но когда я использовал обычные элементы ввода (не скрытые), я мог бы изменить их значения с помощью JavaScript и отправить форму без проблем. Мой подход состоял в том, чтобы использовать регулярные элементы ввода и скрывать их с помощью CSS, поскольку использование скрытых элементов ввода вызывало ошибку черной дыры при изменении их значений с помощью JavaScript и затем отправке формы.

Надеюсь, способ, которым я это сделал, может дать некоторый свет как возможный подход для удаления полей формы в CakePHP с использованием JavaScript.

Смежные вопросы