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

Аватар пользователя VasyOK VasyOK 21 мая в 15:29

Приветствую специалистов по 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 работало?

0 Thanks

Комментарии

Аватар пользователя gun_dose gun_dose 21 мая в 21:58

Корзика тоже аяксовая? Я уже не помню точно, лечится это или нет, но на восьмёрке такая же фигня))) поэтому я обычно отключаю аякс с этих вьюх.

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

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

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

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

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

Аватар пользователя VasyOK VasyOK 22 мая в 13:45

С аяксовыми корзинами тоже не работает. Я специально все отключил, чтоб заработало хотя бы без аяксовых корзин.

Аватар пользователя VasyOK VasyOK 22 мая в 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

Ботанирую.

Аватар пользователя gun_dose gun_dose 23 мая в 7:53

Ну ты ж смотри, здесь к base_path() добавляется current_path(), который как раз влияет на отправку формы.