Neu Lieferdatum statt Lieferzeit

3jojojo

Sehr aktives Mitglied
20. Januar 2016
765
34
Hallo Leute
Kann mir jemand helfen wie ich statt der Lieferzeit 2-3 Tage das Datum angezeigt bekomme??? Nicht beim eigenen Lagerbestand sondern nur dann wenn die Lieferzeit vom Lieferanten genommen wird???

Habe schon in der Stock.tpl geschaut aber da ist das Datum ja schon fertig und wird nur ausgegeben.

THX Jo
 

3jojojo

Sehr aktives Mitglied
20. Januar 2016
765
34
mit {$smarty.now|date_format:'%d.%m.%y'+2} bekomme ich schon fast was ich will nur habe ich das Problem das die Jahreszahl fehlt :( Kann mir jemand sagen wieso?
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
6.639
1.583
Berlin
wie in einem echten date() muss das y groß sein "Y" aber mit dem kleinen hättest du die Jahreszahl zweistellig sehen müssen.
Ich weiß ja jetzt nicht wer dir sagte das du da eine +2 einfügen musst?

probier das hier:

die 2 sind die tage, die 86400 die Sekunden je Tag.

Code:
{assign var=lieferdatum value=date("d-m-Y",time()+ (2*86400))}
{$lieferdatum}
 
  • Gefällt mir
Reaktionen: Indy1

ka5-agentur

Aktives Mitglied
4. April 2016
37
7
wie in einem echten date() muss das y groß sein "Y" aber mit dem kleinen hättest du die Jahreszahl zweistellig sehen müssen.
Ich weiß ja jetzt nicht wer dir sagte das du da eine +2 einfügen musst?

probier das hier:

die 2 sind die tage, die 86400 die Sekunden je Tag.

Code:
{assign var=lieferdatum value=date("d-m-Y",time()+ (2*86400))}
{$lieferdatum}

Hallo,

wie könnte man dies bei Bestellungen umsetzen, wenn ich sage das von

Montag bis Freitag bis 14 Uhr Lieferdatum +1 Tag
Montag bis Freitag nach 14 Uhr + Samstag und Sonntag kommender Montag + 1 Tag

Wobei der Faktor 1 Tag aus dem Shop von Versandarten -> Lieferzeit kommen damit man dies nach bedarf ändern kann

Wäre super, wenn jemand den Code hat oder schreiben könnte
 

Dull

Gut bekanntes Mitglied
14. Juli 2014
114
10
Passau
Wir haben das mit folgedem, unglaublich hässlichem Code gelöst... funktioniert aber :D

Im Ergebnis steht dann sowas wie:
Lieferung bis: Donnerstag 12. Dezember - Freitag 13. Dezember


PHP:
<span>{lang key='delivery-date' section='custom'}</span>
<span class="bold">
                    {assign var=tage value=array({lang key='sonntag' section='custom'}, {lang key='montag' section='custom'}, {lang key='dienstag' section='custom'}, {lang key='mittwoch' section='custom'}, {lang key='donnerstag' section='custom'}, {lang key='freitag' section='custom'}, {lang key='samstag' section='custom'})}
                    {assign var=monate value=array("Atlantis", {lang key='january' section='news'}, {lang key='february' section='news'}, {lang key='march' section='news'}, {lang key='april' section='news'}, {lang key='may' section='news'}, {lang key='june' section='news'}, {lang key='july' section='news'}, {lang key='august' section='news'}, {lang key='september' section='news'}, {lang key='october' section='news'}, {lang key='november' section='news'}, {lang key='december' section='news'})}
                    {assign var=tag1 value=date("N",time()+ (($Artikel->nMinDeliveryDays)*86400))}
                    {assign var=monat1 value=date("n",time()+ (($Artikel->nMinDeliveryDays)*86400))}
                    {assign var=ld_wochentag1 value=$tage[$tag1]}
                    {assign var=ld_monat1 value=$monate[$monat1]}
                    {assign var=tag2 value=date("N",time()+ (($Artikel->nMaxDeliveryDays)*86400))}
                    {assign var=monat2 value=date("n",time()+ (($Artikel->nMaxDeliveryDays)*86400))}
                    {assign var=ld_wochentag2 value=$tage[$tag2]}
                    {assign var=ld_monat2 value=$monate[$monat2]}
                    {$ld_wochentag1} {date("d.",time()+ (($Artikel->nMinDeliveryDays)*86400))} {$ld_monat1} - {$ld_wochentag2} {date("d.",time()+ (($Artikel->nMaxDeliveryDays)*86400))} {$ld_monat2}
</span>
 
Zuletzt bearbeitet:

ka5-agentur

Aktives Mitglied
4. April 2016
37
7
Wir haben das mit folgedem, unglaublich hässlichem Code gelöst... funktioniert aber :D

Im Ergebnis steht dann sowas wie:
Lieferung bis: Donnerstag 12. Dezember - Freitag 13. Dezember


PHP:
<span>{lang key='delivery-date' section='custom'}</span>
<span class="bold">
                    {assign var=tage value=array({lang key='sonntag' section='custom'}, {lang key='montag' section='custom'}, {lang key='dienstag' section='custom'}, {lang key='mittwoch' section='custom'}, {lang key='donnerstag' section='custom'}, {lang key='freitag' section='custom'}, {lang key='samstag' section='custom'})}
                    {assign var=monate value=array("Atlantis", {lang key='january' section='news'}, {lang key='february' section='news'}, {lang key='march' section='news'}, {lang key='april' section='news'}, {lang key='may' section='news'}, {lang key='june' section='news'}, {lang key='july' section='news'}, {lang key='august' section='news'}, {lang key='september' section='news'}, {lang key='october' section='news'}, {lang key='november' section='news'}, {lang key='december' section='news'})}
                    {assign var=tag1 value=date("N",time()+ (($Artikel->nMinDeliveryDays)*86400))}
                    {assign var=monat1 value=date("n",time()+ (($Artikel->nMinDeliveryDays)*86400))}
                    {assign var=ld_wochentag1 value=$tage[$tag1]}
                    {assign var=ld_monat1 value=$monate[$monat1]}
                    {assign var=tag2 value=date("N",time()+ (($Artikel->nMaxDeliveryDays)*86400))}
                    {assign var=monat2 value=date("n",time()+ (($Artikel->nMaxDeliveryDays)*86400))}
                    {assign var=ld_wochentag2 value=$tage[$tag2]}
                    {assign var=ld_monat2 value=$monate[$monat2]}
                    {$ld_wochentag1} {date("d.",time()+ (($Artikel->nMinDeliveryDays)*86400))} {$ld_monat1} - {$ld_wochentag2} {date("d.",time()+ (($Artikel->nMaxDeliveryDays)*86400))} {$ld_monat2}
</span>

Danke schon mal., aber es wird folgendes ausgegeben:

Bestellung Freitag nach 14 Uhr:
Samstag 07. Dezember - 08. Dezember

Freitag ab 14.30 Uhr müsste er auf Montag - Dienstag springen

Hier mal der Link zur Seite: https://www.lantelme-karofit.de/Nivellierzange-fuer-Fliesenverlegehilfe
 
Zuletzt bearbeitet:

Dull

Gut bekanntes Mitglied
14. Juli 2014
114
10
Passau
Ah ja, hab das ganze jetzt nochmal angepasst und Samstag und Sonntag rausgerechnet:

PHP:
<span>{lang key='delivery-date' section='custom'}</span>
<span class="bold">
    {assign var=tage value=array({lang key='sonntag' section='custom'}, {lang key='montag' section='custom'}, {lang key='dienstag' section='custom'}, {lang key='mittwoch' section='custom'}, {lang key='donnerstag' section='custom'}, {lang key='freitag' section='custom'}, {lang key='samstag' section='custom'}, {lang key='sonntag' section='custom'})}
    {assign var=monate value=array("Atlantis", {lang key='january' section='news'}, {lang key='february' section='news'}, {lang key='march' section='news'}, {lang key='april' section='news'}, {lang key='may' section='news'}, {lang key='june' section='news'}, {lang key='july' section='news'}, {lang key='august' section='news'}, {lang key='september' section='news'}, {lang key='october' section='news'}, {lang key='november' section='news'}, {lang key='december' section='news'})}
   
    {assign var=tag1 value=date("N",time()+ (($Artikel->nMinDeliveryDays)*86400))}
    {if $tag1 == 6 || $tag1 == 7}{$tag1neu = 1}{else}{$tag1neu = $tag1}{/if}
    {if $tag1 != $tag1neu}{$nMinDeliveryDays_neu = $Artikel->nMinDeliveryDays+8-$tag1}{else}{$nMinDeliveryDays_neu = $Artikel->nMinDeliveryDays}{/if}
    {assign var=monat1 value=date("n",time()+ ($nMinDeliveryDays_neu*86400))}
    {assign var=ld_wochentag1 value=$tage[$tag1neu]}
    {assign var=ld_monat1 value=$monate[$monat1]}
   
    {assign var=tag2 value=date("N",time()+ (($Artikel->nMaxDeliveryDays)*86400))}
    {if $tag2 == 6}{$tag2neu = 1}{elseif $tag2 == 7 && $tag1 > 5}{$tag2neu = $tag1neu+($Artikel->nMaxDeliveryDays-$Artikel->nMinDeliveryDays)}{elseif $tag2 == 7 && $tag1 < 6}{$tag2neu = 1}{else}{$tag2neu = $tag2}{/if}
    {if $tag2 != $tag2neu && $tag2 == 6}{$nMaxDeliveryDays_neu = $Artikel->nMaxDeliveryDays+2}{elseif $tag2 != $tag2neu && $tag2 == 7 && $tag1 < 6}{$nMaxDeliveryDays_neu = $Artikel->nMaxDeliveryDays+1}{elseif $tag2 != $tag2neu && $tag2 == 7 && $tag1 > 5}{$nMaxDeliveryDays_neu = $nMinDeliveryDays_neu+$Artikel->nMaxDeliveryDays-$Artikel->nMinDeliveryDays}{else}{$nMaxDeliveryDays_neu = $Artikel->nMaxDeliveryDays}{/if}
    {assign var=monat2 value=date("n",time()+ ($nMaxDeliveryDays_neu*86400))}                   
    {assign var=ld_wochentag2 value=$tage[$tag2neu]}
    {assign var=ld_monat2 value=$monate[$monat2]}
   
    {$ld_wochentag1} {date("d.",time()+ (($nMinDeliveryDays_neu)*86400))} {$ld_monat1} - {$ld_wochentag2} {date("d.",time()+ (($nMaxDeliveryDays_neu)*86400))} {$ld_monat2}
</span>

Was hier allerdings noch nicht funktioniert, bzw. nicht beachtet wird sind Feiertage oder Zeitangaben wie z. B. ab Freitag 14.30 andere Lieferzeit als Vormittags ^^
 
Zuletzt bearbeitet:

ka5-agentur

Aktives Mitglied
4. April 2016
37
7
Ah ja, hab das ganze jetzt nochmal angepasst und Samstag und Sonntag rausgerechnet:

...

Was hier allerdings noch nicht funktioniert, bzw. nicht beachtet wird sind Feiertage oder Zeitangaben wie z. B. ab Freitag 14.30 andere Lieferzeit als Vormittags ^^

Danke
Das ist schon richtig Klasse, vlt. hat ja noch jemand ne Idee wie man das nun mit der Zeit kombinieren kann.

Montag bis Freitag bis 14:30 = selbiger Tag
Montag bis Donnerstag ab 14:31 = nächster Tag
Freitag ab 14:30, Samstag, Sonntag = kommender Monatg
 

FPrüfer

Moderator
Mitarbeiter
19. Februar 2016
1.878
518
Halle
Hallo,
meine Empfehlung wäre, statt der komplizierten Template-Logik eine eigene Smarty-Funktion zu schreiben und dort mit ein bisschen Datums-Mathematik den Starttag für die Lieferzeit zu berechnen. z.B. mit:
PHP:
$startDate = new DateTime();
// durch addieren von 9 Stunden, 29 Minuten und 59 Sekunden wird nach 14:30 Uhr auf den nächsten Tag gewechselt.
$startDate->add(new DateInterval('PT9H29M59S'));
if ((int)$startDate->format('w') === 0 || (int)$startDate->format('w') === 6) {
    // Wenn der Tag ein Sonntag (0) oder Samstag (6) ist wird ein Werktag addiert
    $startDate->add(DateInterval::createFromDateString('1 weekday'));
}

echo 'Starttag für Lieferung: ' . $startDate->format('d.m.Y');
 

ka5-agentur

Aktives Mitglied
4. April 2016
37
7
Hallo,
meine Empfehlung wäre, statt der komplizierten Template-Logik eine eigene Smarty-Funktion zu schreiben und dort mit ein bisschen Datums-Mathematik den Starttag für die Lieferzeit zu berechnen. z.B. mit:
PHP:
$startDate = new DateTime();
// durch addieren von 9 Stunden, 29 Minuten und 59 Sekunden wird nach 14:30 Uhr auf den nächsten Tag gewechselt.
$startDate->add(new DateInterval('PT9H29M59S'));
if ((int)$startDate->format('w') === 0 || (int)$startDate->format('w') === 6) {
    // Wenn der Tag ein Sonntag (0) oder Samstag (6) ist wird ein Werktag addiert
    $startDate->add(DateInterval::createFromDateString('1 weekday'));
}

echo 'Starttag für Lieferung: ' . $startDate->format('d.m.Y');

Wo baue ich das ein ?
 

FPrüfer

Moderator
Mitarbeiter
19. Februar 2016
1.878
518
Halle
In einem Child-Template! Dazu - wie in unserer Entwickler-Doku beschrieben - eine eigene Smarty-Funktion anlegen. Der Registrierungsteil sieht dann z.B. so aus:
PHP:
$smarty->registerPlugin('function', 'getDeliveryDate', 'getDeliveryDate');
und der Implementierungsteil so:
PHP:
/**
* @param array     $params
* @param JTLSmarty $smarty
* @return string
*/
function getDeliveryDate($params, &$smarty)
{
    $startDate = new DateTime();
    $addDays   = (int)$params['days'];
    // Nach 14:30 Uhr dauert die Bearbeitung einen Tag länger.
    if ((int)$startDate->format('Hi') > 1430) {
        $addDays++;
    }
    // Zum Starttag werden die im Parameter 'days' übergebenen 'Werktage' addiert.
    $startDate->add(DateInterval::createFromDateString($addDays . ' weekday'));

    return $startDate->format('d.m.Y');
}
Im Template kann man die Funktion an der passenden Stelle dann z.B. so aufrufen:
PHP:
{getDeliveryDate days=$Artikel->nMinDeliveryDays} - {getDeliveryDate days=$Artikel->nMaxDeliveryDays}
Ich habe die Berechnung aus meinem ersten Beispiel nochmal etwas angepasst. Durch die Verwendung von "weekday" werden Samstag und Sonntag automatisch berücksichtigt. Allerdings wird dann auch ein Tag mehr berechnet, wenn der letzte Tag auf einen Samstag fällt, der ja bei den meisten Dienstleistern ein Liefertag ist. Wenn man den Samstag also für den Versand aus- und bei der Lieferung einschließen will, dann wird es etwas komplizierter. ;)
 
  • Gefällt mir
