How To: Вывод блока с разделами каталога товаров
Ввод списка разделов каталога является частным случаем показа магазина, при котором сами товары не выбираются и не выводятся.
Показ каталога товаров осуществляется с использованием метода show() контроллера показа интернет-магазина Shop_Controller_Show().
Контроллера показа принимает экземпляр объекта магазина в качестве параметра, а основные настройки задаются через методы контроллера.
<?php
// Разделы магазина
if (Core::moduleIsActive('shop'))
{
$Shop_Controller_Show = new Shop_Controller_Show(
Core_Entity::factory('Shop', 1)
);
$Shop_Controller_Show
->xsl(
Core_Entity::factory('Xsl')->getByName('МагазинГруппыТоваровНаГлавной')
)
->groupsMode('tree')
->group(0)
->limit(0)
->show();
}
?>
В приведенном примере контроллер принимает в конструктор экземпляр объекта магазина Core_Entity::factory('Shop', 1) и значения методов в качестве параметров показа:
- xsl(Xsl_Model) — принимает экземпляр класса Xsl_Model;
- groupsMode('tree')— режим показа групп, может принимать следующие значения:
- none — не показывать группы;
- tree — показывать дерево групп и все группы на текущем уровне (по умолчанию);
- all — показывать все группы.
- group(0) — идентификатор группы магазина. Если FALSE, то вывод товаров осуществляется из всех групп;
- limit(0) — количество выводимых товаров.
Пример HTML-структуры ссылок на разделы:
<p class="h1 red">Интернет-магазин</p>
<ul class="shop_list">
<li>
<a href="/shop/camcorder/">Видеокамеры</a>
</li>
<li>
<a href="/shop/digital-cameras/">Цифровые фотоаппараты</a>
</li>
...
</ul>
XSL-шаблон для отображения ссылок на разделы каталога:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:hostcms="https://www.hostcms.ru/"
exclude-result-prefixes="hostcms">
<xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict"
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN"
encoding="utf-8" indent="yes" method="html"
omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
<!-- МагазинГруппыТоваровНаГлавной -->
<xsl:template match="/">
<xsl:apply-templates select="/shop"/>
</xsl:template>
<!-- Шаблон для магазина -->
<xsl:template match="/shop">
<p class="h1 red">Интернет-магазин</p>
<ul class="shop_list">
<xsl:apply-templates select="shop_group"/>
</ul>
</xsl:template>
<!-- Шаблон для групп товара -->
<xsl:template match="shop_group">
<li>
<a href="{url}" hostcms:id="{@id}" hostcms:field="name" hostcms:entity="shop_group">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</li>
</xsl:template>
</xsl:stylesheet>
Комментарии
-
Для вывода подгрупп
Поправьте в коде контроллера ->groupsMode('tree') на ->groupsMode('all') Тогда подгруппы будут выводиться
-
Без темы
Почему при данном коду система берет данные из демонстрационного сайта интернет магазина, а не из моего. Где назначить из какого сайта брать информацию?
08.04.2013 10:32:35Иван
Без темы
Потому что в аргументах контроллера передается магазин с кодом 1, Вы можете номер 1 поменять на ID вашего магазина.
-
Без темы
Можете написать пример вывода groupsMode() в xsl шаблоне! Не могу понять как вывести подгруппы товара.
-
Без темы
Напишите пожалуйста, какие форматы сортировки есть кроме getByName — никак найти не могу синтаксис…
Без темы
См. http://www.hostcms.ru/documentation/guide/modules/core/orm/
13.12.2012 09:34:44HostCMS
Без темы
Ок, перефомулирую вопрос: getByXXX($value, $cache = TRUE) where XXX is the field name — где найти список филд неймов (ХХХ), которые можно подставить, чтобы сделать сортировку? Чисто интуитивно ввожу getByID — вылазят ошибки. Пишу getByDate — опять же ошибка…