msProductOptions вывод характеристик в виде ссылок на ресурсы Вопрос.
Добрый день возникла необходимость при выводе опций из minishop они выводились в виде ссылок на определённые ресурсы. Сейчас они выводятся в виде текста через msProductOptions. Думаю может в шаблоне как то через переменные. Честно говоря не силён в этом. Может кто подскажет.
Комментарии: 8
Создаеш 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>'
]}
я только не помню точно ставит ли «Список (множественный выбор)» — какой-то свой разделитель между значениями, если ето не "," то надо будет заменить розделитель
Спасибо, но в этом случае как я понимаю он все опции в виде ссылок выкинет. А если нужны определённые характеристики в виде ссылок на ресурсы? Может быть в шаблоне с применением If? Допустим если «value == встроенная» то один вывод где значение в виде ссылки если значение другое то другой вывод. Извиняюсь в php не силён. )))) Я конечно понимаю, что это костыль, но ситуация, что нужно именно так сделать.
{if in_array($id, [100, 150, 154])}
<a href="{$uri}">{$pagetitle}</a>
{else}
{$pagetitle}
{/if}
только может быть такое что модыфикаторы не сработають для tpl — @INLINE и надо будет создавать отдельний чанк для этого
Нужен конкретный пример. Какая конкретно опция (цвет, вес или еще что-то), как она забивается (тип какой: текст, число и т.п.), на какой ресурс должна вести, вообще логика работы в целом (т.е. что хочешь получить) и т.д.
А так, если честно, не особо понятно…
А так, если честно, не особо понятно…
Есть вывод характеристик в карточках товара, нужно чтобы часть этих характеристик в виде ссылок на ресурсы была. Характеристики эти из вкладки «опции товара» 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}
Вот как то так: 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}
Ну тогда как было написано выше. Только не по 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}
Что то подмена не срабатывает. array пишет во всех строках
У меня просто пример, не проверял. В примере многоточие стоят. Это означает, что там другой код должен быть. А именно — проверка на массив и т.п.
Может быть даже лучше в отдельный сниппет вынести.
Может быть даже лучше в отдельный сниппет вынести.
{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}
(не проверял)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.