Reaktionen: sah und ka5-agentur

ka5-agentur

Aktives Mitglied
4. April 2016
37
7
In einem Child-Template! Dazu - wie in unserer Entwickler-Doku beschrieben - eine eigene Smarty-Funktion anlegen. Der Registrierungsteil sieht dann z.B. so aus:
PHP:
$smarty->registerPlugin('function', 'getDeliveryDate', 'getDeliveryDate');
und der Implementierungsteil so:
PHP:
/**
* @param array     $params
* @param JTLSmarty $smarty
* @return string
*/
function getDeliveryDate($params, &$smarty)
{
    $startDate = new DateTime();
    $addDays   = (int)$params['days'];
    // Nach 14:30 Uhr dauert die Bearbeitung einen Tag länger.
    if ((int)$startDate->format('Hi') > 1430) {
        $addDays++;
    }
    // Zum Starttag werden die im Parameter 'days' übergebenen 'Werktage' addiert.
    $startDate->add(DateInterval::createFromDateString($addDays . ' weekday'));

    return $startDate->format('d.m.Y');
}
Im Template kann man die Funktion an der passenden Stelle dann z.B. so aufrufen:
PHP:
{getDeliveryDate days=$Artikel->nMinDeliveryDays} - {getDeliveryDate days=$Artikel->nMaxDeliveryDays}
Ich habe die Berechnung aus meinem ersten Beispiel nochmal etwas angepasst. Durch die Verwendung von "weekday" werden Samstag und Sonntag automatisch berücksichtigt. Allerdings wird dann auch ein Tag mehr berechnet, wenn der letzte Tag auf einen Samstag fällt, der ja bei den meisten Dienstleistern ein Liefertag ist. Wenn man den Samstag also für den Versand aus- und bei der Lieferung einschließen will, dann wird es etwas komplizierter. ;)


Genial und funktioniert perfekt ... solche Dinge sollten in neue Versionen mit eingebaut werden :)
 

Ähnliche Themen