Фильтрация дополнительных свойств типа "флажок"

Возникла потребность при фильтрации вывести товары, у которых в дополнительном свойстве типа флажок не стоит галочки, но в 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 !== '')
	{

Проверяем и наслаждаемся правильно работающим фильтром :)

comments powered by Disqus


Следующий "Заблуждения заказчиков" К списку Предыдущий "Дополнительные модули со скидкой 50%"