Есть вьюха продуктов. У каждого товара кнопка commerce "Купить" с ajax. Ajax-ом подгружаю новый товары.
Первой проблемой было то что id у кнопок дублировалось. Начал передавать колбеку ID последней кнопки.
<?php
// В ajax запросе передаю последней ID, чтобы вышло так
$_POST['ajax_html_ids'][0] = 'edit-submit--13';
// Настройка вьюхи
$view = views_get_view($viewName);
$view->set_display($display);
$view->set_exposed_input($filters);
$view->set_items_per_page(12);
$view->is_cacheable = FALSE;
$view->execute();
$content = $view->preview();
$javascript = drupal_add_js(NULL, NULL);
$settings = FALSE;
if(isset(
$javascript['settings'])) {
$settings = call_user_func_array('array_merge_recursive', $javascript['settings']['data']);
}
$commands = array();
$commands[] = ajax_command_settings($settings, TRUE);
$commands[] = ajax_command_append('.view-search-product .view-content ul', $content);
print ajax_render($commands);
drupal_exit();
?>
Второй проблемой является, попытка нажать "Купить". В ответ ошибка, и обновление страницы.
В консоли "ajax.js?v=7.57:204 Uncaught Error: URL-адрес обратного вызова не является локальным и доверенным: /commerce/ajax/submit"
Отличия в ответе Drupal.settings.ajax.
Есть ли способ кошернее получать уникальные ID кнопок?
Как запустить commerce кнопки, есть вьюха загружена ajaxом?
Спасибо.
Комментарии
Если в настройках производительности все отключить (Буст, Адваг, кеширование), тогда идшники дублируются?
>Есть ли способ кошернее получать уникальные ID кнопок?
drupal_html_id
VasyOK, кеш не включен. Этот функционал еще на локалке.
sas@drupal.org, $_POST['ajax_html_ids'][0] специально для drupal_html_id()
Для теста, закомментировал строки где получаю ошибки в ajax.js
$(ajax.element).bind(element_settings.event, function (event) {
//if (!Drupal.settings.urlIsAjaxTrusted[ajax.url] && !Drupal.urlIsLocal(ajax.url)) {
// throw new Error(Drupal.t('The callback URL is not local and not trusted: !url', {'!url': ajax.url}));
//}
return ajax.eventResponse(this, event);
});
В консоли POST http://192.168.1.50/commerce/ajax/submit 404 (Not Found)
Сайт в папке, если что.
А каким модулем вы повесили аякс на корзинку?
gun_dose, сайт делал не я. Есть костомный модуль для этих целей. При клике появляется вьюха со списком товаров и кнопками "продолжить покупки" и "перейти в корзину".
Скорее всего в этом и проблема. Есть модуль Commerce Ajax Add to Cart. С его помощью это решается безо всяких проблем.
Кроме кеша, может быть еще Буст и Адваг. У вас точно ничего такого нет? Точно все отключено в производительности?
VasyOK, да
А во вьюхе выводящей товары кеш отключен? Модулей производительности точно нет?
Кеш отключен
Решено
Чтобы не дублировались id кнопок, передал в колбек последний id.
В PHP будет так $_POST['ajax_html_ids'][0]. Данные нужны функции drupal_html_id().
$.ajax({
type: "POST",
data: {
ajax_html_ids : {0: lastId},
},
});
Чтобы ноды фильтровались с учетом языка пользователя, в моем случаем пришлось сделать так
url: Drupal.settings.basePath + Drupal.settings.pathPrefix + 'ajax_pager',
});
Чтобы кнопки отрабатывали Ajax Drupal
Drupal.behaviors.commerceAjaxButton = {
attach: function (context, settings) {
$('.use-fast-ajax-submit:not(.ajax-processed)').addClass('ajax-processed').each(function () {
var base = $(this).attr('id');
Drupal.ajax[base] = new Drupal.ajax(base, this, {
url: settings.basePath + 'commerce/ajax/submit',
event: 'click',
progress: {'type':'throbber'}
});
});
}
};
})(jQuery);