Вывод опций minishop2 в выпадающем списке на главной странице запросом к базе
Всем привет, всех с праздниками!!! Подскажите пожалуйста, возможно ли и как подтянуть опции minishop2 в выпадающем списке не на странице товара, а на главной. Так понимаю, нужно делать запросы к базе, но в этом деле я новичёк.
Задача дать возможность предварительного выбора опций для передачи их в get-параметры для поиска по сайту по данным опциям.
Как реализовать поиск, мне помогли и подсказали в этой заметке: modx.pro/help/22865
Так что дело вроде как за малым. Осталось как-то подтянуть опции.
Заранее спасибо!
Задача дать возможность предварительного выбора опций для передачи их в get-параметры для поиска по сайту по данным опциям.
Как реализовать поиск, мне помогли и подсказали в этой заметке: modx.pro/help/22865
Так что дело вроде как за малым. Осталось как-то подтянуть опции.
Заранее спасибо!
Комментарии: 20
Код ниже вернёт массив с данными всех опций. Его можно феномом разобрать или дописать этот код и возвращать уже готовый hml.
$options = $modx->getIterator('msOption');
$output = array();
foreach($options as $option){
$output[] = $option->toArray();
}
return $output;
Спасибо!
1. Создал сниппет с этим кодом prnt.sc/ZuVvCHGba7Ny
2. Вывел сниппет в шаблоне prnt.sc/szcJrmnmSQ2O
3. Вот что получилось: ARRAY prnt.sc/vVOULK-zDUZh
1. Создал сниппет с этим кодом prnt.sc/ZuVvCHGba7Ny
2. Вывел сниппет в шаблоне prnt.sc/szcJrmnmSQ2O
3. Вот что получилось: ARRAY prnt.sc/vVOULK-zDUZh
Всё правильно, я так и написал
Код ниже вернёт массив с данными всех опций.Массив надо разобрать. Вот ссылка на документацию по foreach в fenom. Либо можно сделать это в сниппите тем же foreach, только в php.
То есть, в сниппете мы сделали массив с опциями под названием option: prnt.sc/2KP4LPH3PSi6
А в шаблоне феном разбираем этот массив так? prnt.sc/n_EJth9nw9pr
Тогда на странице пустое поле: prnt.sc/iUZ68adwGFtX
А в шаблоне феном разбираем этот массив так? prnt.sc/n_EJth9nw9pr
Тогда на странице пустое поле: prnt.sc/iUZ68adwGFtX
Нашел такой вариант вывода опций, но выводятся только названия опций, а не значения: prnt.sc/EmEinITQ3NQt
<?php
$options = $modx->getIterator('msOption');
$output = '';
foreach ($options as $opt){
$values[] = $opt->get('caption').'=='.$opt->get('key');
}
$output = implode('||',$values);
return $output;
<?php
$options = $modx->getIterator('msOption');
$output = '';
foreach ($options as $opt){
$values[] = $opt->get('caption').'=='.$opt->get('key');
}
$output = implode('||',$values);
return $output;
Ведь задача вывести значения списком, например МаркиL mazda, kia, bmw… Модели: CX-7, Rio, X6
Пробую написать сниппет такого плана.
<?php
$options = $modx->getIterator('msOption');
$output = array();
$onlyoptions = marka, model;
foreach($options as $onlyoptions ){
$output[] = $onlyoptions ->get('key').'=='.$option->get('value');
}
return $output;
Не работает…
Пробую написать сниппет такого плана.
<?php
$options = $modx->getIterator('msOption');
$output = array();
$onlyoptions = marka, model;
foreach($options as $onlyoptions ){
$output[] = $onlyoptions ->get('key').'=='.$option->get('value');
}
return $output;
Не работает…
Константин, я же дал работающий код, а вы даже не смогли найти информацию о том, как сохранить результат работы сниппета в переменную.
{set $options = 'SnippetName' | snippet:[]}
{foreach $options as $option}
чтобы увидеть все поля в массиве.
{$option | print}
{/foreach}
Спасибо, я просто очень новичок в программировании, почти ноль в php по этому так туплю.
Понял, как вывести название полей.
Но не могу понять, как вывести именно значения конкретного поля: prnt.sc/2FKOYRKsdTPl
То есть не МОДЕЛЬ, а его значения: RIO, SOLARIS.
Может не правильно изначально сформулировал.
Понял, как вывести название полей.
Но не могу понять, как вывести именно значения конкретного поля: prnt.sc/2FKOYRKsdTPl
То есть не МОДЕЛЬ, а его значения: RIO, SOLARIS.
Может не правильно изначально сформулировал.
Ок, тогда, наверное, можно использовать стандартный сниппет в свойстве product укажи id любого товара у которого есть нужная опция
То есть создать технический товар, который будет содержать все существующие значения опций, указать его в product, но скрыть от индексации и публикации? Спасибо за идею. Точно же.
Получилось вывести, но почему-то значения опций идут через запятую: prnt.sc/tttKEXSIDpZU
Есть ли возможность каждое значение опции отдельным полем в выпадающем списке выводить?
Есть ли возможность каждое значение опции отдельным полем в выпадающем списке выводить?
Загляни в чанк посмотри, что там если там join убери, если нет, то используй модификатор split для разбиения строки в массив.
Join убрал, заменил на split
Теперь чанк такой:
И выводит, как я уже понял, массив Array: prntscr.com/bBdan3Y7zv1y
Выходит его теперь как-то разобрать foreach menom?
Теперь чанк такой:
<select name="marka" class="no-border jsSelect">
{foreach $options as $option}
{if $option.value is array}
<option value="{$option.value | split : ', '}">{$option.value | split : ', '}</option>
{else}
<option value="{$option.value}">{$option.value}</option>
{/if}
{/foreach}
</select>
И выводит, как я уже понял, массив Array: prntscr.com/bBdan3Y7zv1y
Выходит его теперь как-то разобрать foreach menom?
Я сейчас тебя удивлю, но в родном чанке от minishop2 уже всё за тебя написали.
{foreach $options as $name => $values}
<div class="form-group row align-items-center">
<label class="col-6 col-md-3 text-right text-md-left col-form-label" for="option_{$name}">{('ms2_product_' ~ $name) | lexicon}:</label>
<div class="col-6 col-md-9">
<select name="options[{$name}]" class="form-control col-md-6" id="option_{$name}">
{foreach $values as $value}
<option value="{$value}">{$value}</option>
{/foreach}
</select>
</div>
</div>
{/foreach}
Блин, туплю капец.
Вот вызов сниппета:
Вот вызов сниппета:
{$_modx->runSnippet('msProductOptions', [
'product' => 8875,
'tpl' => 'msProductOptionsSearchTpl'
'onlyOptions' => 'marka'
])}
Вот вместо прошлого кода вставил это и что получилось:<select name="marka" class="no-border jsSelect">
{foreach $options as $name => $values}
<div class="form-group row align-items-center">
<label class="col-6 col-md-3 text-right text-md-left col-form-label" for="option_{$name}">{('ms2_product_' ~ $name) | lexicon}:</label>
<div class="col-6 col-md-9">
<select name="options[{$name}]" class="form-control col-md-6" id="option_{$name}">
{foreach $values as $value}
<option value="{$value}">{$value}</option>
{/foreach}
</select>
</div>
</div>
{/foreach}
</select>
И выводит кракозяблу prntscr.com/W-SvGf1Es-rQ
Ты похоже и html недавно увидел, да? Ты в select запихнул div внутри которого другой select браузер в шоке.
Да, походу)
Но когда такой код чанка
Опять кракозябла
Но когда такой код чанка
{foreach $options as $name => $values}
<div class="form-group row align-items-center">
<label class="col-6 col-md-3 text-right text-md-left col-form-label" for="option_{$name}">{('ms2_product_' ~ $name) | lexicon}:</label>
<div class="col-6 col-md-9">
<select name="options[{$name}]" class="form-control col-md-6" id="option_{$name}">
{foreach $values as $value}
<option value="{$value}">{$value}</option>
{/foreach}
</select>
</div>
</div>
{/foreach}
Вот что выводит: prntscr.com/ujPFA_6LX2nQОпять кракозябла
А я ссылку на msProductOptions давал разве? Ты хоть описания сниппетов читай.
Заработало!!! Спасибо!!!
Пожалуйста, поставь хоть один плюсик что ли…
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.