
Столкнулся с небольшой проблемой: есть форма, в которой пользователь может указать несколько телефонов. Количество телефонов может быть любым, поэтому сделал динамическое добавление полей для телефона, если пользователю необходимо:
<div class="control-group"> <label class="control-label" for="contractor_phone">Телефон</label> <div class="controls"> <div class="input-append"> <input type="text" id="contractor_phone" name="contractor_phone[]"> <span class="btn" id="add_phone"><i class="icon icon-plus"></i></span> <div id="addPhones"></div> </div> </div> </div> <script type="text/javascript"> $("#add_phone").click(function() { $("#addPhones").append('<input type="text" name="contractor_phone[]">'); }); </script>В итоге в $_POST['contractor_phone'] приходит массив телефонов.
Здесь проблем нет. Проблемы начинаются, если пользователь не заполнил какое-то обязательное поле. В этом случае FormIt возвращает пользователя на ту же страницу, выводит сообщения об ошибках и значения, которые пользователь уже ввел, в плейсхолдеры.
К нашему массиву доступ есть, но если вывести плейсхолдер [[!+fi.contractor_phone]], мы получим все значения из массива через запятую. Можно получить каждое конкретное значение так: [[!+fi.contractor_phone.0]], [[!+fi.contractor_phone.1]]… Но нам-то нужно каждое значение вывести в своем поле. Если бы у нас было поле radio, то этого нам хватило бы, но мы ко всему прочему не знаем, сколько у нас будет полей — у каждого пользователя по-своему.
Выхода два:
- С помощью JavaScript разбираем строку [[!+fi.contractor_phone]] на отдельные значения и создаем поля;
- Самостоятельно анализируем $_POST['contractor_phone'] и создаваем поля.
Я пошел по второму пути.
В форме есть div, в который добавляются поля. Туда же и прописываем вызов нашего сниппета:
... <div id="addPhones">[[!contractorPhonesAdd]]</div> ...Код сниппета:
if (!$_POST['contractor_phone']) return; $phones = $_POST['contractor_phone']; foreach ($phones as $phone) { $output .= $modx->getChunk('tpl.contractorPhonesAdd', array('phone' => $phone)); } return $output;
Чанк tpl.contractorPhonesAdd
<input type="text" name="contractor_phone[]" value="[[+phone]]">
Теперь пользователь оценит бережное отношение к данным, которые он вводит. И мы не будем заставлять пользователя несколько раз подряд вводить одно и то же. G+
Оригинал статьи community.modx-cms.ru/blog/tips_and_tricks/9069.html
в письме [[!+fi.contractor_phone]] и не в какую не подставляет данные
Если ставить [[contractor_phone]] выводит список телефонов но без разделителей…
[[contractor_phone.0]] тоже не работает (((
Я сделал селект с емайлами, пробовал подставлять в скрытые поля, но все равно использует emailTo указанный в вызове
связка AjaxForm и FormIt