Блог
Фильтрация дополнительных свойств типа "флажок"
Возникла потребность при фильтрации вывести товары, у которых в дополнительном свойстве типа флажок не стоит галочки, но в HostCms фильтр обрабатывает подобный вариант не совсем так, как нам нужно (при выключенной галочке в фильтре выводятся все товары, не зависимо от значения дополнительного свойства).
Нужно изменить логику обработки этого доп. свойства.
И так у нас возникает 2 типа фильтрации:
1. Выводим товары у которых в доп. свойстве типа флажок стоит галочка.Выводим товары у которых в доп. свойстве типа флажок не стоит галочка.
2. Выводим товары у которых в доп. свойстве типа флажок стоит галочка.
Выводим товары у которых в доп. свойстве типа флажок не стоит галочка.
Выводим товары независимо от значения этого дополнительного свойства.
Если нас устраивает 1 тип фильтрации, тогда нужно сделать следующее:
Допустим у нас есть дополнительно свойство типа флажок с id = 77.
В Фильтре наше дополнительное свойство показываем в виде флажка, а в коде ТДС интернет магазина нужно заменить часть кода:
foreach ($aProperties as $oProperty) { // Св-во может иметь несколько значений $aPropertiesValue = Core_Array::getGet('property_' . $oProperty->id); if ($aPropertiesValue) {
На следующий код:
if(!isset($_GET['property_77'])) { $_GET['property_77'] = '0'; } else { $_GET['property_77'] = '1'; } foreach ($aProperties as $oProperty) { // Св-во может иметь несколько значений $aPropertiesValue = Core_Array::getGet('property_' . $oProperty->id); if (!is_null($aPropertiesValue) && $aPropertiesValue !== '') {
Так же нужно заменить код:
// Checkbox $oProperty->type == 7 && $propertyValue != '' && $propertyValue = 1;
На следующий:
// Checkbox $oProperty->type == 7 && $propertyValue != '';
Если нам нужен 2 тип фильтрации, то есть нужно учесть вариант, где дополнительное свойство может не участвовать в работе фильтра, нам надо будет изменить в XSL шаблоне отображение доп. свойства в фильтре на:
<select name="property_77"> <option value="">не важно</option> <option value="1">да</option> <option value="0">нет</option> </select>
А в коде ТДС нужно заменить код:
// Checkbox $oProperty->type == 7 && $propertyValue != '' && $propertyValue = 1;
на следующий:
// Checkbox $oProperty->type == 7 && $propertyValue != '';
А так же часть кода:
foreach ($aProperties as $oProperty) { // Св-во может иметь несколько значений $aPropertiesValue = Core_Array::getGet('property_' . $oProperty->id); if ($aPropertiesValue) {
на:
foreach ($aProperties as $oProperty) { // Св-во может иметь несколько значений $aPropertiesValue = Core_Array::getGet('property_' . $oProperty->id); if (!is_null($aPropertiesValue) && $aPropertiesValue !== '') {
Проверяем и наслаждаемся правильно работающим фильтром :)