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) и значения методов в качестве параметров показа:

Пример 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') Тогда подгруппы будут выводиться

    02.06.2015 22:00:37
    LKdesign
    LKdesign
  • Без темы

    Почему при данном коду система берет данные из демонстрационного сайта интернет магазина, а не из моего. Где назначить из какого сайта брать информацию?

    08.04.2013 10:32:35
    Иван

    Без темы

    Потому что в аргументах контроллера передается магазин с кодом 1, Вы можете номер 1 поменять на ID вашего магазина.

    09.04.2013 08:41:57
    hostcms
  • Без темы

    Можете написать пример вывода groupsMode() в xsl шаблоне! Не могу понять как вывести подгруппы товара.

    21.02.2013 14:35:17
    Miloserdov
    Miloserdov
  • Без темы

    А как вывести подгруппы?

    21.12.2012 13:01:59
    iqsite

    Без темы

    Внутри shop_group вызвать еще раз , при этом должен быть установлен соответствующий groupsMode()

    23.12.2012 15:25:03
    hostcms
  • Без темы

    Напишите пожалуйста, какие форматы сортировки есть кроме getByName — никак найти не могу синтаксис…

    13.12.2012 08:27:19
    firstinternetjob
    firstinternetjob

    Без темы

    См. http://www.hostcms.ru/documentation/guide/modules/core/orm/

    13.12.2012 09:34:44
    HostCMS

    Без темы

    Ок, перефомулирую вопрос: getByXXX($value, $cache = TRUE) where XXX is the field name — где найти список филд неймов (ХХХ), которые можно подставить, чтобы сделать сортировку? Чисто интуитивно ввожу getByID — вылазят ошибки. Пишу getByDate — опять же ошибка…

    13.12.2012 12:11:43
    firstinternetjob
    firstinternetjob

    Без темы

    Ищите название полей в базе данных

    21.12.2012 11:31:01
    kad