Listitem_grid getVariants script

Hallo zusammen,

ich habe einen kleinen Bug und komme einfach nicht auf die Lösung.

In der listitem_grid.tpl wird folgendes script ausgeführt:

<script type="text/javascript">
	$('.[{$iIndex}]').click(function() {
		[{assign var="iPrice" value=99999}]
		[{assign var="oVariants" value=$product->getVariants()}]
		[{foreach from=$oVariants item=variant}]
			[{if $variant->oxarticles__oxprice->value < $iPrice}]
				[{assign var="iPrice" value=$variant->oxarticles__oxprice->value}]
				[{assign var="saveArticle" value=$variant->getLink()}]
			[{/if}]
		[{/foreach}]
		$(location).attr('href', '[{$saveArticle}]');
	});
</script>

Bei klick auf einen Link eines Artikels mit Varianten, wird die günstigste Variante ausgesucht und vorselektiert.

Das funktioniert so weit auch ganz gut, allerdings wenn es einen Artikel gibt, bei dem alle Varianten keinen Bestand haben, dann passiert wirres zeug.
Entweder, es passiert gar nichts und die selbe Seite wird erneut aufgerufen. Das ist nachvollziehbar, da ich bei allen Artikeln mit Varianten initial den Link auf href="#" setze.
Manchmal wird allerdings einfach der vorige Artikel ausgewählt?!

Liegt es an der funktionsweise des Codeschnippsels den ich oben gepostet habe?

Ich muss sagen, dass ich diese Datei stark verändert habe und es gut möglich ist, dass das ganze auch an einer anderen Stelle schief läuft.

Vielleicht hat aber dennoch jemand eine Idee woran das Ganze scheitert.

Danke und Grüße!

Keine Varianten - foreach hat nichts zum durchlaufen - saveArticle wird nicht zugewiesen - href bekommt den Wert der noch vom letzten Artikel drin ist.

Sorry, ich hab die Zeile davor vergessen:

[{if $product->getVariants()}]

Die Artikel die betroffen sind, haben auf jedenfall auch Varianten und es ist immer reproduzierbar.
Sobald ich bei allen Varianten einen Lagerbestand <= 0 eingebe, tritt der Fehler auf.

Wenn der Artikel z.B. mehrere Varianten hat und der billigste keinen Lagerbestand hat, wird dieser auch nicht ausgewählt sondern der nächst-günstigste mit Lagerbestand.

Aber warum ist das so? Ich frage nirgends den Lagerbestand ab, er soll nur alle Varianten durchlaufen?

Übergibt mir $product->getVariants in listitem_grid.tpl automatisch nur die aktiven mit Lagerbestand? Bzw. wo kann ich das prüfen?

[QUOTE=mkb-kk;151460]
Übergibt mir $product->getVariants in listitem_grid.tpl automatisch nur die aktiven mit Lagerbestand? Bzw. wo kann ich das prüfen?[/QUOTE]
in oxarticle.php:


    public function getVariants($blRemoveNotOrderables = true, $blForceCoreTable = null)

Es werden immer nur die aktiven Varianten zurückgegeben. Wenn Lager eingeschaltet ist, werden auch die mit Stock 0 und “wenn ausverkauft offline” nicht zurückgegeben. Wenn $blRemoveNotOrderables true ist (also beim Aufruf ohne Parameter), werden auch die mit Stock 0 und “wenn ausverkauft nicht bestellbar” entfernt.

Ja, das wars. Super, dank dir.

Ich bin meistens noch nicht 100%ig durchgestiegen, von welchen .php Dateien die .tpl Dateien ihre Daten ziehen…

Falls es zukünftig jemanden interessiert, ich habe letztendlich einfach die oxarticles.php erweitert mit:

public function getVariantsWithoutOrderables( $blRemoveNotOrderables = false, $blForceCoreTable = null )
{
	return $this->_loadVariantList( $this->_isInList(), $blRemoveNotOrderables, $blForceCoreTable );
}

Und im Script dann natürlich den Aufruf geändert.

Du kannst den Parameter einfach beim Aufruf setzen: getVariants(0)