Используются стандартная типовая динамическая страница "Интернет - магазин" и XSL-шаблон "МагазинКаталогТоваров".
1. В ТДС магазина перед блоком:
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName($xslName)
)
->itemsProperties(TRUE)
->show();
добавляется:
$oShop = $Shop_Controller_Show->getEntity();
// XML-сущность, к которй будут добавляться производители
$oProducersXmlEntity = Core::factory('Core_Xml_Entity')->name('producers');
// Добавляем XML-сущность контроллеру показа
$Shop_Controller_Show->addEntity($oProducersXmlEntity);
// Список производителей
$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.shop_group_id', '=', $Shop_Controller_Show->group)
->where('shop_items.deleted', '=', 0);
$aShop_Producers = $oShop_Producers->findAll();
foreach ($aShop_Producers as $oShop_Producer)
{
// Добавляем производителя потомком XML-сущности
$oProducersXmlEntity->addEntity(
$oShop_Producer->clearEntities()
);
}
2. В той же ТДС магазина перед:
// Prices
$price_from = intval(Core_Array::getGet('price_from'));
добавляется:
//Producers
if (Core_Array::getGet('producer_id'))
{
$iProducerId = intval(Core_Array::getGet('producer_id'));
$Shop_Controller_Show->addEntity(
Core::factory('Core_Xml_Entity')
->name('producer_id')->value($iProducerId)
);
$Shop_Controller_Show->shopItems()
->queryBuilder()
->select('shop_items.*')
->where('shop_items.shop_producer_id', '=', $iProducerId);
$Shop_Controller_Show->addCacheSignature('producer_id=' . $iProducerId);
}
3. В XSL-шаблоне после:
<div class="sorting">
<select name="sorting" onchange="$(this).parents('form:first').submit()">
<option disabled="disabled">Сортировать</option>
<option value="1">
<xsl:if test="/shop/sorting = 1"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
По цене (сначала дешевые)
</option>
<option value="2">
<xsl:if test="/shop/sorting = 2"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
По цене (сначала дорогие)
</option>
<option value="3">
<xsl:if test="/shop/sorting = 3"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
По названию
</option>
</select>
</div>
добавляется:
<div class="sorting">
<!-- Если есть доступные производители -->
<xsl:if test="count(producers/shop_producer) > 0">
Производитель:
<select name="producer_id">
<option value="0">…</option>
<xsl:apply-templates select="producers/shop_producer"/>
</select>
</xsl:if>
</div>
4. В том же XSL-шаблоне перед </xsl:stylesheet> добавляется:
<!-- Шаблон для фильтра производителей -->
<xsl:template match="producers/shop_producer">
<xsl:param name="id_prod" select="@id"/>
<option value="{@id}">
<xsl:if test="@id = /shop/producer_id">
<xsl:attribute name="selected"> </xsl:attribute>
</xsl:if>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</option>
</xsl:template>
После чего получим фильтр по производителям как в 5й версии.