Statusanzeige Ampel

Hallo zusammen,

ich hoffe ich bin hier im richtigem Unterforum.

Und zwar versuche ich gerade die Statusanzeige umzuschreiben auf unsere Bedürfnisse.

Ich möchte das wenn das aktuelle Serverdatum kleiner ist als das Lieferdatum welches in der Tabelle articles unter delivery abgelegt ist einen bestimmten Text anzeigen. Wenn das Serverdatum größer ist als das hinterlegte Datum dann das normale oxarticles__oxnostocktext anzeigen.

Hier mal mein Versuch:

[{if $smarty.now|strtotime|date_format:"%d.%m.%Y" < $oDetailsProduct->getDeliveryDate() and $oDetailsProduct->oxarticles__oxstock->value < 1 and $oDetailsProduct->oxarticles__oxstockflag->value == 1}]
				<span class="stockFlag lowStock">
                    [{oxmultilang ident="DETAILS_AVAILABLEON"}] [{$oDetailsProduct->getDeliveryDate()}] / [{oxmultilang ident="VORBESTELLUNGEN"}]
					<br><a id="link_vorbellung" href="[{ oxgetseourl ident="0c6c156e1109c6d0367a62a8051e76db" type="oxcontent" }]" target="_blank" title="[{oxmultilang ident="VORBESTELLUNGEN_TEXT"}]"> [{oxmultilang ident="VORBESTELLUNGEN_LINK"}]</a>
                
					</span>
				[{elseif }]
                        <span class="stockFlag">
                            
                                [{$oDetailsProduct->oxarticles__oxnostocktext->value}]
                            
					</span>
				[{/if}]

Irgendwie stehe ich aber auf der Leitung seit ein paar Tagen.
Wenn ich sage $oDetailsProduct->oxarticles__oxstock->value < 1 scheint es nicht zu funktionieren. Nehme ich aber $oDetailsProduct->oxarticles__oxstock->value == 0 dann sieht es so aus als ob es funktioniert. Es soll aber auch bei Bestand -1 funktionieren. Also: $oDetailsProduct->oxarticles__oxstock->value < 1

Kann es sein das ich in der Datums Abfrage was falsch habe ?

Gruß
Bitsecure

Ich schätze hier ist der Hund begraben:


oxArticle.getDeliveryDate() 	
Returns formated delivery date. If the date is not set ('0000-00-00') returns false.

Returns:
string | bool

Aha. Kannst Du mir sagen wo die generelle Abfrage für oxArticle.getDeliveryDate() zu finden ist ?

Gruß
Bitsecure

Was ich damit andeuten wollte, ist dass du besser das Datum direkt aus der Datenbank holst, es evtl. noch formatierst und dann den Vergleich machst.

Also:

$oDetailsProduct->oxarticles__oxdelivery->value

[QUOTE=novalgin;117142]
$oDetailsProduct->oxarticles__oxdelivery->value[/QUOTE]

Jetzt ist der Groschen gefallen. Ich hab die ganze Zeit im Kopf gehabt das überall ein Lieferdatum eingetragen ist.

Vielen Dank.

Gruß
Bitsecure

