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?
Николай Филимонов
18 марта 2014, 09:01
modx.pro
3 738
0

Комментарии: 14

Алексей Карташов
18 марта 2014, 13:59
0
Потому что надо имя это сниппета указывать не в параметре hooks, а в prehooks
    Николай Филимонов
    18 марта 2014, 14:08
    0
    Пробовал, значения не вижу…
      Алексей Карташов
      18 марта 2014, 14:19
      0
      preHooks, с большой буквой
        Николай Филимонов
        18 марта 2014, 14:21
        0
        Я наверное зря не указал, что я хочу увидеть это значение после отправки формы
          Алексей Карташов
          18 марта 2014, 14:28
          0
          Насколько я вижу из приведённого вами кода, плейсхолдер для поля «status» написан как кэшируемый. Может в этом дело? Добавьте восклицательный знак перед плюсом, может поможет.
            Николай Филимонов
            18 марта 2014, 14:46
            0
            Действительно, кэшируемый… Исправил, но, к сожалению, не помогло.
              Алексей Карташов
              18 марта 2014, 14:53
              0
              А все остальные значения полей, после отправки формы, отображаются как надо? Показывается то, что было введено в форму до отправки?
                Николай Филимонов
                18 марта 2014, 14:55
                0
                Если оставить return true — значения сбрасываются. Если поменять на return false — значения сохраняются
                  Алексей Карташов
                  18 марта 2014, 15:05
                  0
                  Значения-то остаются, но это означает, что все остальные хуки выполнены не будут (вдруг у вас дальше по списку отправка email стоит? Или ещё что-нибудь. Так вот этого не произойдёт ибо возвращается false.)

                  Значит FormIt после удачного завершения своей работы и перезагрузки страницы удаляет значения плейсхолдеров, чтобы не показывать пользователю то, что он только что отправил (а показывает только при ошибках, что логично).
                  Вам надо копать в сторону того, чтобы формит не очищал свои плейсхолдеры после своей же работы. Читайте документацию к нему (ссылка выше), скорей всего там что-то по этому поводу есть.
    Евгений Дурягин
    18 марта 2014, 15:41
    +1
    Если есть какие-нибудь ошибки в форме, то FormIt автоматом добавляет плейсхолдеры из значений формы (точнее из $hook->getValues). Это сделано чтобы значения в форме не терялись при ошибке в одном из полей.
    Но если в форме ошибок нет, то FormIt этого НЕ ДЕЛАЕТ. Устанавливает только fi.successMessage и подобные плейхолдеры.

    Если вам нужно подставить в форму значение из хука, то нужно установить плейсхолдер в MODX самостоятельно, т.е. хук должен выглядеть следующим образом:

    <?php
    $modx->setPlaceholder($modx->getOption('placeholderPrefix', $formit->config, 'fi.') . 'status', "test");
    return true;
      Николай Филимонов
      18 марта 2014, 15:45
      0
      Работает, премного благодарен!
        Евгений Дурягин
        18 марта 2014, 15:48
        0
        Кстати, нашел параметр clearFieldsOnSuccess, по умолчанию 1
        Если в вызове FormIt указать 0, то значение очищаться не будут. Тогда можно ставить и через $hook->setValue()
          Николай Филимонов
          18 марта 2014, 15:49
          0
          Видимо это то, что предлагали поискать в мануалах выше. Спасибо, попробую тоже.
            Алексей Карташов
            18 марта 2014, 16:03
            0
            Точно, оно)
            А всего лишь надо было внимательно читать документацию! :-)
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          14