Специалисты по Commerce есть?
Как сделать ajax блок корзины? Сделал через dc_ajax_add_cart. Проблема - не работает кнопка удалить.
https://www.drupal.org/project/dc_ajax_add_cart/issues/2930926 - не помагает.
В D7 работало c
https://www.drupal.org/sandbox/xandeadx/2621602
А сейчас как?
Комментарии
не помню точно, но тут вроде было:
https://www.drupal.org/project/commerce_cart_flyout
или кастом - там не очень много писать и достаточно просто
https://www.drupal.org/project/commerce_cart_flyout - в нем можно указать собственные вьюхи для блоков корзины? Если нет - в нем нет особого смысла.
там не вьюха, там другой подход. Там панель справа.
Как здесь https://demo.commercekickstart.com/product/cold-pressed-juice
https://www.drupal.org/project/commerce_addtocart_ajax и чуть более старый https://www.drupal.org/project/ajax_add_to_cart
Да, я пробовал эти и другие модули. Но они аяксируют стандартный блок корзины Комерца. А как сделать, чтобы автообновление шло в блоке корзины сделанном через views? Можно как-то изменить вывод стандартного блока корзины на вьюху?
в этом случае нужно писать кастом.
Я это делал на 7ке без всякого кастома. Изучаю вопрос.
Пока сделал так. Заменил стандартный блок корзины на вьюху:
mytheme.theme
$variables['featured'] = drupal_render(views_embed_view('mycartblock', 'block_1'));
}
commerce-cart-block.html.twig
{{ featured }}
{% endif %}
Тогда с модулем ajax_add_to_cart в блок корзины ajax-ом товар ложит.
Но вот в самом блоке остаются:
1) изменение количества
2) удаление позиции
И эти вещи не аяксируются
Более того, оно вообще не работает, если быстро нажимать.
Нужно юзать dc_ajax_add_cart. Затем нужно включить модуль dc_ajax_add_cart_views и в блочно-корзиночной вьюхе поля количества и удаления заменить на аналогичные аяксовые виджеты, предоставляемые указанным модулем.
подпишусь. закладки надо сделать
dc_ajax_add_cart - вот что-то совсем не задалась с ним работа на 8ке.
gun_dose, у тебя работает? С патчами какими-то?
1. В настройках отображения тип товара admin/commerce/config/product-types/default/edit/display
Вариации: Ajax add to cart form
2. Теперь товар выглядит так:
Товар в корзину ajax-ом ложит только если отмечено Override the unit price. Что это?
3. Попробовал переписать блок корзины своей вьюхой
Вьюха:
mytheme.theme
$variables['featured'] = drupal_render(views_embed_view('mycartblock', 'block_1'));
}
commerce-cart-block.html.twig
{{ featured }}
{% endif %}
После этой перезаписи - в корзину не ложит ajaxом . Хотя с другими модулями ложило.
Кнопка Remove в этом блоке и обновление корзины - вызывают глюки в блоке.
Накатил патч https://www.drupal.org/project/dc_ajax_add_cart/issues/2930926
После этого кнопка Remove в блоке корзины никак не реагирует на нажатие
Во-первых, зачем тебе поле цены в форме корзины?
Во-вторых, чем не нравится вариант поменять вьюху через настройки?
1. В отображениях вариации
admin/commerce/config/product-variation-types/default/edit/display
убрал все поля и все галочки с Расширенные параметры отображения.
Все равно на товаре выводится Override the unit price и поле ввода вариации. Откуда это? Возникает только если поставить в вариации Ajax add to cart form.
2. Поменять вьюху через настройки - это где?
1. Это рулится в настройках отображения формы позиции заказа, а не в вариации.
2. Не помню))) возможно, в настройках типа заказа или в настройках магазина.
1. Спасибо. Разбираюсь.
2. Это оно (?):
Администрирование - Торговля - Конфигурация - Order types
admin/commerce/config/order-types/default/edit
Если да, там нет вариантов для выбора.
чтобы появились надо иметь ещё одни такие же вьюса или отображения
Вверху скрин вьюхи блока корзины. Чего не ней не хватает, чтобы появилась?
Наверное теги надо проставить. Которые в средней колонке где-то.
Итак для того, чтобы использовать свою вьюху в качестве блока корзины, нужно отредактировать ее имя и указать Административные теги: commerce_cart_block - тогда в admin/commerce/config/order-types/default/edit появляется соотв. опция.
Но проблема остается.
dc_ajax_add_cart - в блок корзины ложит. А в самой корзине при ее AJAX обновлении происходит подмена контента корзины контентом страницы сайта.
Рис 1.
Рис 2.
После установки патча https://www.drupal.org/project/dc_ajax_add_cart/issues/2930926 обновление корзины не происходит нигде. Ни в блоке ни на странице /cart
Алексей, Василий, вы этим модулем точно пользуетесь? Или только Алексей?
Оказывается, самое важное я забыл. Я магазины делаю на своей сборке и у меня там есть один кастомный модуль, который делает эти волшебные кнопки. Например вот, как делается кнопка удаления:
https://github.com/wbxby/wbx_commerce/blob/master/src/Plugin/views/field...
Там приходится при сабмите из запроса вычищать лишнее из-за приколов с аяксом на восьмёрке.
Поставил модуль https://github.com/wbxby/wbx_commerce
добавил на вьюху корзины поле
(Order item) Позиция заказа: Remove button (WBX Ajax)
Не работает. При нажатии на кнопку удаления, в блок корзины копируется содержимое области контента. Как на скринах выше. На любой теме оформления.
Выпить яду?
У меня там стоит проверка айдишника вьюхи. Попробуй стандартную изменить, а не свою.
В стандартную вьюху commerce_cart_block добавил поле
(order_items: Order Item) Позиция заказа: Remove button (WBX Ajax)
Нажимаю кнопку удаления. Троббер крутиться. Ничего не происходит. Позиция из корзины удалена, но видно, это только после перезагрузки страницы.
Развернул все это на чистой инсталяшке Друпала с Комерцем - все работает.
Значит проблема во мне. Отлаживаю.
gun_dose, можно вопрос: почему после установки модуля wbx_commerce не работает страница корзины /cart? После удаления модуля страница есть.
Потому что основная цель модуля - это избежать повторного ввода адресов для шипинга и биллинга, плюс вывести весь чекаут на одну страницу. Я этот модуль делал для своих нужд, чтобы использовать на своих проектах, которые я собираю обычно так, как удобно мне. Естественно, что в других условиях это всё может не работать или работать неправильно. Поэтому если тебе нужна только аяксовая кнопка удаления, то проще забрать себе только код плагина. Ну и там ещё в файле .module есть hook_views_data_alter, где эта кнопка регистрируется в список полей.
Вроде понял, что нужно сделать.
Скажи пожалуйста: а поле количества из твоего модуля, оно обновляет поля
Позиция заказа: Общая стоимость
и
Глобальный: Общая сумма заказа в подвале
?
Или нужно что-то для этого сделать?
Оно блок корзины обновляет полностью - всё пересчитывается. В теории, даже если есть какие-то правила, что при покупке двух бутылок кефира батон в подарок, то и батон прилетит)) Единственное, там при обновлении блока корзины, если блок был раскрыт, то он закрывается
У меня почему-то обноление при изменеии количества не работает
Вьюха, commerce_cart_block:
Результат:
Я что-то упустил?
А виджет количества стандартный стоит? Его просто тоже менять надо.
Нужное последнее в списке?
Пробовал все ни одно не работает.
А как в popup окне корзины dc_ajax_add_cart вывести вьюху этой корзины?
Попробовал так:
mytheme.theme
$variables['featured'] = drupal_render(views_embed_view('commerce_cart_form ', 'default'));
}
dc-ajax-add-cart-popup.html.twig
{{ featured }}
{% endif %}
не работает
как минимум drupal_render лишнее, т.к. views_embed_view, вроде, уже рендер массив формирует
$variables['featured'] = views_embed_view('commerce_cart_form ', 'default');
}
все равно не работает.
И даже если использовать twig_tweak - все равно конструкции типа
{{ drupal_view_result('commerce_cart_form') }}
в dc-ajax-add-cart-popup.html.twig не дают результатов
Так, я понял. Вьюха commerce_cart_form не выводится, т.к. ей нужен аргумент. А какой у нее аргумент? Почему в предпросмотре вьюхи не выводится ничего? Я вижу, что там "Order: ID - Фиксированный". А как это понять? Какой токен аргумента?
order_id
Не получается order_id.
Хорошо упрощаем задачу. Специалисты по Комерц, подскажите: как вывести стандартные вьюхи commerce_cart_form и commerce_cart_block в page.html.twig?
может с доступом есть проблемы, у вьюхи есть проверка доступа? Ведь не каждый же может посмотреть заказ, тем более не свой
Я говорю о стандартных вьюхах корзины. Как их програмно вывести? Если анонимус совершает заказ, он же их видит как-то?
Корзина - это заказ.
Аноним1 != Аноним2, иначе бы любой аноним мог видеть заказы другого анонима
Т.е. программно вывести стандартные вьюхи корзины невозможно?
Почему? ))) Программно как раз таки можно сделать всё
Сложно? Если нет то как? Или чтоб отрендерить корзину нужно писать модуль?
Причем тут рендер корзины?
Вам же надо вьюс определенный вывести.
Значит что-то не так пишите просто, или не учитываете чего-то.
Сам не пробовал, будет время - попробую.
Василий Сергеевич, если есть проблема, ее нужно разбить на подпроблемы. Я уже не надеюсь выведать как вывести кастомную вьюху в окне кастомного модуля.
Что я хочу узнать сейчас: как программно вывести стандартные вьюхи корзины в page.html.twig. Другие вьюхи у меня получается вывести. Эти нет.
Кто весел, тот смеется, кто хочет, тот напьется!
Итак, для того, чтобы программно вывести вьюху корзины (и даже в popup окне модуля dc_ajax_add_cart), нужно наложить патч отсюда https://www.drupal.org/project/commerce/issues/2852363 и указать во вьюхе аргумент Order ID - Значение по умолчанию: Cart ID from current user
Кто нибудь этим пользуется?
Нашел еще одну неприятную особенность модуля dc_ajax_add_cart.
При обновлении корзины AJAX-ом создаются новые контейнеры
<div class="views-element-container">
<div class="js-view-dom-...">
Это так и должно быть? В смысле такое поведение аяксирования в модуле нормально вообще?