Приветствую. Пытаюсь сделать вывод товаров вьюшкой, выбираю выводить товары, так как вариации нет смысла выводить, особенно если там например 10 размеров одного и того же товара. Но если выводить товары, то нет ссылки для добавления товаров в перечне доступных полей. Поле появляется в случае если мы добавляем связь с вариациями, но в этом случае у нас начинаю выводиться все вариации. Помогите решить ребус) как в итоге вывести товары, но со ссылками добавления в корзину?
У некоторых популярных магазинов при клике на добавление в корзину товара всплывает форма с выбором вариации(например размера). Есть ли что то подобное для Drupal?
Вывод товаров Commerce
Главные вкладки
Лучший ответ
Вы знаете как пользоваться перезаписью варианта отображение например teaser товара ? В этом случае во вьюхе списка товаров нужно выводить не поля, а teaser, и тогда там всё есть и связей с вариациями не надо. В списках появляется выбор и цвета и чего угодно, наверно так получится. В этом же шаблоне teaser можно делать что угодно. Скрыть изначально цвета, а показать при нажатии на кнопку "завтра". Только всё равно не как вайлдберриз будет, а нужно будет сначала выбрать цвет а потом добавить в корзину (сделать кнопку в корзину во всплывающем блоке рядом с выбором цвета). Меня тут кто то научил пользоваться перезаписью шаблонов, с тех пор так и делаю, это намного лучше чем поля во вьюхе ковырять.
Т.е. из модуля коммерца копируется файл commerce-product.html.twig в свою тему, переименовывается в commerce-product--teaser.html.twig и там уже выводится что угодно, например:
{# ------- вывод изображений ------- #}
{{ product.field_product_photo }}
{# ------- Вывод заголовка ------- #}
<a href="{{ product_url }}">{{ product_entity.title.value }}</a>
{# ------- Вывод краткого описания ------- #}
{{ product_entity.field_product_short_description.value|raw }}
</div>
<div class="productlist-bottom">
{# ------- вывод цены ------- #}
{{ product.variation_price }}
{# ------- вывод кнопки добавления в корзину если вариация есть ------- #}
{% if product.variation_sku %}
<div class="order-button">
{{ product.variations }}
</div>
{% endif %}
{# ------- ссылка на редактирование товара ------- #}
{% if user.hasPermission('administer nodes') %}
<div class="edit-material-button">
<a href="/product/{{ product_entity.id() }}/edit?destination={{ path('<current>') }}">{{ 'Edit' }}</a>
</div>
{% endif %}
</div>
Комментарии
Я вам модуль commerce_variation_cart_form советовал? Не помню уже.
Благодарю, нет, не мне, но на форуме видел этот ответ когда шерстил инфу. Но он вроде бы для корзины только, нет?
Он для того, чтобы при выводе полей товара в views можно было вывести его вариации с кнопками Корзины и изменения количества. Сложно. Но можно.
Понял, спасибо, теперь у меня есть два варианта, что то точно должно подойти)
Одна беда от этих вариаций и путаница (feeds косой, клонирования нет). Я в своих сайтах использую модуль EVA. Оно позволяет вывести на странице товара другие товары, а вариация у товара только одна. Принцип такой:
- создается любое текстовое поле в товаре
- создается views EVA, которое выводит все товары, у которого в этом поле одинаковое слово, исключая тот товар, на странице которого этот views показывается (настройка views заковыристая, инструкция в интернете где-то)
- этот views выводится на странице товара (я вывожу в шаблоне twig товара в нужном месте)
Получается страница товара, у которого присутствуют другие варианты товара. Например добавляем 5 носков с разными размерами, у всех этих 5 носков, указываем в созданном поле одинаковое слово, например начальную часть артикула "noskitop". В итоге все носки показаны друг у друга на странице. Удивился кода в Ozon Seller зарегистрировался, а там тот же смысл, любое слово используется для объединения товаров. У меня по этому принципу три поля - варианты, похожие и товары в комплект. Все друг у друга можно вывести.
Кто бы теперь модуль клонирования товара придумал, так как его нет. Клонируется только товар, а вариация остается общая, это очень тяжкая ситуация, которая мешает полному довольству.
Кому может пригодится инфо.
Благодарю, надо посмотреть, звучит интересно) Остается только вопрос - а если мы выводим во вьшке такие товары и там нам надо вывести ссылку на добавление в корзину, то товар с каким из свойств пользователь себе добавит и есть ли варианты на это повлиять?
Это же будут отдельные товары буквально, тот товар и добавится на который нажали. Но можно не выводить сразу ссылку на добавление в корзину как у меня, и тогда сначала человек нажмет на иконку товара-варианта, откроется страница этого товара, и затем уже добавит в корзину (так например на озоне и им подобным). Я просто очень не люблю вариации встроенные, были проблемы, пустые вариации, ошибки после feeds и так далее. Да и на вариациях не сделать универсальный сайт. А тут что хочешь меняй в товаре, хоть совершенно новый товар делай, он все равно будет показан как опция под другим товаром (я просто универсальный сайт делаю, типа конструктора, затем добавлю опцию чтобы изменить полный показ вариантов товаров на просто иконки, как на скриншоте другого сайта с блинами (там еще сделал что при наведении мыши показывается цена и название, это же вьюха обычная с полями, поэтому настроить можно как угодно), да и я делаю сайты которыми даже предпенсионер далекий от ПК сможет управлять, поэтому сложно таким объяснять что такое вариации, как добавлять, как удалять .....). Логика 1 товар - 1 вариация понятнее и безпроблемнее.
В товаре добавляется текстовое поле обычное (на скриншоте это "товары в комплект" например), далее вьюха EVA делается (всё тоже на скриншотах).
Сам блок EVA с вариантами товара после создания вьюхи выводится стандартным полем товара коммерца, либо если используете шаблоны как я делаю (commerce-product.html.twig), там можно вывести по принципу:
{{ elements.машинное_имя_views_машинное_имя_блока_EVA }}
Например:
{% if product_entity.field_product_bundle.value %}
<div id="productsbundle" class="product-addon mobcard-small">
<div class="vertical-title">
<h2>В комплект</h2>
</div>
{{ elements.product_bundle_entity_view_1 }}
</div>
{% endif %}
{# ------- EVA: ВЫВОД ДРУГИХ ВАРИАНТОВ ТОВАРОВ ------- #}
{% if product_entity.field_product_versions.value %}
<div id="productvariations" class="product-addon mobcard-small">
<div class="vertical-title">
<h2>Варианты</h2>
</div>
{{ elements.product_versions_entity_view_1 }}
</div>
{% endif %}
Большое спасибо за такое подробное объяснение, буду разбираться, звучит интересно. Надо пощупать как там все устроено.
Единственное я вот не совсем опять же понимаю - если в этом модуле каждая вариация это отдельный товар, тогда все размеры и цвета у нас будут отображаться во вьюшке? Получится тогда что огромное количество одинаковых товаров в каталоге. Надо посмотреть как он работает.
Та на озонах всяких так и есть, куча одинаковых товаров разбросаны как попало, сейчас так модно. Хотя я наверно ваще не по теме (дошло сейчас), но кому нибудь пригодится. Вам надо чтобы сразу из списков можно было выбрать цвет, размер и добавить в корзину ? Зачем такое ? Один размер еще понятно, но цвет и размер сразу выбирать ? Или я недопонял что. А если нужна всплывающая форма, то в чем её преимущество перед простым заходом в товар и дальнейшим выбором там уже цветов и размеров ?
Я то сделал что если есть варианты у товара, появляется надпись что "есть варианты" на товаре в списках, и человек уже заходит в сам товар и там выбирает варианты либо покупает то, что в списке + на втором скриншоте как раз сделан чекбокс чтобы не захламлять списки.
Я вроде делал что в списках можно было выбрать вариацию и сразу добавить в корзину, только не помню как, наверно в перезаписи teaser шаблона коммерца, я всё делаю через шаблоны, посмотрю потом, может вспомню. Отказался от этой идеи потом. Плюс человека лучше заставить ползать по товарам, полезнее.
Спасибо. С цветом да, согласен, наверное его лучше делать другим товаром, но вот размер или объем им надо чтоб выбирали как например на Wildberries. Там когда кликаешь по кнопке с датой доставки или добавления в корзину, выдает форму в которой можно выбрать например размер. Вот думаю как это вообще организовать)
-
Но вообще кстати хорошая идея насчет чекбокса, что то я совсем упустил это, можно же просто помечать вариацию товара как основная например и во вьюшках выводить только основные для товара вариации.
Вы знаете как пользоваться перезаписью варианта отображение например teaser товара ? В этом случае во вьюхе списка товаров нужно выводить не поля, а teaser, и тогда там всё есть и связей с вариациями не надо. В списках появляется выбор и цвета и чего угодно, наверно так получится. В этом же шаблоне teaser можно делать что угодно. Скрыть изначально цвета, а показать при нажатии на кнопку "завтра". Только всё равно не как вайлдберриз будет, а нужно будет сначала выбрать цвет а потом добавить в корзину (сделать кнопку в корзину во всплывающем блоке рядом с выбором цвета). Меня тут кто то научил пользоваться перезаписью шаблонов, с тех пор так и делаю, это намного лучше чем поля во вьюхе ковырять.
Т.е. из модуля коммерца копируется файл commerce-product.html.twig в свою тему, переименовывается в commerce-product--teaser.html.twig и там уже выводится что угодно, например:
{# ------- вывод изображений ------- #}
{{ product.field_product_photo }}
{# ------- Вывод заголовка ------- #}
<a href="{{ product_url }}">{{ product_entity.title.value }}</a>
{# ------- Вывод краткого описания ------- #}
{{ product_entity.field_product_short_description.value|raw }}
</div>
<div class="productlist-bottom">
{# ------- вывод цены ------- #}
{{ product.variation_price }}
{# ------- вывод кнопки добавления в корзину если вариация есть ------- #}
{% if product.variation_sku %}
<div class="order-button">
{{ product.variations }}
</div>
{% endif %}
{# ------- ссылка на редактирование товара ------- #}
{% if user.hasPermission('administer nodes') %}
<div class="edit-material-button">
<a href="/product/{{ product_entity.id() }}/edit?destination={{ path('<current>') }}">{{ 'Edit' }}</a>
</div>
{% endif %}
</div>
Спасибо! Да, думаю это подойдет, как то можно будет обыграть, в 7ке это я помню прям в ноде писалось, что то наподобие
<?phpif($teaser)?>
А тут я думал избавились от этого, ковырялся, так и не понял как тизеры сделать отдельные. Отлично, благодарю.