Hallo Zusammen

Falls Ihr "komische" Symptome mit Variantendropdowns im Frontend habt, welche Ihr euch auch nach einer Datenanalyse nicht erklärem könnt, solltet Ihr prüfen ob es 2 oder mehr Optionen gibt, welche beide mit der selben Nummer beginnen, wie zb. unten:

5
5 (32-34)

Falls die Antwort ja ist, könnt Ihr aufhören an euch zu zweifeln. Das einzige das hier hilft ist ein Update auf mindestens Isotope 1.3 oder ihr maskiert die Optionen zb:

*5*
*5 (32-34)*

Technische Erklärung: Die PHP Funktion in_array sucht das vorkommen eines Elementes innerhalb von einem Array. Wenn ich nun im sogenannten needle einen integer habe, wandelt die Funktion alle Arrayelemente intern als integer um (denke durch intval) und vergleicht kann ob es sich um den Wert handelt. Somit wird auch true ausgegeben, wenn das Element im Array in diesem Fall ein String '5 (32-34)' mit dem integer 5 verglichen wird. Diese Funktion wird für die Variantendropdowns benötigt.

IsotopeProduct.php: 635

Um das nachzuvollziehen habe ich folgenden Code, der dem orginal sehr nahe kommt geschrieben:

PHP-Code:
<?php

$arrField
['options'] = array
(
    
=> array
    (
        
'value' => '1 Stück',
        
'label' => '1 Stück',
    ),
    
=> array
    (
        
'value' => 1,
        
'label' => 1,
    )
);

$arrOptions = array
(
    
'1 Stück',
);

foreach(
$arrField['options'] as $k => $option)
{
    if(
in_array($option['value'], $arrOptions))
    {
        echo 
$k;
    }
}
Man würde ja annehmen, dass nur eine 0 ausgegeben wird, was leider nicht der Realität entspricht.

Seit der Revision 2494 von kkuzminski ist dieses Problem behoben durch folgendes Statement (aktuell Zeile 932):

PHP-Code:
if (!in_array((string) $option['value'], (array) $this->arrVariantOptions['attributes'][$strField], true))