Scriptvariable für $WarenkorbArtikelPositionenanzahl

MichaelWeb

Aktives Mitglied
21. Januar 2014
3
0
Hallo,

ich möchte im Warenkorb (im Header) immer die aktuelle Positionenanzahl haben.
Wenn ich einen Artikel in den Warenkorb lege, überschreibt die jtl.basket.js den Wert im entsprechenden <span> jedoch mit einem Text.

Gibt es eine Systemvariable wie "cWarenkorbText" oder "cWarenkorbLabel" die mir aber die Anzahl der Positionen zurückgibt?

Oder muss ich hierfür eine eigene Variable erstellen / übergeben?

Benutze das JTL Shop 3 Tiny Template.
 

martinwolf

Offizieller Service Partner
SPBanner
6. September 2012
3.716
355
AW: Scriptvariable für $WarenkorbArtikelPositionenanzahl

Nein gibt es nicht. Gleiches Probleme hatte ich auch jetzt erst bei der Umsetzung eines Templates. Das war mein Workaround:

header_custom.tpl Basket:
Code:
<li class="hover basket last {if $WarenkorbArtikelanzahl >= 1}items{/if}{if $nSeitenTyp == 3} current{/if}"><a href="warenkorb.php?{$SID}"><span><em>{$WarenkorbArtikelanzahl}</em> {lang key="boxItems"} | <span>{$WarenkorbWarensumme[$NettoPreise]}</span><br />{lang key="gotoBasket"}</span></a>
  {include file="tpl_inc/warenkorb_mini.tpl"}
</li>

jtl.basket.js, function basketAnimation() auskommentiert und in die custom.js eingefühgt und modifiziert:
Code:
function basketAnimation(response, cImageWrapper)
{
    // Warenkorb (Box)
    if ($('#basket_text').length)
    {
        var cWarenkorbText = html_entity_decode(response.cWarenkorbText, 'HTML_SPECIALCHARS');
        $('#basket_text').stop().animate({opacity: 1.0}, 10).animate({opacity: 0.2}, 250, function() {
            $('#basket_text').text(cWarenkorbText);
            $('#basket_text').animate({opacity: 1.0}, 250);
        });
    }

    if ($("#basket_drag_area").length)
    {
        if (!$("#basket_drag_area").hasClass('pushed'))
            $("#basket_drag_area").addClass('pushed');
    }

    // Warenkorb (Header)
    if ($('#headlinks li.basket a span span').length)
    {
        var cWarenkorbLabel = html_entity_decode(response.cWarenkorbLabel, 'HTML_SPECIALCHARS');
        
        // get warenkorbSumme
        var warenkorbSumme = cWarenkorbLabel.substr(strpos(cWarenkorbLabel, '(') + 1, strpos(cWarenkorbLabel, '(')) + ' &euro;';
        warenkorbSumme = html_entity_decode(warenkorbSumme, 'HTML_SPECIALCHARS');
        
        // get article number in cWarenkorbText
        var pattern = /[0-9]+/g;
        var numOfArticles = response.cWarenkorbText.match(pattern);

        $('#headlinks li.basket a span span, #headlinks li.basket a span em').stop().animate({opacity: 1.0}, 10).animate({opacity: 0.2}, 250, function() {
            $('#headlinks li.basket a span span').text(warenkorbSumme);
            $('#headlinks li.basket a span em').text(numOfArticles);
            $('#headlinks li.basket a span span, #headlinks li.basket a span em').animate({opacity: 1.0}, 250);
        });
    }

    // Warenkorb (Header, Mini)
    $('#headlinks li.basket div').remove();
    $('#headlinks li.basket').addClass('items');
    $('#headlinks li.basket').append(response.cWarenkorbMini);

    // Popup
    popup = $(response.cPopup);
    show_popup(popup, true, true, function() {
        jQuery('#mycarousel_pushed').jcarousel({
            scroll: 1,
            visible: 1,
            wrap: 'last'
        });
    });

    popup.find('.article_pushed_xseller').parent().show();
    pushedToBasket();
}

Dieses Snippet ist für EURO ausgelegt. Ich hatte Probleme die Währung zu filtern, hat mir immer die letzte ")" mit angehängt. Aber vielleicht bekommst du ja den Mod noch angepasst dass auch die Währung variabel ist. Für dieses Template im Kundenauftrag ist aber nur EURO relevant, daher hab ich mich damit nicht länger aufgehalten.
 

MichaelWeb

Aktives Mitglied
21. Januar 2014
3
0
AW: Scriptvariable für $WarenkorbArtikelPositionenanzahl

Danke erst einmal für die Antwort und ausführliche beschreibung!
Allerdings wird mit dieser Methode ja die Anzahl der Artikel ausgegeben. Genau das möchte ich nicht.
Wie oben beschrieben, möchte ich die Anzahl der Positionen herausbekommen (So wie sie in $WarenkorbArtikelPositionenanzahl steht).

D.h. Wenn ich eine Mindestabnahme von 50 Stück habe und diese in den Warenkorb lege, soll dort (im Header) eine 1 angezeigt werden und keine 50.

Habe ich hierfür weitere Optionen mit der "response" im Javascript zu arbeiten?
 

martinwolf

Offizieller Service Partner
SPBanner
6. September 2012
3.716
355
AW: Scriptvariable für $WarenkorbArtikelPositionenanzahl

Ach dann hab ich den Text nicht richtig gelesen. Anbei mal ein Screenshot vom Respons:resposne.jpg
Alternativ kannst du die Ausgabe auch selbst in die Konsole bringen:

Code:
function basketAnimation(response, cImageWrapper)
{
    [B]console.log(response);[/B]
    // Warenkorb (Box)
    if ($('#basket_text').length)
    {
        var cWarenkorbText = html_entity_decode(response.cWarenkorbText, 'HTML_SPECIALCHARS');
        $('#basket_text').stop().animate({opacity: 1.0}, 10).animate({opacity: 0.2}, 250, function() {
...

Aber wenn ich dich jetzt richtig verstanden habe, dann wäre doch der Wert immer 1 oder? Weil du kannst immer nur eine Position zur selben Zeit in den Warenkorb legen, die Anzahl möchtest du ja nicht haben.
 

Anhänge

  • resposne.jpg
    resposne.jpg
    12,2 KB · Aufrufe: 25

MichaelWeb

Aktives Mitglied
21. Januar 2014
3
0
AW: Scriptvariable für $WarenkorbArtikelPositionenanzahl

Aber wenn ich dich jetzt richtig verstanden habe, dann wäre doch der Wert immer 1 oder? Weil du kannst immer nur eine Position zur selben Zeit in den Warenkorb legen, die Anzahl möchtest du ja nicht haben.

Teilweise richtig, jedoch wenn ich bereits Zwei Positionen im Warenkorb habe und noch einen (mit beliebiger Stückzahl) hinzufüge, müsste die Ausgabe folgerichtig "3" sein.

Diese "3" taucht aber nun mal leider erst nach neu Laden bzw. wechsel der Seite auf.

Es muss doch möglich sein, dass das Script bereits diese Zahl aktualisiert.
 

martinwolf

Offizieller Service Partner
SPBanner
6. September 2012
3.716
355
AW: Scriptvariable für $WarenkorbArtikelPositionenanzahl

Stimmt. Du könntest ja die Warenkorbpositionen aus der Session auslesen und dann um 1 erhöhen. Dann hättest du deine Endzahl.
 

Ähnliche Themen