Автор Тема: Вывод комбинаций товаров на страницу товара  (Прочитано 556 раз)

02 Апрель 2020, 11:23:13
  • Новичок
  • *
  • Сообщений: 9
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
День добрый!
Хочу выводить комбинации товара с кнопкой покупки на страницу товара. Дописал 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}

02 Апрель 2020, 12:12:52
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
В шаблоне нельзя отсортировать вывод, точне можно но придеться переделывать функции smarty.
Проще в контроллере/классе сразу добавить сортировку в sql запрос.
В классе Product есть метод sortCombinationByAttributePosition, он для админки, но можно его использовать для сортировки.
Можно свой метод добавить.
02 Апрель 2020, 12:36:31
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Можно отсортировать combinations перед передачей в шаблон.
02 Апрель 2020, 12:46:06
Ответ #3
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Отсортировать можно в контроллере ProductController.php в методе assignAttributesGroups
$this->context->smarty->assign(array(
       'groups' => array(),
       'combinations' => array(),
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
02 Апрель 2020, 12:49:47
Ответ #4
  • Новичок
  • *
  • Сообщений: 9
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Отсортировать можно в контроллере ProductController.php в методе assignAttributesGroups
$this->context->smarty->assign(array(
       'groups' => array(),
       'combinations' => array(),
Спасибо!!! если можно - попонятнее - что мне туда вписать, чтоб комбинации выходили по их id, или по созданию
02 Апрель 2020, 13:13:00
Ответ #5
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Комбинации и так по id выводятся.
Выводите массив комбинаций
<pre>{$combinations|var_dump}</pre>видите что они по id сохранены 1,2...
02 Апрель 2020, 13:31:22
Ответ #6
  • Новичок
  • *
  • Сообщений: 9
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Комбинации и так по id выводятся.
Выводите массив комбинаций
<pre>{$combinations|var_dump}</pre>видите что они по id сохранены 1,2...
Cпасибо! попробовал вывести var_dump-ом - так же выводятся как Бог надушу положит - каждый раз по-новому. Не понимаю - почему они из массива лезут толпой а не по порядку? ))
02 Апрель 2020, 13:36:08
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
У меня prestashop 1.7.6.4 перегружаю страницу несколько раз и каждый раз вывод одинаковый с id=1 и дальше попорядку.
02 Апрель 2020, 13:50:24
Ответ #8
  • Новичок
  • *
  • Сообщений: 9
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
У меня 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
02 Апрель 2020, 14:10:34
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 1808
  • Репутация: +49/-1
  • Сообщество PrestaShop
    • Просмотр профиля
У вас ссылка с выбранными фильтрами, поэтому и меняется сортировка.
На основной странице сортирует движок, при выборе фильтров сортировка в модуле фильтров.
02 Апрель 2020, 14:15:53
Ответ #10
  • Новичок
  • *
  • Сообщений: 9
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
У вас ссылка с выбранными фильтрами, поэтому и меняется сортировка.
На основной странице сортирует движок, при выборе фильтров сортировка в модуле фильтров.
Спасибо огромное! Я начинаю допирать - сижу убираю эту фильтрацию
02 Апрель 2020, 14:28:28
Ответ #11
  • Новичок
  • *
  • Сообщений: 9
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
У вас ссылка с выбранными фильтрами, поэтому и меняется сортировка.
На основной странице сортирует движок, при выборе фильтров сортировка в модуле фильтров.
Спасибо огромное! Я начинаю допирать - сижу убираю эту фильтрацию
Тупик) В product.tpl - вырезал все, лотерея не прекратилась. Может гдето еще нужно подправить?
02 Апрель 2020, 15:34:41
Ответ #12
  • Ветеран
  • *****
  • Сообщений: 1614
  • Репутация: +32/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Задача похожа на вывод комбинаций в табличной форме.
Для prestashop 1.6 была такая тема здесь на форуме.
Модуль еще есть для такого вывода.
02 Апрель 2020, 15:46:53
Ответ #13
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
02 Апрель 2020, 23:27:35
Ответ #14
  • Новичок
  • *
  • Сообщений: 9
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Можно отсортировать combinations перед передачей в шаблон.
Уважаемые гуру, кто-нибудь может за вознаграждение помочь решить мою проблему? Еще раз - при переходе на страницу товара я получаю комбинации, отсортированные по первому attribute (из трех) - тут все ок. Следующие два - валят как хотят. Мне критично важно чтобы все три аттрибута шли по порядку.