1. Главная
  2. Форумы
  3. Техподдержка Drupal
  4. Установка и настройка

Drupal Commerce. Нельзя положить в корзину при заходе на страницы AJAX пейджера.

Главные вкладки

Приветствую специалистов по Commerce и Drupal. Тестовый сайт: http://dev.stoleshnikov-delivery.ru/catalog/frukty-ovoshchi

Обыкновенная вьюха c аргументами как в Taxonomy term выводит товары от Commerce.
После того, как переходишь на страницу пейджера, по кнопке "Добавить в корзину" пишет ошибки:

[{"command":"settings","settings":{"basePath":"\/","pathPrefix":"","ajaxPageState":{"theme":"bartik","theme_token":"OD4hEQ9RAG382XFk_aopA80nkCY3IWk66nDUFNhArcg"}},"merge":true}]

Если отключить AJAX во вьюхе - все работает.

Это так и должно быть?
А как сделать чтобы и с AJAX работало?

Комментарии

Аватар пользователя VasyOK VasyOK 21 мая 2019 в 22:31

Аяксовая корзина отключена. Специально на тестовом сайте поотключал много, чтобы исключить влияние сторонних модулей.
Насколько я понял народ сообщает о том же что и я:
https://www.drupal.org/project/commerce/issues/2185239
https://www.drupal.org/project/commerce/issues/1294164
Кто-то пользуется этими решениями?

Аватар пользователя gun_dose gun_dose 22 мая 2019 в 9:54
1

Причём тут basePath? В ишью написано, что проблема в том, что экшн у форм - урл текущей страницы, а при отдаче контента аяксом вьюса текущая страница - это /views/ajax. И там в самом коллбэке стоит проверка, что если запрос пришёл не от аяксового вьюса, то выкидывается экзепшн. И тут basePath меняй, не меняй - толку не будет.

Как вариант, всё-таки попробовать поставить аяксовые корзинки, т.к. в семёрке у аяксовых форм экшн всегда /system/ajax, а не текущая страница.

Аватар пользователя VasyOK VasyOK 22 мая 2019 в 18:12

Самопис
https://www.drupal.org/project/commerce/issues/2185239 #6
решает проблему помещения в корзину на страницах ajax пейджера.

function hook_form_alter(&$form, &$form_state, $form_id) {
if (strpos ($form_id, 'commerce_cart_add_to_cart') !== FALSE) {
$query = drupal_http_build_query(drupal_get_query_parameters());
$form['#action'] = function hook_form_alter(&$form, &$form_state, $form_id) {
if (strpos ($form_id, 'commerce_cart_add_to_cart') !== FALSE) {
$query = drupal_http_build_query(drupal_get_query_parameters());
$form['#action'] = base_path () . current_path() . '?' . $query;
}
}
. current_path() . '?' . $query;
}
}

Тут действительно встречается base_path(), но правки settings.php (мне) не помогли.

Также установил views_load_more и этот патч
https://www.drupal.org/project/commerce/issues/2185239

Ботанирую.

Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /