Das Variantenselektor-Formular wird im Template "template_productIncludes_variantSelector_01.html5" aufgebaut. Die Merkmale und Ausprägungen liegen an dieser Stelle in der Reihenfolge vor, in der sie in den aktiven Produktvarianten vorkommen. Technisch ist das nicht direkt "zufällig", für den Betrachter de facto aber schon.
Sie haben im Template aber nun die Möglichkeit, beliebige Sortierungen zu realisieren.
Im folgenden Code-Beispiel habe ich im genannten Template ein paar Zeilen Code eingefügt, mit denen die Ausprägungen nach ihrer Bezeichnung sortiert werden (kommentiert mit "Sort the attribute values by their title"). Da die Sortierung hier im Template stattfindet, liegen die Ausprägungsbezeichnungen schon in der richtigen Ausgabesprache vor, sodass bei mehrsprachigen Auftritten die Sortierung hier gleich sprachbezogen stattfindet.
Man könnte auch die Merkmals-ID ($arrAttribute['attributeID']) bzw. die Merkmalsbezeichnung ($arrAttribute['attributeTitle']) prüfen und dann abhängig davon für die untergeordneten Ausprägungen nach unterschiedlichen Kriterien sortieren.
- Code: Alles auswählen
/*
* Create a variant selection form
*/
$attributeFormFields = array();
foreach ($this->objProduct->_allVariantAttributes as $arrAttribute) {
$attributeFormFields[$arrAttribute['attributeID']] = '<label>'.$arrAttribute['attributeTitle'].'</label>';
$attributeFormFields[$arrAttribute['attributeID']] .= '<select id="ctrl_attribute_'.$arrAttribute['attributeID'].'" name="attribute_'.$arrAttribute['attributeID'].'">';
$arrSelectedVariantAttributeValues = $this->objProduct->_selectedVariant->_attributes[$arrAttribute['attributeID']];
if (is_array($arrSelectedVariantAttributeValues)) {
reset($arrSelectedVariantAttributeValues);
}
/*
* Sort the attribute values by their title ====>
*/
$arr_valueTitles = array();
foreach ($arrAttribute['values'] as $var_key => $arr_value) {
$arr_valueTitles[$var_key] = $arr_value['valueTitle'];
}
array_multisort($arr_valueTitles, SORT_ASC, $arrAttribute['values']);
/*
* <====
*/
foreach ($arrAttribute['values'] as $arrValue) {
$attributeFormFields[$arrAttribute['attributeID']] .= '<option value="'.$arrValue['valueID'].'"'.(is_array($arrSelectedVariantAttributeValues) && $arrSelectedVariantAttributeValues[key($arrSelectedVariantAttributeValues)]['valueID'] == $arrValue['valueID'] ? ' selected' : '').'>'.$arrValue['valueTitle'].'</option>';
}
$attributeFormFields[$arrAttribute['attributeID']] .= '</select>';
}
Interessant ist hierzu auch folgender Link:
http://docs.php.net/manual/en/function. ... tisort.php