ich habe ein problem wo ich aktuell nicht weiter komme. Und zwar möchte ich gerne den oxstock Wert der Varianten aus der oxarticles Tabelle in der selection.tpl in der foreach-anweisung auslesen.
oxarticles:
public function getVarStock()
{
$oDb = \OxidEsales\Eshop\Core\DatabaseProvider::getDb();
$sSql = "select oxstock from oxarticles where oxparentid = '" . $this->getId() . "'";
return $oDb->getOne($sSql);
}
Wenn ich es mit [{$oDetailsProduct->oxarticles__oxstock->value}], gibt er mir den oxstock wert aus aber nur jeweils für die variante die auch ausgewählt ist und nicht für alle unabhängig davon welche variante ausgewählt ist.
Hier hier jemand eine idee oder ein tip wie ich das am besten lösen kann?
Oder mal ganz anders gefragt, wo wird denn die funktion getName in der selection.php zusammengebaut? Dann könnte ich evtl. diese funktion kopieren und anpassen, denn [{$oSelection->getName()}] funktioniert bestens in der foreach-anweisung in der selection.tpl.
Und eine andere frage noch. Wie kann ich z.b. eine eigene funktion in der articles.php erstellen und diese auch an ein anders template weiter geben. Also nicht nur an productmain.tpl sondern. z.b auch an die selection.tpl usw…
Ziel ist es die Varianten die ein oxstock wert < 1 haben in dem dropdown Feld auszugrauen bzw. nicht klickbar zu machen.
Die Varianten mit Nullbestand haben inaktiven Status. Mit der CSS-Klasse active oder einer zusätzlichen Klasse kannst du das Element darstellen, wie du willst. PHP-Programmierung ist dazu gar nicht nötig.
Aber die abfrage scheint bei 0 bestand nicht zu greifen! Wann genau greift diese abfrage?
Hab mal eben eine variante auf 0 bestand gesetzt. Es ändert sich aber absolut nix an der variantenauswahl. Alle Varianten sind weiter klickbar und nur die aktive variante bekommt die klasse “active”. Die variante mit 0 bestand bekommt keine separate klasse.
Die Selectlists wählen einfach nur aus. Wenn man bei md-Varianten eine Auswahl trifft und es gibt im 2. Auswahlfeld Werte die keine existierende Variante mit der ersten Auswahl haben, dann erscheinen die grau. Hat aber nicht direkt mit Stock zu tun.
Eine Möglichkeit wäre, die Eigenschaft disabled bei Varianten mit Menge 0 auf true zu setzen, z.b. durch Modifikation der Funktion _fillVariantSelections in Application\Model\VariantHandler.php.
Dann kann man im Template selectbox.tpl dem LI-Element im Falle von disabled=true CSS-Klassen zuweisen, die das Item als nicht verfügbar kennzeichnen und nicht anwählen lassen.
Das Ergebnis sieht dann z.B. so aus wie im Bild. Die durchgestrichene Variante ist ausverkauft und kann auch nicht angewählt werden.
Das Ganze ist natürlich quick&dirty und kaum getestet, scheint aber auf den ersten Blick zu funktionieren (zweidimensionale Varianten). Es könnte sein, daß sich die Benutzung des Felds disabled mit anderen Funktionalitäten überschneidet (Filter?). In dem Fall müsste man ein eigenes Feld für den Zweck einbauen.
Nachtrag:
In getVariantsQuery() (class Article) muss man die Querybedingung anpassen, so daß die Varianten mit Nullmenge überhaupt erst geladen werden, d.h. die Bedingung $sTable.oxstock > 0
muss auf $sTable.oxstock >= 0
geändert werden (ca. Zeile 640 in Article.php).