Zwischen Design und Programmierung: Countdown "Bestellen Sie innerhalb xxx"

Hallo Zusammen, 

ich bin erst sehr kurz mit Shopware unterwegs und habe mal wieder eine Frage: 

Ich würde gerne auf unseren Artikelseiten unter der Verfügbarkeit einen Timer einstellen welcher Täglich bis 16:00 zählt. (Letzte Abholung).

Mein Versuch sieht wie Folgt aus: 

Textfeld: DetailDataInfoInStock 

Sofort versandfertig, Lieferzeit ca. 1-3 Werktage   
 test 

var updateTime = function(){
    var now = new Date();
    var day = now.getDay();
    var end;

    if(day >= 1 && day <= 5) {
        end = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 16, 0, 0, 0);    
    } else {
        end = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 12, 0, 0, 0);
    }


    var timeleft = end.getTime() - now.getTime();
    var diff = new Date(timeleft);
    
    if(timeleft >= 0){
         jQuery("#timeleft").html("Versand noch heute: Bestellen Sie innerhalb" + diff.getHours() + " Stunden " + diff.getMinutes() + " Minuten und wir versenden Ihr Paket noch Heute!");
    }

  }
  
  var run = setInterval(updateTime,1000);
});

Leeeeider wird das Script nicht ausgeführt und ich finde meinen Fehler nicht… 

Habe ich hier etwas falsch mit SW gemacht? 

 

Freue mich über jeden Tip

 

Lg

 

Marsel

setInterval(updateTime,1000)

Gehört das nicht außerhalb der Function rein? 

 

1 Like

Hi @R4M‍, 

habe es mal getestet, scheint bei mir in beiden versionen zu laufen: 

https://jsfiddle.net/au80jpq6/3/

leider läuft der code jedoch in der Artikel Ansicht noch nicht und das „test“ wird nicht überschrieben

Du hast hier einiges verdreht. jQuery musst du nicht mehr einbinden, da es bereits im Shopware ist. Ganz wichtig, dich mit Shopware und derren Aufbau befassen, blind kopieren und einfügen geht in die Hose.

 test 

var updateTime = function(){
    var now = new Date();
    var day = now.getDay();
    var end;

    if(day >= 1 && day <= 5) {
        end = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 16, 0, 0, 0);    
    } else {
        end = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 12, 0, 0, 0);
    }

    var timeleft = end.getTime() - now.getTime();
    var diff = new Date(timeleft);
    
    if(timeleft >= 0){
         $("#timeleft").html("Versand noch heute: Bestellen Sie innerhalb" + diff.getHours() + " Stunden " + diff.getMinutes() + " Minuten und wir versenden Ihr Paket noch Heute!");
    }
};
var run = setInterval(updateTime,1000);

 

1 Like

Warum so kompliziert?

Schnapp dir doch einfach nen jQuery Plugin. Hier nen Beispiel -> https://jsfiddle.net/xpvt214o/684814/

Hier nutze ich https://jquerytimer.com/

Und dann im Callback eben deinen Text.

Man muss dazu sagen, dass du jQury doppelt gemoppelt einbindest und eine solche Umsetzung sehr dirty ist. Ich empfehle dir dringend mal die Docs zu lesen, insbesondere über jQuery & den Statemanager, sowie jQuery Plugins in Shopware.

Davon abgesehen muss der Funktionsaufruf natürlich außerhalb der Funktion sein :wink:

1 Like

 

@christiantrade schrieb:

Warum so kompliziert?

Schnapp dir doch einfach nen jQuery Plugin. Hier nen Beispiel -> https://jsfiddle.net/xpvt214o/684814/

Hier nutze ich https://jquerytimer.com/

Und dann im Callback eben deinen Text.

Man muss dazu sagen, dass du jQury doppelt gemoppelt einbindest und eine solche Umsetzung sehr dirty ist. Ich empfehle dir dringend mal die Docs zu lesen, insbesondere über jQuery & den Statemanager, sowie jQuery Plugins in Shopware.

Davon abgesehen muss der Funktionsaufruf natürlich außerhalb der Funktion sein ;)

Werde ich mir ansehen :)  

lg und Danke für die Tips