Спасибо, фильтр работает отлично! Теперь делаю производители как флажок единственное не могу уловить понять почему после GET не выделяются
// Фильтр по производителю
if (Core_Array::getGet('producer_id') and is_array(Core_Array::getGet('producer_id')))
{
// Получаем список производителей для текущей группы
$oShop_Producers = $oShop->Shop_Producers;
$oShop_Producers->queryBuilder()
->select('shop_producers.*')
->distinct()
->join('shop_items', 'shop_items.shop_producer_id', '=', 'shop_producers.id')
->where('shop_items.deleted', '=', 0)
->where('shop_items.active', '=', 1)
->where('shop_items.shop_group_id', 'NOT IN', Core_QueryBuilder::select('id')->from('shop_groups')->where('shop_id', '=', $oShop->id)->where('active', '=', 0));
$aShop_Producers = $oShop_Producers->findAll();
$aShop_Producers_Id = array();
foreach ($aShop_Producers as $oShop_Producer)
{
$aShop_Producers_Id[] = $oShop_Producer->id;
}
// Получаем и чистим массив идентификаторов выбранных пользователем производителей
$aSelected_Producers_Id = array_intersect(Core_Array::getGet('producer_id'), $aShop_Producers_Id);
if ($aSelected_Producers_Id)
{
$Shop_Controller_Show
->shopItems()
->queryBuilder()
->where('shop_items.shop_producer_id', 'IN', $aSelected_Producers_Id);
$Shop_Controller_Show->addCacheSignature('producer_id=' . implode(',', $aSelected_Producers_Id));
// Информируем вьюхи о выбранных производителях для отметки в select'е
$oProducersXmlEntity = array();
foreach ($aSelected_Producers_Id as $iSelected_Producer_Id)
{
$oProducerIdXmlEntity[] = Core::factory('Core_Xml_Entity')
->name('producer_id')
->value($iSelected_Producer_Id);
}
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')->name('filter_producer_id')->addEntities($oProducerIdXmlEntity)
);
}
}
В шаблоне написано так:
<xsl:if test="count(producers/shop_producer) > 0">
<fieldset>
<legend>
<span>Бренды</span>
</legend>
<div class="propertyInput">
<xsl:apply-templates select="producers/shop_producer"/>
</div>
</fieldset>
</xsl:if>
------------------------------------------------
<xsl:template match="producers/shop_producer">
<div class="check-itm-elem">
<input type="checkbox" value="{@id}" name="producer_id[]" id="producer_{@id}">
<xsl:if test="@id = /shop/filter_producer_id/producer_id">
<xsl:attribute name="checked">checked</xsl:attribute>
</xsl:if>
</input>
<label for="producer_{@id}">
<xsl:value-of disable-output-escaping="yes" select="name"/>-<xsl:value-of select="/shop/producer_id"/>
</label>
</div>
</xsl:template>
/shop/filter_producer_id/producer_id само по себе представляет массив и в этом случае как же проверить при условии
<xsl:if test="@id = /shop/filter_producer_id/producer_id">
?
Голову уже сломал вроде ничего сложно нет но загнул в ступор. У кого какая идея? Буду рад пишите. Спасибо!