Добавить и удалить поля формы в Cakephp - PullRequest
1 голос
/ 28 января 2010

Я ищу способ иметь форму в CakePHP, чтобы пользователь мог добавлять и удалять поля формы перед отправкой. После осмотра и запроса IRC-торта ответ, похоже, будет использовать Jquery, но после нескольких часов поиска вокруг я не могу понять, как это сделать.

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 28 января 2010

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

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

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

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

    $(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 голосов
/ 07 августа 2017

Это был мой подход к удалению элементов:

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

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-> data ['Deal'] ['extrapicture1uploaddeleted']! = '1' означает, что дополнительное изображение 1 не было удалено (удаление кнопки загрузки с помощью JavaScript). $ this-> data ['Deal'] ['extrapicture1uploaddeleted'] == '1' означает, что изображение было удалено.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...