setValue и Formit
есть сниппет getOrderStatus
<?php
$hook->setValue('status', "test");
return true;
и есть чанк с формой[[!FormIt? &hooks=`getOrderStatus` ]]
<form action="[[~[[*id]]]]" method="post" enctype="multipart/form-data">
<input type="text" name="number" placeholder="заказ" value="[[!+fi.number]]"/>
<input type="text" name="status" id="status" value="[[+fi.status]]" />
<input type="submit" value="отправить "/>
</form>
Что я делаю не так? Почему не могу установить value у поля status? Комментарии: 14
Потому что надо имя это сниппета указывать не в параметре hooks, а в prehooks
Пробовал, значения не вижу…
preHooks, с большой буквой
Я наверное зря не указал, что я хочу увидеть это значение после отправки формы
Насколько я вижу из приведённого вами кода, плейсхолдер для поля «status» написан как кэшируемый. Может в этом дело? Добавьте восклицательный знак перед плюсом, может поможет.
Действительно, кэшируемый… Исправил, но, к сожалению, не помогло.
А все остальные значения полей, после отправки формы, отображаются как надо? Показывается то, что было введено в форму до отправки?
Если оставить return true — значения сбрасываются. Если поменять на return false — значения сохраняются
Значения-то остаются, но это означает, что все остальные хуки выполнены не будут (вдруг у вас дальше по списку отправка email стоит? Или ещё что-нибудь. Так вот этого не произойдёт ибо возвращается false.)
Значит FormIt после удачного завершения своей работы и перезагрузки страницы удаляет значения плейсхолдеров, чтобы не показывать пользователю то, что он только что отправил (а показывает только при ошибках, что логично).
Вам надо копать в сторону того, чтобы формит не очищал свои плейсхолдеры после своей же работы. Читайте документацию к нему (ссылка выше), скорей всего там что-то по этому поводу есть.
Значит FormIt после удачного завершения своей работы и перезагрузки страницы удаляет значения плейсхолдеров, чтобы не показывать пользователю то, что он только что отправил (а показывает только при ошибках, что логично).
Вам надо копать в сторону того, чтобы формит не очищал свои плейсхолдеры после своей же работы. Читайте документацию к нему (ссылка выше), скорей всего там что-то по этому поводу есть.
Если есть какие-нибудь ошибки в форме, то FormIt автоматом добавляет плейсхолдеры из значений формы (точнее из $hook->getValues). Это сделано чтобы значения в форме не терялись при ошибке в одном из полей.
Но если в форме ошибок нет, то FormIt этого НЕ ДЕЛАЕТ. Устанавливает только fi.successMessage и подобные плейхолдеры.
Если вам нужно подставить в форму значение из хука, то нужно установить плейсхолдер в MODX самостоятельно, т.е. хук должен выглядеть следующим образом:
Но если в форме ошибок нет, то FormIt этого НЕ ДЕЛАЕТ. Устанавливает только fi.successMessage и подобные плейхолдеры.
Если вам нужно подставить в форму значение из хука, то нужно установить плейсхолдер в MODX самостоятельно, т.е. хук должен выглядеть следующим образом:
<?php
$modx->setPlaceholder($modx->getOption('placeholderPrefix', $formit->config, 'fi.') . 'status', "test");
return true;
Работает, премного благодарен!
Кстати, нашел параметр clearFieldsOnSuccess, по умолчанию 1
Если в вызове FormIt указать 0, то значение очищаться не будут. Тогда можно ставить и через $hook->setValue()
Если в вызове FormIt указать 0, то значение очищаться не будут. Тогда можно ставить и через $hook->setValue()
Видимо это то, что предлагали поискать в мануалах выше. Спасибо, попробую тоже.
Точно, оно)
А всего лишь надо было внимательно читать документацию! :-)
А всего лишь надо было внимательно читать документацию! :-)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.