Puncte:1

Reîncărcați vizualizarea commerce_cart_form

drapel kn

Mă cuplez Comerțul Drupal, DC adaugă în coș ajax și module volante comerciale.

Aceasta este configurația mea de vedere:

introduceți descrierea imaginii aici

Pe mine /cart pagina, am forma inițială (vizualizarea) pentru a schimba cantitățile, șterge articolele etc...

Am și un glisor de produs, care datorită modulului „ajax add to cart”, pot adăuga mai multe produse în coș.

Comportamentul așteptat:

  • Ori de câte ori actualizez cantitatea sau elimin un articol din lista derulantă, formularul trebuie actualizat (inclusiv totalul)
  • Ori de câte ori actualizez cantitatea sau elimin un articol din formular, trebuie reîncărcat flyout-ul (incluzând totalul)
  • Ori de câte ori actualizez cantitatea sau elimin din glisor, trebuie să fie actualizate atât flyout-ul, cât și formularul.

În js, am încercat să le declanșez individual după ce au fost făcute clic pe butoane, apelând codul ajax personalizat pentru a reconstrui vizualizarea și flyout-ul.

/**
 * Reîncărcați toată vizualizarea conținutului paginii (formular)
 */
funcția rebuildViewPanier() {
    //$("#commerce_cart_form-cart-ajax-wrapper").triggerHandler("RefreshView");
    $.ajax({
        url: „/ajax_update_cart_panier”
    }).done(funcție (date) {
        dacă (date[3] !== nedefinit) {
            let selector = date[3]["selector"];
            let dataReplace = data[3]["data"];
            let block = $(selector);
            block.html($(dataReplace));
        }
    });
}


/**
 * Cod din modulul flyout
 */
funcția rebuildBlockCart() {
    let el = document.querySelector(".cart-flyout");
    // Drupal.cartFlyout.createFlyout();
    let settings = drupalSettings.cartFlyout;
    settings.use_quantity_count = adevărat;
    var model = nou Drupal.cartFlyout.CartBlockModel(settings);
    Drupal.cartFlyout.models.push(model);
    var view = nou Drupal.cartFlyout.CartBlockView({
        el: el,
        model: model
    });
    var offcanvasView = nou Drupal.cartFlyout.CartOffcanvasView({
        el: Drupal.cartFlyout.offcanvas,
        model: model
    });
    Drupal.cartFlyout.views.push(vizualizare);
    Drupal.cartFlyout.views.push(offcanvasView);
    Drupal.cartFlyout.fetchCarts();
}

Comportament real: deocamdată, acele interacțiuni între acele 3 părți ale paginii sunt așa

  • Slider --> flyout :: funcționează (automat)
  • Formular --> glisor :: funcționează (automat)
  • Slider --> form :: KO (când îl reîncarc manual)

Și acesta este cursorul-->forma în care sunt blocat.

Formularul nu este reîncărcat (deci am făcut funcția ajax pentru a-l încărca manual).

Asa o reconstruiesc:

    $view_name = "comerț_cart_form";
    $display_id = "implicit";
    $view = [
        '#type' => 'vizualizare',
        '#name' => $view_name,
        '#display_id' => $display_id,
        '#arguments' => [$cart_id],
        '#embed' => TRUE,
    ];
    $conținut = \Drupal::service('renderer')->render($view);
    $răspuns = AjaxResponse nou();
    return $response->addCommand(new ReplaceCommand('#commerce_cart_form-cart-ajax-wrapper', $content));

Formularul este reconstruit, dar pierd orice eveniment de pe butonul ajax pentru a actualiza coșul.

HTML inițial

<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 după reîncărcare:

<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">

După cum puteți vedea, folosesc toate câmpurile mele de date-drupal-form. Din această cauză, forma inițială nu o reîncarcă manual?

The triggerHandler('RefreshView') este apelat de 10 ori când este apelat (aproximativ 15/20s pentru a reîmprospăta vizualizarea, nu am avut această problemă înainte de a actualiza versiunea de bază), de aceea am decis să folosesc ajax personalizat și să reconstruiesc vizualizarea.

Folosesc cea mai recentă versiune a modulelor și folosesc drupal 9.3.7

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.