Ввод списка разделов каталога является частным случаем показа магазина, при котором сами товары не выбираются и не выводятся.
Показ каталога товаров осуществляется с использованием метода 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) и значения методов в качестве параметров показа:
Пример 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') Тогда подгруппы будут выводиться
Почему при данном коду система берет данные из демонстрационного сайта интернет магазина, а не из моего. Где назначить из какого сайта брать информацию?
Потому что в аргументах контроллера передается магазин с кодом 1, Вы можете номер 1 поменять на ID вашего магазина.
Можете написать пример вывода groupsMode() в xsl шаблоне! Не могу понять как вывести подгруппы товара.
Напишите пожалуйста, какие форматы сортировки есть кроме getByName — никак найти не могу синтаксис…
См. http://www.hostcms.ru/documentation/guide/modules/core/orm/
Ок, перефомулирую вопрос: getByXXX($value, $cache = TRUE) where XXX is the field name — где найти список филд неймов (ХХХ), которые можно подставить, чтобы сделать сортировку? Чисто интуитивно ввожу getByID — вылазят ошибки. Пишу getByDate — опять же ошибка…