Множественный список цветов

Добрый день!

Подскажите как обращаться к списку кодов цветов опции товара с типом «Множественный список цветов» miniShop2.

При выводе в фильтре mFilter2 (чанк tpl.mFilter2.filter.checkbox ) хотелось бы чтобы рядом с текстовым значением цвета, например «Красный» выводился кружок с HEX кодом цвета.

Код чанка
{var $key = $table ~ $delimeter ~ $filter}
<label for="mse2_{$key}_{$idx}" class="{$disabled}">
    <input type="checkbox" name="{$filter_key}" id="mse2_{$key}_{$idx}" value="{$value}" {$checked} {$disabled}/>
    <span>{$title}</span> <sup>{$num}</sup>
</label>
Заранее благодарен!
Роман Л.
29 октября 2023, 19:13
modx.pro
862
0

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

Артур Шевченко
29 октября 2023, 19:52
0
Можно посмотреть как он в базе хранится. Или спросить у @Алексей Смирнов
    Роман Л.
    29 октября 2023, 20:08
    0
    Обычный множественный список хранится в виде json
    {"values":["\u041f\u0440\u0438\u0445\u043e\u0436\u0430\u044f","\u0421\u043f\u0430\u043b\u044c\u043d\u044f","\u0413\u0430\u0440\u0434\u0435\u0440\u043e\u0431\u043d\u0430\u044f \u043a\u043e\u043c\u043d\u0430\u0442\u0430"]}

    Множественный список цветов так:
    {"values":[{"name":"\u0411\u0435\u043b\u044b\u0439","value":"#eee"},{"name":"\u0427\u0451\u0440\u043d\u044b\u0439","value":"#000"},{"name":"\u0421\u0435\u0440\u044b\u0439","value":"#999"},{"name":"\u041a\u0440\u0435\u043c\u043e\u0432\u044b\u0439","value":"#e8deb0"}]}
    При выводе в чанке в {$value} попадает только 1 поле (name)
      Артур Шевченко
      29 октября 2023, 20:16
      0
      А, погоди, тебе в фильтрах же надо, тут есть фундаментальная проблема: в значения фильтров попадает название цвета, т.е. тебе нужно получить список названий со списком значений и из этого массива по названию получать значения.
        Роман Л.
        29 октября 2023, 22:55
        0
        Да в фильтрах.
        Просто думал раз опцию с таким типом добавили в miniShop2, то и обращаться к данным этой опции как то попроще получится, без лишних запросов в базу.
          Артур Шевченко
          29 октября 2023, 23:42
          0
          Во-первых, minishop2 и msearch2 это разные компоненты и у них разные разработчики. Во-вторых, запрос нужен всего один — получить ассоциативный массив и записать его в плейсхолдер, если конечно ты используешь Fenom
    Сергей
    05 мая 2024, 18:21
    0
    Получилось реализовать? я тоже столкнулся с этой же проблемой, инструкция нет, куда копать не понятно
      Роман Л.
      05 мая 2024, 18:28
      0
      К сожалению нет, не получилось.
        Алексей Смирнов
        05 мая 2024, 20:22
        +1
        Обсуждение возможностей тут github.com/modx-pro/miniShop2/pull/761
        А чтобы вытащить значения из БД в удобном формате — достаточно написать небольшой сниппет и результат его работы сохранить в переменную или Placeholder или setOption.
        Простой сниппет Kvazicolor который вытащит сопоставление:
        $name = 'colorushka'; // имя опции которая имеет цвета.
        $tableon = $modx->getOption('table_prefix');
        $asf = $modx->query("SELECT properties FROM `".$tableon."ms2_options` WHERE `key` = '".$name."'")->fetch(PDO::FETCH_ASSOC);
        $out = json_decode($as['properties'],1);
        $outx = [];
        foreach ($out['values'] as $line){
            $outx[$line['name']] = $line['value'];
        }
        return $outx;
        Далее в феноме до вызова mfiler засунуть это все в плейсхолдер, например:
        {set $mypole = 'colorushka'}
        {set $masscol[$lit['alias']] = 'Kvazicolor' | snippet : ['name' => $mypole]}
        {$_modx->setPlaceholder('arrcolors',$masscol)}
        Далее в чанке row
        получаем:
        {var $key = $table ~ $delimeter ~ $filter}
        {set $ezhikcolors = 'arrcolors' | placeholder}
        ..... любой код ....
        <span class="checking" style="background-color: {$ezhikcolors [$filter_key][$value]}">{$title}</span>
        Вот как то так.
          Сергей
          05 мая 2024, 23:01
          0
          я делаю связи и задача не в товаре а просто в каталоге вывести точки с цветом (hex) и я не понимаю как применить то что написали выше. Если не сложно, можете дать пример вывода? или напишите мне в ЛС я готов оплатить поддержку
            Алексей Смирнов
            06 мая 2024, 17:01
            0
            Вы не указали где именно вывести.
            Есть у нас как минимум 3 места: Страница товара, страница со списком товаров, корзина.
            На странице товара пример есть по ссылке в теме гитхаба,
            списки что в корзине что в каталоге — расписал.
            по работе — лучше создайте или на сайте или в телеграмм-канале (раздел работа) предложение о работе — кто-нибудь откликнется.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        10