Вопрос про PreHooks и checkbox

простая задача, но чего то не получается цо всем, подскажите что не так
в formIt установил preHooks
$hook->setValue('color',json_encode(array('blue','red','green')));
return true;
и вот так вывожу
<label>Color /[[!+fi.color]]</label>
<input type="checkbox" name="color[]" value="blue" [[!+fi.color:FormItIsChecked=`blue`]] > blue
<input type="checkbox" name="color[]" value="red" [[!+fi.color:FormItIsChecked=`red`]] > red
<input type="checkbox" name="color[]" value="green" [[!+fi.color:FormItIsChecked=`green`]] > green
в fi.color выводится
["blue","red","green"]
но вот почему то checkbox не выделяются
В чем проблема?
vit
vit
22 января 2025, 23:19
modx.pro
173
0

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

Наумов Алексей
23 января 2025, 09:05
0
А в чем смысл и задумка
$hook->setValue('color',json_encode(array('blue','red','green')));
?
    vit
    vit
    23 января 2025, 11:51
    0
    в документации так написано
    Обработка чекбоксов и мульти-селектора в пользовательском хуке
    Если вы хотите установить поле массива (т.е. группу флажков с тем же именем или мульти-селектор) в preHook, вам нужно применить json_encode для значения массива.
    $hook->setValue('hobbies',json_encode(array('music','films','books')));
    или я не так понял?
    как их заполнить?
      Антон Тарасов
      23 января 2025, 11:59
      0
      вероятно есть желание выделить несколько активных позиций, этот вариант предложен в документации: docs.modx.com/3.x/en/extras/formit/formit.tutorials-and-examples/handling-selects,-checkboxes-and-radios#handling-checkboxes-and-multiple-selects-in-a-custom-hook Вместо
      $hook->setValue('color',json_encode(array('blue','red','green')))
      @vit Попробуйте явно указать двойные кавычки так:
      $hook->setValue('color',json_encode(array("blue","red","green")))
      т.к. код выходного фильтра нынче выглядит так:
      $output = ' ';
      if ($input == $options) {
          $output = ' checked="checked"';
      }
      $input = strpos($input, '"') ? $modx->fromJSON($input) : explode(',', $input);
      if (!empty($input) && is_array($input) && in_array($options,$input)) {
        $output = ' checked="checked"';
      }
      P.S. хотя нет. сработать должен и в вашем случае после json_encode…
        vit
        vit
        23 января 2025, 15:05
        0
        так тоже не выводит(
      Антон Тарасов
      23 января 2025, 12:29
      0
      Создайте свой сниппет(выходной модификатор) с исходным кодом и подебажьте, почему не срабатывает:
      $hook->setValue('color',json_encode(array('blue','red','green')));
      <input type="checkbox" name="color[]" value="red" [[!+fi.color:FormItIsChecked2=`red`]] > red
      FormItIsChecked2:
      $output = ' ';
      if ($input == $options) {
          $output = ' checked="checked"';
      }
      $input = strpos($input, '"') ? $modx->fromJSON($input) : explode(',', $input);
      if (!empty($input) && is_array($input) && in_array($options,$input)) {
        $output = ' checked="checked"';
      }
      return $output;
        vit
        vit
        24 января 2025, 01:52
        0
        так не чего не выводит вообще
        vit
        vit
        26 января 2025, 17:19
        0
        Не работает если использовать феном
        {'!FetchIt' | snippet : [
                              'snippet' => 'FormIt',
                              'form' => 'add.tpl',
                              'preHooks' => 'foreach'
                            ]}
        если написать так то все работает
        [[!FetchIt?
                            &snippet=`FormIt`
                            &form=`add.tpl`
                            &preHooks=`foreach`
                         ]]
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          7