Вывод комбинаций товаров на страницу товара

Автор robinbobin, 02 апреля 2020, 11:23:13

« назад - далее »

robinbobin

День добрый!
Хочу выводить комбинации товара с кнопкой покупки на страницу товара. Дописал foreach в product.tpl. Все работает, но столкнулся с проблемой - порядок комбинаций товара - хаотический и при обновлении страницы меняется. Полагаю я некорректоно вписал from, key и item. Ничего не смог нагуглить о  том как правильно задавать loop по $combinations в 1.7. Что-то есть про прежние версии - не работает
Буду очень благодарен если кто-то сможет подсказать мне мою ошибку. Вот код,который я вставляю в шаблон:

{foreach from=$combinations key=key item=item}
<form id="buy_block"{if $PS_CATALOG_MODE && !isset($groups) && $product->quantity > 0} class="hidden"{/if} action="{$link->getPageLink('cart')|escape:'html':'UTF-8'}" method="post">

<!-- hidden datas -->
<p class="hidden">
<input type="hidden" name="token" value="{$static_token}" />
<input type="hidden" name="id_product" value="{$product->id|intval}" id="product_page_product_id" />
<input type="hidden" name="add" value="1" />
<input type="hidden" name="id_product_attribute" id="idCombination" value="{$key}" />
</p>


<div class="m-table__row">
<div class="flexrow">

<!--
<div class="col col__title">
<a href="/product.php.html">{$product->name|escape:'html':'UTF-8'}
{if $item.attributes_values.1}/{$item.attributes_values.1}{/if}
{if $item.attributes_values.1}/{$item.attributes_values.3}{/if}</a>
</div>
-->

<!--
<div class="col col__size"><strong>{$item.attributes_values.1}</strong></div>
<div class="col col__quantity">
<div class="quantity">
<span class="quantity__minus">-</span>
<input class="quantity__input" type="text" value="1" name="quantity">
<span class="quantity__plus">+</span>
</div>
</div>
-->

<div class="col col__btn">
<!-- <a href="/product.php.html#" class="btn btn__green button">Купить</a> -->
<button type="submit" name="Submit" class="btn btn__green button" style="padding:0;width:50%;">
{if $content_only && (isset($product->customization_required) && $product->customization_required)}{l s='Customize'}{else}{l s='add to cart'}{/if}
</button>
</div>
</div>

<div class="col__full clearfix">
{if $item.quantity > 0}
<p class="availability__yes">
<svg width="18" height="18">
<use xlink:href="#availability__yes"></use>
</svg>
{l s='Available'}
</p>
{else}
<p class="availability__no">
<svg width="18" height="18">
<use xlink:href="#availability__no"></use>
</svg>
{l s='Not available'}
</p>
{/if}
</div>
</div>
</form>
{/foreach}


coder

В шаблоне нельзя отсортировать вывод, точне можно но придеться переделывать функции smarty.
Проще в контроллере/классе сразу добавить сортировку в sql запрос.
В классе Product есть метод sortCombinationByAttributePosition, он для админки, но можно его использовать для сортировки.
Можно свой метод добавить.

Adik

Можно отсортировать combinations перед передачей в шаблон.

PrestaMan

Отсортировать можно в контроллере ProductController.php в методе assignAttributesGroups
$this->context->smarty->assign(array(
       'groups' => array(),
       'combinations' => array(),
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!

robinbobin

Цитата: PrestaMan от 02 апреля 2020, 12:46:06
Отсортировать можно в контроллере ProductController.php в методе assignAttributesGroups
$this->context->smarty->assign(array(
       'groups' => array(),
       'combinations' => array(),

Спасибо!!! если можно - попонятнее - что мне туда вписать, чтоб комбинации выходили по их id, или по созданию

Mr.Sen

Комбинации и так по id выводятся.
Выводите массив комбинаций
<pre>{$combinations|var_dump}</pre>
видите что они по id сохранены 1,2...

robinbobin

Цитата: Mr.Sen от 02 апреля 2020, 13:13:00
Комбинации и так по id выводятся.
Выводите массив комбинаций
<pre>{$combinations|var_dump}</pre>
видите что они по id сохранены 1,2...
Cпасибо! попробовал вывести var_dump-ом - так же выводятся как Бог надушу положит - каждый раз по-новому. Не понимаю - почему они из массива лезут толпой а не по порядку? ))

Mr.Sen

У меня prestashop 1.7.6.4 перегружаю страницу несколько раз и каждый раз вывод одинаковый с id=1 и дальше попорядку.

robinbobin

Цитата: Mr.Sen от 02 апреля 2020, 13:36:08
У меня prestashop 1.7.6.4 перегружаю страницу несколько раз и каждый раз вывод одинаковый с id=1 и дальше попорядку.

У меня такая же версия, но комбинации при обновлении страницы "пляшут". массив перебирается хаотично)) вот ссылка на эту лотерею)
http://teatr-estrada.ru/glavnaya/20-7557-snezhnya-koroleva.html#/28-parter-parter/36-ryad-6/49-mesto-1

Mr.Sen

У вас ссылка с выбранными фильтрами, поэтому и меняется сортировка.
На основной странице сортирует движок, при выборе фильтров сортировка в модуле фильтров.

robinbobin

Цитата: Mr.Sen от 02 апреля 2020, 14:10:34
У вас ссылка с выбранными фильтрами, поэтому и меняется сортировка.
На основной странице сортирует движок, при выборе фильтров сортировка в модуле фильтров.
Спасибо огромное! Я начинаю допирать - сижу убираю эту фильтрацию

robinbobin

Цитата: robinbobin от 02 апреля 2020, 14:15:53
Цитата: Mr.Sen от 02 апреля 2020, 14:10:34
У вас ссылка с выбранными фильтрами, поэтому и меняется сортировка.
На основной странице сортирует движок, при выборе фильтров сортировка в модуле фильтров.
Спасибо огромное! Я начинаю допирать - сижу убираю эту фильтрацию
Тупик) В product.tpl - вырезал все, лотерея не прекратилась. Может гдето еще нужно подправить?

mistral

Задача похожа на вывод комбинаций в табличной форме.
Для prestashop 1.6 была такая тема здесь на форуме.
Модуль еще есть для такого вывода.

mAgency

Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

robinbobin

Цитата: Adik от 02 апреля 2020, 12:36:31
Можно отсортировать combinations перед передачей в шаблон.
Уважаемые гуру, кто-нибудь может за вознаграждение помочь решить мою проблему? Еще раз - при переходе на страницу товара я получаю комбинации, отсортированные по первому attribute (из трех) - тут все ок. Следующие два - валят как хотят. Мне критично важно чтобы все три аттрибута шли по порядку.