Рейтинг:1

Перезагрузить представление commerce_cart_form

флаг kn

я связываюсь Друпал коммерция, DC добавить в корзину ajax и коммерческие всплывающие модули.

Это моя конфигурация просмотра:

введите описание изображения здесь

На моем /корзина страница, у меня есть исходная форма (представление), чтобы изменить количество, удалить элементы и т.д...

У меня также есть ползунок товара, который благодаря модулю «ajax добавить в корзину» позволяет добавить в корзину несколько товаров.

Ожидаемое поведение:

  • Всякий раз, когда я обновляю количество или удаляю элемент из всплывающего меню, необходимо обновить форму (включая общую сумму)
  • Всякий раз, когда я обновляю количество или удаляю элемент из формы, всплывающее окно необходимо перезагружать (включая общее количество)
  • Всякий раз, когда я обновляю количество или удаляю из ползунка, необходимо обновить как всплывающее окно, так и форму.

В js я пытался запускать их по отдельности после нажатия кнопок, вызывая собственный код ajax для восстановления представления и всплывающего меню.

/**
 * Перезагрузить все представление содержимого страницы (форма)
 */
функция перестроитьViewPanier() {
    //$("#commerce_cart_form-cart-ajax-wrapper").triggerHandler("RefreshView");
    $.ajax({
        URL-адрес: "/ajax_update_cart_panier"
    }).done(функция (данные) {
        если (данные [3] !== не определено) {
            пусть селектор = данные[3]["селектор"];
            пусть dataReplace = данные [3] ["данные"];
            пусть блок = $ (селектор);
            block.html($(dataReplace));
        }
    });
}


/**
 * Код из всплывающего модуля
 */
функция перестроитьBlockCart() {
    let el = document.querySelector(".cart-flyout");
    // Drupal.cartFlyout.createFlyout();
    пусть настройки = drupalSettings.cartFlyout;
    settings.use_quantity_count = истина;
    модель var = новый Drupal.cartFlyout.CartBlockModel(настройки);
    Drupal.cartFlyout.models.push(модель);
    var view = новый Drupal.cartFlyout.CartBlockView({
        эль: эль,
        модель: модель
    });
    var offcanvasView = новый Drupal.cartFlyout.CartOffcanvasView({
        эл.: Drupal.cartFlyout.offcanvas,
        модель: модель
    });
    Drupal.cartFlyout.views.push(просмотр);
    Drupal.cartFlyout.views.push(offcanvasView);
    Drupal.cartFlyout.fetchCarts();
}

Фактическое поведение: на данный момент эти взаимодействия между этими 3 частями страницы выглядят так:

  • Ползунок --> всплывающее окно :: работает (автоматически)
  • Форма --> слайдер :: работает (автоматически)
  • Slider --> form :: KO (когда перезагружаю вручную)

И это ползунок -> форма, где я застрял.

Форма не перезагружается (поэтому я сделал функцию ajax, чтобы загрузить ее вручную).

Вот как я его перестраиваю:

    $view_name = "commerce_cart_form";
    $display_id = "по умолчанию";
    $ вид = [
        '#тип' => 'вид',
        '#имя' => $view_name,
        '#display_id' => $display_id,
        '#arguments' => [$cart_id],
        '#embed' => ИСТИНА,
    ];
    $content = \Drupal::service('renderer')->render($view);
    $response = новый AjaxResponse();
    return $response->addCommand(new ReplaceCommand('#commerce_cart_form-cart-ajax-wrapper', $content));

Форма перестроена, но я теряю любое событие на кнопке ajax для обновления корзины.

Исходный HTML

<form data-drupal-selector="views-form-commerce-cart-form-default-26" action="/cart" method="post"
      id="views-form-commerce-cart-form-default-26" accept-charset="UTF-8" data-once="form-updated"
      data-drupal-form-fields="edit-dc-ajax-add-cart-views-edit-quantity-0,edit-remove-button-0,edit-dc-ajax-add-cart-views-edit-quantity-1,edit-remove-button-1,edit-dc-ajax-add-cart-views-edit-quantity-2,edit-remove-button-2,edit-dc-ajax-add-cart-views-edit-quantity-3,edit-remove-button-3,edit-dc-ajax-add-cart-views-edit-quantity-4,edit-remove-button-4,edit-coupon-redemption-code,edit-coupon-redemption-apply,edit-submit,edit-checkout">

HTML после перезагрузки:

<form data-drupal-selector="views-form-commerce-cart-form-default-26" action="/ajax_update_cart_panier" method="post" id="views-form-commerce-cart-form-default-26" accept-charset="UTF-8">

Как видите, я использую все свои поля данных drupal-form. Из-за этого начальная форма не перезагружается вручную?

триггерHandler('Обновить вид') вызывается примерно 10 раз, когда он вызывается (около 15/20 секунд, чтобы обновить представление, не было этой проблемы до обновления основной версии), поэтому я решил использовать собственный ajax для перестроения представления.

Я использую последнюю версию модулей и использую drupal 9.3.7.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.