20, 'ipad' => 21, 'macbook' => 22, 'airpods' => 23, 'accessories' => 24, ]; if (isset($categoriesConfig[$currentCategory])) { $catId = $categoriesConfig[$currentCategory]; } // Fetch available attributes for the category if selected $attributes = []; if ($catId) { // Show attributes related to the active category $stmtAttr = $conn->prepare(" SELECT a.attributeID, a.name, a.unit, a.dataType FROM attributes a JOIN categoryAttributes ca ON a.attributeID = ca.attributeID WHERE ca.categoryID = ? ORDER BY a.name "); $stmtAttr->bind_param("i", $catId); $stmtAttr->execute(); $resAttr = $stmtAttr->get_result(); while ($row = $resAttr->fetch_assoc()) { $attributes[] = $row; } $stmtAttr->close(); } ?>
prepare(" SELECT DISTINCT pa.valueString, pa.valueNumber, pa.valueBool FROM productAttributes pa JOIN products p ON pa.productID = p.productID WHERE p.categoryID = ? AND pa.attributeID = ? "); $vStmt->bind_param("ii", $catId, $attrId); } else { $vStmt = $conn->prepare(" SELECT DISTINCT valueString, valueNumber, valueBool FROM productAttributes WHERE attributeID = ? "); $vStmt->bind_param("i", $attrId); } $vStmt->execute(); $vRes = $vStmt->get_result(); $values = []; while ($vRow = $vRes->fetch_assoc()) { if ($attr['dataType'] === 'boolean' || $vRow['valueBool'] !== null) { $val = $vRow['valueBool'] ? 'Ja' : 'Nein'; if (!in_array($val, $values)) $values[] = $val; } elseif ($attr['dataType'] === 'number' || $vRow['valueNumber'] !== null) { $val = $vRow['valueNumber']; // strip trailing zero for decimals if desired, e.g. 5.00 -> 5 $val = rtrim(rtrim((string)$val, '0'), '.'); if (!in_array($val, $values)) $values[] = $val; } elseif ($vRow['valueString'] !== null) { $val = $vRow['valueString']; if (!in_array($val, $values)) $values[] = $val; } } $vStmt->close(); // Sort values if ($attr['dataType'] === 'number') { usort($values, function($a, $b) { return (float)$a <=> (float)$b; }); } else { sort($values); } if (empty($values)) continue; $paramName = "attr_" . $attrId; $selectedValue = isset($_GET[$paramName]) ? $_GET[$paramName] : ''; ?>
$v) { if (strpos($k, 'attr_') === 0 && $v !== '') { $hasActiveFilter = true; break; } } if ($hasActiveFilter): ?>