im Code ( Beitrag #1) ist in der Mitte eine [{elseif }] ohne Bedingung. Richtig wäre nur [{else}]

[QUOTE=bitsecure;117206]Jetzt ist der Groschen gefallen. Ich hab die ganze Zeit im Kopf gehabt das überall ein Lieferdatum eingetragen ist.

Vielen Dank.

Gruß
Bitsecure[/QUOTE]

Dachte ich mir, deshalb auch der Hinweis, dass die Funktion immer false zurück gibt, falls kein Datum eingegeben ist, und somit der Vergleich nicht funktioniert.

Am besten du machst dir hier ein kleines Mini Modul, in etwas so:


public function isPreOrderNova()
    {
        $sNow = date('Y-m-d H:i:s');
		$sDel = $this->oxarticles__oxdelivery->value;
		
        if ( $sDel = 0) {
            return false;
        }
		if ( $sNow < $sDel && $this->oxarticles__oxstock->value < 1 && $this->oxarticles__oxstockflag->value == 1) {
            return true;
        }

        return false;
    }


und fragst das im Template dann immer so ab:


[{ if $oDetailsProduct->isPreOrderNova() }]
  true
[{ else }]
 false
[{ /if }]

Klasse. Werde ich nächste Woche mal einbinden.

Vielen Dank !

Gruß
Bitsecure

[QUOTE=patchwork.de;117208]im Code ( Beitrag #1) ist in der Mitte eine [{elseif }] ohne Bedingung. Richtig wäre nur [{else}][/QUOTE]

Schreibfehler von mir. Danke !

Hallo, ich komme jetzt er zum testen und habe da noch eine Frage.

Muss ich dieses Mini Modul in die details.php einfügen oder soll ich das als richtiges Modul erstellen damit es ein Update stand hält ?

public function isPreOrderNova()
    {
        $sNow = date('Y-m-d H:i:s');
        $sDel = $this->oxarticles__oxdelivery->value;
        
        if ( $sDel = 0) {
            return false;
        }
        if ( $sNow < $sDel && $this->oxarticles__oxstock->value < 1 && $this->oxarticles__oxstockflag->value == 1) {
            return true;
        }

        return false;
    }

Den Code passe ich natürlich an.
Gruß
Bitsecure

Wenn, dann müsstest Du diesen Code in die core/oxarticle.php einfügen, aber wie Du schon selbst richtigerweise erkannt hast, ist aus von Dir bereits genannten Gründen ein Mini Modul die bessere Wahl.

Ok. Ein Modul. Angezeigt wird das ganze später in der productmain.tpl
Bei einem Modul habe ich meine Probleme mit der Zuordnung der Klasse.
Ich habe jetzt einen Ordner “lieferbar” in Modules angelegt. In diesem Ordner liegt eine lieferbar.php mit folgendem Inhalt:

<?php
class lieferbar_ext extends lieferbar_ext_parent
{ 
public function LieferbarTime()
    {
        $sNow = date('d-m-Y');
        $sDel = $this->oxarticles__oxdelivery->value;
        
        if ( $sDel = 0) {
            return false;
        }
        if ( $sNow < $sDel && $this->oxarticles__oxstock->value < 1 && $this->oxarticles__oxstockflag->value == 1) {
            return true; 
        }

        return false;
    }  

Ist dies soweit richtig ? Und wie weise ich die Klassen im Backend zu ?

Gruß
Bitsecure

Shopversion?

Community Edition 4.6.5_49955

EDIT: Vergiss es :slight_smile:

oxarticle => lieferbar/lieferbar

So:)

Danke ! Ich versuch dann mal weiter !

Leider eine leere weiße Seite wenn ich das Modul aktiviere.

Oh, ich habe 4.5.6 gelesen. Hast Du denn eine metadata.php erstellt und dort alles eingetragen?

Nein. Krieg ich aber glaube ich hin. Versuch ich später. Danke bis hier erst mal.

[QUOTE=novalgin;118302]EDIT: Vergiss es :slight_smile:

oxarticle => lieferbar/lieferbar

So:)[/QUOTE]

Hab ich grad erst gelesen. :slight_smile: Das Modul scheint jetzt zu laufen.
Jetzt hab ich noch eine Frage zum Code.

 <?php
class lieferbar_ext extends lieferbar_ext_parent
{ 
public function LieferbarTime()
    {
        $sNow = date('d-m-Y');
        $sDel = $this->oxarticles__oxdelivery->value;
        
        if ( $sDel = 0) {
            return false;
        }
        if ( $sNow < $sDel && $this->oxarticles__oxstock->value < 1 && $this->oxarticles__oxstockflag->value == 1) {
            return true; 
        }

        return false;
    } 

ersetze ich das erste false und das true durch die Texte die ich anzeigen möchte
oder mache ich das in der Abfrage der .tpl ? oder in beiden ?