Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 107 комментариев

Илья
Илья
Здравствуйте! Может бы и мне поможете, не могу разобраться.

Нужно вывести в шаблоне чанк в случае, если в tv-параметре заполнен чекбокс.

В шаблоне чанк вызываю таким образом:

[[*tvname:notempty=`[[$chunk]]`]]

Сам tv-параметр (tvname) состоит из единственного чекбокса «Новинка». Идея в том, чтобы выводить иконку NEW (из чанка) в карточке товара в случае, если чекбокс заполнен.

В таком виде вывод не работает, а если в Параметры по умолчанию вписать Новинка==1, иконка отображается на всех карточках, и тех, где чекбокс заполнен, и где нет.

Пожалуйста, подскажите, что я делаю не так.
Антон Тарасов
Антон Тарасов
Создайте свой сниппет(выходной модификатор) с исходным кодом и подебажьте, почему не срабатывает:
$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;
Антон Тарасов
Антон Тарасов
вероятно есть желание выделить несколько активных позиций, этот вариант предложен в документации: 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…
ВитОс
ВитОс
в документации так написано
Обработка чекбоксов и мульти-селектора в пользовательском хуке
Если вы хотите установить поле массива (т.е. группу флажков с тем же именем или мульти-селектор) в preHook, вам нужно применить json_encode для значения массива.
$hook->setValue('hobbies',json_encode(array('music','films','books')));
или я не так понял?
как их заполнить?