msProductOptions вывод характеристик в виде ссылок на ресурсы Вопрос.

Добрый день возникла необходимость при выводе опций из minishop они выводились в виде ссылок на определённые ресурсы. Сейчас они выводятся в виде текста через msProductOptions. Думаю может в шаблоне как то через переменные. Честно говоря не силён в этом. Может кто подскажет.
Александр
16 августа 2021, 18:12
modx.pro
669
0

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

Тодор
17 августа 2021, 15:29
0
Создаеш TV, с типом ввода — Список (множественный выбор)
В поле вожможные значения пишеш чтото такое
@EVAL return $modx->runSnippet('msProducts', array(
    'parents'=>$parentID,
    'where'=>'{"Data.price:>=":"150"}',
    'limit'=>0,
    'sortby'=>'{"pagetitle":"ASC"}',
    'tplOuter'=>'@INLINE [[+output]]',
    'tpl'=>'@INLINE [[+pagetitle]]==[[+id]]',
    'outputSeparator'=>'||'
));
А при выводе на сайте береш значение твоей TV и передаеш в pdoResources
{'!pdoResources' | snippet:[
    'parents' => 0,
    'limit' => 0,
    'resources' => $_modx->resource.your_tv_field,
    'tpl' => '@INLINE <a href="{$uri}">{$pagetitle}</a>'
]}
я только не помню точно ставит ли «Список (множественный выбор)» — какой-то свой разделитель между значениями, если ето не "," то надо будет заменить розделитель
    Александр
    17 августа 2021, 16:16
    0
    Спасибо, но в этом случае как я понимаю он все опции в виде ссылок выкинет. А если нужны определённые характеристики в виде ссылок на ресурсы? Может быть в шаблоне с применением If? Допустим если «value == встроенная» то один вывод где значение в виде ссылки если значение другое то другой вывод. Извиняюсь в php не силён. )))) Я конечно понимаю, что это костыль, но ситуация, что нужно именно так сделать.
      Тодор
      18 августа 2021, 14:06
      0
      {if in_array($id, [100, 150, 154])}
          <a href="{$uri}">{$pagetitle}</a>
      {else}
          {$pagetitle}
      {/if}
      только может быть такое что модыфикаторы не сработають для tpl — @INLINE и надо будет создавать отдельний чанк для этого
    Максим
    18 августа 2021, 14:45
    0
    Нужен конкретный пример. Какая конкретно опция (цвет, вес или еще что-то), как она забивается (тип какой: текст, число и т.п.), на какой ресурс должна вести, вообще логика работы в целом (т.е. что хочешь получить) и т.д.
    А так, если честно, не особо понятно…
      Александр
      20 августа 2021, 09:57
      0
      Есть вывод характеристик в карточках товара, нужно чтобы часть этих характеристик в виде ссылок на ресурсы была. Характеристики эти из вкладки «опции товара» minishop2
      Вот как то так: disk.yandex.ru/i/pYmShQ_blS7Olw
      Характеристики выводятся через msProductOptions tpl:
      {foreach $options as $option}
      {$option.caption}:

      {if $option.value is array}

      {$option.value | join: ', '}
      {else}
      {$option.value}
      {/if}


      {/foreach}
        Максим
        20 августа 2021, 17:12
        0
        Ну тогда как было написано выше. Только не по id, а прям по названию проверять. Примерно как-то так.
        {set $data = [
            'Фрезеровка' => 2,
            'Гравировка' => 123
        ]}
        {foreach $options as $option}
            ...
            {if in_array($option.value, $data)}
                <a href="{$data[$option.value]|url}">{$option.value}</a>
            {else}
                {$option.value}
            {/if}
            ...
        {/foreach}
          Александр
          21 августа 2021, 00:14
          0
          Что то подмена не срабатывает. array пишет во всех строках
            Максим
            22 августа 2021, 10:44
            0
            У меня просто пример, не проверял. В примере многоточие стоят. Это означает, что там другой код должен быть. А именно — проверка на массив и т.п.
            Может быть даже лучше в отдельный сниппет вынести.
            {set $data = [
                'Фрезеровка' => 2,
                'Гравировка' => 123
            ]}
            {foreach $options as $option}
                {if $option.value is array}
                    {foreach $option.value as $key => $value}
                        {if in_array($value, $data)}
                            {set $option.value[$key]}
                                <a href="{$data[$value]|url}">{$value}</a>
                            {/set}
                    {/foreach}
                    {$option.value | join: ', '}
                {/if}
                ...
            {/foreach}
            (не проверял)
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      8