Инструменты пользователя

Инструменты сайта


constructor:catalog

Содержание

Модуль «Каталог товаров»

Описание

Модуль «Каталог товаров» предназначен для построения каталога товаров или услуг, с разделением по рубрикаторам, и работой с карточкой товара.

Каждый товар принадлежит определенной товарной группе. Товары каждой товарной группы имеют свой набор свойств (полей), определяемых данной группой. Также для товаров могут определяться, так называемые, общие свойства, т.е. свойства, которыми обладают все товары вне зависимости от принадлежности к той или иной товарной группе. Набор общих свойств товаров и свойств конкретных товарных групп задается администратором сайта. Таким образом, создавая необходимый набор полей (цвет, размеры, вес… ) для каждой товарной группы, можно описать любые объекты какой-либо предметной области.

Все товары при необходимости могут быть быть разделены на категории. Список категорий имеет древовидную структуру. Он формируется администратором сайта, исходя из конкретной задачи, путем добавления нужных страниц в дерево каталога.

Для категорий каталога, так же как и для товаров, может быть сформирован список полей - свойств категорий (описание категории, изображение для категории и т.д.). Значения этих свойств могут выводиться на сайте для описания данной категории.

Каталог является многородительским, так что один и тот же товар может входить в разные категории. Уровень вложенности категорий не ограничен, но для удобства пользователей сайта не рекомендуется создавать иерархические структуры, содержащие более двух - трех уровней. Это сильно усложняет навигацию по сайту.

Так же в каталоге реализован механизм фильтров, с помощью которого Вы сможете делать отборы товаров по произвольным параметрам.

Корзина товаров служит для построения интернет-магазина. Заказы отсылаются на почту

Последовательность действий

  1. Инсталлируем каталог
  2. Создаем общие свойства товаров
  3. Создаем товарные группы
  4. Создаем свойства товаров, принадлежащих товарным группам
  5. Генерируем и назначаем шаблоны карточки товара и списка товаров для каждой товарной группы
  6. Идем в модули и создаем два действия: «Отобразить категории» и «Отобразить список товаров»
  7. Идем в структуру и прикручиваем метод «Отобразить категории» туда, куда вы будете выводить рубрикатор каталога, а «Отобразить список товаров» в метку контента.
  8. Настраиваем шаблоны категорий, списка товаров и карточки товара.

Общие свойства товара

Концепция каталога предполагает, что любой товар каталога имеет общие свойства, которые присутствуют у всех товаров и собственные поля. К примеру, у нас будут в качестве товаров выступать телевизоры и холодильники. Общими свойствами для них будут: Цена, Наименование товара, Артикул. Т.е. те поля в карточке товара, которые присутсвуют у ВСЕХ товаров каталога.

Что такое товарные группы

Если наш каталог имеет разнотипные товары, то логично, что админки этих товаров и карточки товара для посетителя должны быть различны. Чтобы посетитель не приходил на карточку телевизора и не видел там пустое поле «Объем морозильной камеры», а на карточке холодильника «Диагональ экрана». Соответсвенно, каждый товар принадлежит одной товарной группе. Именно для товарной группы определяется - какие дополнительные поля нужно будет задавать для товара, как будет выглядеть список товаров и как будет выглядеть конкретная карточка товара.

После создания и настройки товарной группы необходимо сделать два действия:

  1. Сгенерировать шаблоны
  2. Привязать их к товарной группе

Это то, что забывают сделать 80% всех, кто сталкивается со сложностью в настройке каталога.

Свойства

Следующее свойство задает количество товаров, отображаемых на странице в административном интерфейсе сайта (Таб. 1).

Название свойства Варианты значения Описание
Элементов на страницу в АИ Число, больше 0 Количество товаров на одной странице, в административном интерфейсе модуля, при просмотре списка.

Таб. 1: В таблице перечислены свойства модуля «Каталог товаров» которые количеством товаров на одной странице административного интерфейса.

Свойства к странице

Модуль не имеет свойств, приписываемых к странице сайта.

Действия

Каталог товаров имеет два действия: сформировать список категорий, сформировать список товаров. Рассмотрим их подробнее. �

Сформировать список категорий

Данное действие, как следует из его названия, формирует список категорий для удобной навигации по каталогу. Сформированный список категорий повторяет структуру каталога, и по сути является аналогом динамического меню сайта. При клике на какой-либо категории происходит переход на страницу сайта, где вызывается действие «Сформировать список товаров». На данной странице выводится список товаров, зарегистрированных в данной категории.

В таблице 2 представлен список параметров действия.

Параметр действия Варианты значений Описание
Название действия Текстовая строка Имя действия, отображаемое в административном интерфейсе
Шаблон Выбирается один из списка доступных шаблонов. Указанный шаблон будет использоваться для формирования визуального представления списка категорий.
Категория начала построения ID элемента каталога Параметр, который вы можете прочесть из cid ссылки каталожной. Определяет ветку с которой начинать построение меню.
Уровень начала построения Число от 1 до 6 Уровень в структуре сайта (относительно категории начала построения), с которого будет начинаться формирования список категорий.
Количество раскрываемых уровней меню Число от 1 до 6 Определяет количество уровней в структуре, которые будут отображены при построении меню. Уровни считаются от уровня выбранной категории построения.
Макс. количество раскрываемых уровней менюЧислоЗадает максимальное количество уровней меню, которые могут быть раскрыты. Если Ваш каталог имеет 5 уровней вложенности, а Вам нужно раскрыть только первые 3, тогда в этом поле нужно указать «3»
Страница для вывода списка товаровВыбирается конкретная страница сайта с помощью визуальных средств. Так же, значение идентификатора может быть введено вручную Необходимо указать, на какой странице сайта будет выводиться действие «Сформировать список товаров».

Таб. 2: Перечень параметров действия «Сформировать список категорий».

Сформировать список товаров

Данное действие формирует список товаров. Внешний вид списка товаров зависит определяется шаблоном. Со страницы со списком товаров можно перейти к странице с подробным описанием выбранного товара. Переход осуществляется щелчком по элементу, отвечающему за навигацию. В шаблоне по умолчанию - это гиперссылка «Подробнее…».

В таблице 3 представлен список параметров действия.

Параметр действия Варианты значений Описание
Название действия Текстовая строка Имя действия, отображаемое в административном интерфейсе
Товаров на страницу Целое число Количество товаров выводимых на одной странице сайта
Выводить ли список категорий, если нет товаров? вкл./выкл При включении данной опции для пустых категорий на месте списка товаров будет выводиться список категорий
Шаблон списка категорий Выбирается один из списка доступных шаблонов. Указанный шаблон будет использоваться для формирования визуального представления списка категорий на месте списка товаров, если в категории нет товаров и включена опция «Выводить ли список категорий, если нет товаров?»

Таб. 3: Перечень параметров действия «Сформировать список товаров».

Сформировать название элемента

С помощью этого действия Вы можете задавать шаблон формирования текстовых строк, которые используются для построения TITLE или названия товара. В диалоге Вы увидите список переменных, которые Вы сможете использовать при построении шаблона строки. Результирующий шаблон будет выглядеть примерно так:

%name% - цены и продажа со склада в Санкт-Петербурге

где %name% будет заменятся на название товара.

Также можно в шаблоне использовать Get и Post запросы.
Например имеем ссылку вида: /catalog.html?cid=14&brand=Peg-Perego&filterid=brand_select
Для получения в строке наименования бренда (в данном случае Peg-Perego) в шаблоне пишем:

%GET[brand]% или %POST[brand]% или %REQUEST[brand]% (и GET и POST параметры)

Вывести содержимое корзины

Этот метод выводит содержимое корзины покупок. В качестве параметра принимает шаблон корзины покупок.

Отобразить форму заказа

Метод строит форму заказа. Т.е. выводит поля, которые должен заполнить покупатель для оформления заказа и определяет на какие e-mail уйдут подтверждения.

Сформировать выборку по внутреннему фильтру

Выводит выборку, которая формируется по внутреннему фильтру каталога. В качестве параметра принимает название внутреннего фильтра.

Переменные

В каталоге товаров можно задавать произвольное количество переменных величин (например, курс валюты) и использовать их в шаблонах и внутренних фильтрах. Обратиться к переменной можно через конструкцию

%formula[%variable[id_переменной]%]%

Пример

%formula[%variable[id_переменной]% * %price_value%]% 

эта конструкция заменится на:

%formula[курс евро * евро]% и после этого сделает умножение.. на экране будет только цена в руб.

Пример 2 (формула с округлением результата)

%formula[round(%variable[id_переменной]%*%price_value%)]%

Шаблоны

Модуль «Каталог товаров» отличается от остальных модулей SantaFox тем, что шаблоны назначаются не действиям модуля, а товарным группам. Другой отличительной особенностью модуля является то, что в системе отсутствуют предустановленные шаблоны для вывода списка категорий и списка товаров. Шаблоны генерируются для каждой товарной группы на основе списка свойств товаров данной товарной группы.

Вывод связанных товаров

- Создать действие «Отобразить связанные товары»;

- В общих свойствах нужно отметить одно из как свойств по которому Вы будете отбирать связанные товары в админке. В 99% случаев имеет смысл ставить галку на свойстве «Наименование».

- в товаре добавить связанный товар;

- Поставить метку в карточка товара, куда будут выводиться связанные товары;

- Назначить действие «Отобразить связанные товары» на созданную метку.

Шаблон используется такой же, как и у списка товаров.

Сравнение товаров

Список товаров нужно обернуть в форму со ссылкой на страницу результата:

<form action="compare.html" method="POST">
.
.
.
</form>

В описании каждой строки товарного предложения разместить следующую конструкцию:

<!-- @row_odd -->
<tr>
    <td><input type="checkbox" name="additems2compare[]" value="%item_id%" /></td>
     .
     .
     .
</tr>

Параметры для шаблона:

параметр для чекбоксов - additems2compare;

параметр при единичном добавлении - add2compare;

параметр для удаления - remove_from_compare;

GET['clear_all'] или POST['clear_all'] - удалить все товары из сравнения

Пример единичного добавления и удаления товара:

<a href="compare.html?add2compare=%item_id%&redir2=%current_page_url%">Сравнить</a>
<a href="compare.html?remove_from_compare=%item_id%">удалить</a>

Страница сравнения товаров

Используются следующие секции и переменные

Секция шаблонаЗначение
@contentосновной шаблон
@list_nullВыводим что-то, если нет ни одного товара
@less_than_twoВыводим что-то, если товаров 1
@prop_valueЗначение свойства, которое будет в таблице выводиться
@prop_values_separatorРазделитель
@diff_value_lineОформление строки, если различаются свойства товаров в ней
@same_value_lineОФормление строки, если свойства идентичны
@item_headerОформление шапки таблицы (там где собственно товары представлены) можно использовать %свойство товара% и данные брать из блоков @свойство товара_value и @свойство товара_null
@iheaders_separatorразделитель шапки
@image_val_tplшаблон вывода в случае, если %свойство_line% является изображением
ПеременнаяЗначение
%items_headers%Заголовок сравниваемых товаров
%NNNNN_line%Тут перечисляются ID свойств по которым Вы хотите делать сравнение. Вместо _value пишите _line
%total_compared%заменяется на количество сравниваемых товаров

Пример

<!-- @list_null -->
<h3>нет товаров для сравнения</h3>

<!-- @less_than_two -->
<h3>товаров должно быть минимум 2</h3>

<!-- @content -->
<style type="text/css">
    tr.diff{
        font-weight: bold;
        color: #8e0000;
    }
</style>

<form action="compare.html" method="post">
<table border="1">
    <tr>
        <th>&nbsp;</th>
        %items_headers%

    </tr>
    %diameter_line%
    %price_line%
    %manufacturer_line%
    %tovartype_line%
    %voltage_line%
    %weight_line%
</table>

<input type="submit" value="убрать выбранные из сравнения">
</form>

<!-- @prop_value -->
<td>%value%</td>

<!-- @prop_values_separator -->

<!-- @diff_value_line -->
<tr class="diff">
    <td>%name_full%</td>
    %prop_values%
</tr>

<!-- @same_value_line -->
<tr class="same">
    <td>%name_full%</td>
    %prop_values%
</tr>

<!-- @iheaders_separator -->

<!-- @item_header -->
<th>
    %name_value%
    <br><input type="checkbox" name="remove_from_compare[]" value="%item_id%">
</th>

Общие замечания о шаблонах

Хорошей идеей будет работать с шаблонами, которые лежат в /catalog/templates_admin/frontend_templates/ Тогда при генерации шаблона для нового типа товаров он сразу будет генерировать адекватную карточку товара и список товаров в Вашем дизайне.

При работе с «шаблонами шаблонов» можно использовать следующие подстановки:

ПеременнаяОписание
%prop_name_db%_name%Подставляет в качестве названия поля конструкцию %IDсвойства_name%. При отображении таблицы свойств товара их названия будут такие же как в админке

Шаблон списка категорий

ПеременнаяОписание
%catproperty_value%Выводит свойства категории с ID %catproperty% (%catproperty_value% - может быть любое созданное свойство категории) пример для id imagecat - %imagecat_value%
%link%Заменяется ссылкой на текущую категорию
%catid%Заменяется на ID каталога
%cat_items_count%Заменяется на количество товара в категории
%curr_category_name%Заменяется на наименование текущей категории
%show_items_list[name_template.html]%выводит список товаров в категории, name_template.html - имя шаблона для списка товаров.

Используется для действия «Сформировать список категорий». Структура шаблона полностью аналогична структуре шаблона для вывода динамического меню.

В шаблоне списка категорий можно использовать переменную %curr_category_name%. Она выводит наименование текущей категории. Это может пригодиться если у Вас стоит галка «Показывать категории если нет товаров» в списке товаров. В таком случае может пригодиться эта переменная

В шаблоне списка категорий работают те же правила, что в шаблоне списка товаров. На текущий момент, списoк категорий должен быть оформлен как шаблон меню. Только вместо переменной %text% нужно использовать переменную %name_value%

Пример 1:

<!-- @begin -->
				<ul id="add-nav">
<!-- @link -->
					<li><a href="%link%">%name_value%</a>
<!-- @activelink -->
					<li><a href="%link%"><b>%name_value%</b></a>
<!-- @passiveactive -->
					<li><a href="%link%"><b>%name_value%</b></a>
<!-- @delimiter -->

<!-- @end -->
				</ul>

Пример 2:

<!-- @begin -->
		
<!-- @link -->
            	<a href="%link%"><img src="%image_value%" alt="%name_value%"/></a>
                 	<a href="%link%"><strong class="title">%name_value%</strong></a>
                    <p>%meta_description_value%</p>
                       %show_items_list[list_visa.html]%	
<!-- @activelink -->
	<a href="%link%"><img src="%image_value%" alt="%name_value%"/></a>
                 	<a href="%link%"><strong class="title">%name_value%</strong></a>
                    <p>%meta_description_value%</p>
                       %show_items_list[list_visa.html]%	
<!-- @passiveactive -->
	<a href="%link%"><img src="%image_value%" alt="%name_value%"/></a>
                 	<a href="%link%"><strong class="title">%name_value%</strong></a>
                    <p>%meta_description_value%</p>
                       %show_items_list[list_visa.html]%
<!-- @delimiter -->
<!-- @end -->	

Шаблон списка товаров

Шаблон списка товаров используется для действия «Сформировать список товаров».

Стандартные блоки

Для построения списка товаров могут быть использованы следующие основные блоки, которые представлены в Таблице 4.

Заголовок блока Прямые переменные Переменные-блоки Описание
@list total_in_cat, total_compared row, pages, переменные-блоки типа category_catproperty, property Основной блок, которым замещается метка в шаблоне, при вызове действия по формированию списка товаров. Использует переменную, которая будет заменена на блок @row, столько раз, сколько товаров в категории. (Переменная pages используется только в случае, если в категории больше товаров, чем выводится на страницу. Она заменяется на меню постраничной навигации)
@row_odd link Идентификаторы свойств товарной группы и категории (category_catproperty, property) Определяет внешний вид товаров, имеющих нечетный номер в списке товаров
@row_even link Идентификаторы свойств товарной группы и категории (category_catproperty, property) Определяет внешний вид товаров, имеющих четный номер в списке товаров
-%odd_even%-Переменная, которая принимает значение «row_odd» или «row_even» в зависимости от того - четная или нечетная строка в таблице. Удобно использлвать для задания класса строки таблицы, чтобы добиться чередования. В таком случае, можно исаользовать только одну секцию %row%
@category_catproperty category_catproperty_value - Определяет внешний вид свойства catproperty категории
@property property_value - Определяет внешний вид свойства property товарной группы
@property_null - - Определяет, что будет выводиться вместо свойства товара, если оно не заполнено в базе
@row_delimeter - - Определяет внешний вид разделителя товаров
Поле картинкиmyimage_width-Возвращает длинну картинки
Поле картинкиmyimage_heigh-Возвращает высоту картинки

Таб. 4: Основные блоки, используемые в шаблоне списка товаров.

Следует обратить внимание, что вместо property и category_catproperty следует подставлять идентификаторы свойств категории и товарной группы соответственно. Например, если в вашем каталоге товаров у категорий определено свойство с идентификатором catname, а у товарной группы определено свойство name, то данные переменные-блоки в самом простом случае будут иметь вид

<!– @category_catname –>

%category_catname_value%

и

<!– @name –>

%name_value%

соответственно.

Вот пример шаблона списка товаров

<!-- @list -->
%show_selection_manufacturer_build%  <-- вызов внутреннего фильтра manufacturer_build
%show_selection_manufacturer_select% <-- вызов внутреннего фильтра manufacturer_select
				<table>
					<tr>
						<th>Фото</th>
						<th width="60%">Наименование</th>
						<th width="20%">Цена</th>
					</tr>
					%row%	<-- Строки товаров			
				</table>
				%pages% <-- блок страничной навигации

<!-- @row_odd --> 
					<tr>
						<td class="photo"><a href="%link%">%foto%</a></td>
						<td><a href="%link%">%type% %name%</a></td>
						<td class="price"><nobr>%price% %currency_value%</nobr></td>
					</tr>
<!-- @row_even -->
					<tr class="alt">
						<td class="photo"><a href="%link%">%foto%</a></td>
						<td><a href="%link%">%type% %name%</a></td>
						<td class="price"><nobr>%price% %currency_value%</nobr></td>
					</tr>

<-- 
Обратите внимание, что фотография вставлена не через %foto_value%, а через описание более общего: %foto%. 
Это дает возможность использовать как секции @foto, так и секции @foto_null,
если нет фотографии, то это даст нам возможность не выводить пустой <img src>
-->

<!-- @name -->
%name_value%

<!-- @foto -->
<img src="%foto_small%" border="0" alt="%type_value% %name_value%"/>

<!-- @type-->
%type_value% 


<!-- @price -->
%price_value%

<!-- @type_null -->

<!-- @name_null -->

<!-- @foto_null -->        

<!-- @price_null -->

<!-- @row_delimeter -->

Блоки страничной навигации

Теперь рассмотрим дополнительные блоки необходимые для формирования системы постраничной навигации в том случае, если количество выводимых товаров не умещается на одну страницу. В Таблице 5 приведено описание блоков, которые используются для формирования постраничной навигации.

Заголовок блока Прямые переменные Переменные-блоки Описание
@pages - first, backward, previous, pages_block, next, forward, last Выводиться вместо переменной pages в блоке @list (Таб. 4) в том случае, если в сформированном архиве необходима постраничная навигация. Переменная page_block заменяется набором блоков @page_active и @page_passive (количество блоков соответствует количеству страниц в блоке) соединённых последовательно, между которым вставляется блок @delimiter.
@page_first url - Заменяется переменная first в блоке @pages, в том случае, если мы находимся не на самой первой странице. Используется для формирования ссылки перехода к этой самой первой странице.
@page_backward url - Заменяется переменная backward в блоке @pages, в том случае, если страниц так много, что они разбиты на несколько блоков и текущая страница не входит в первый из них.
@page_previous url - Заменяется переменная previous в блоке @pages, в том случае, если существует более одной страницы и необходимо вывести ссылку на предыдущую страницу относительно текущей.
@page_previous_disabled - - Заменяется переменная previous в блоке @pages, в том случае, если существует более одной страницы, но текущая страница является первой и значит, что предыдущей страницы нет.
@page_next url - Заменяется переменная next в блоке @pages, в том случае, если мы находимся не на самой последней странице. Используется для формирования ссылки перехода к следующей странице, относительно текущей.
@page_next_disabled - - Заменяется переменная next в блоке @pages, в том случае, если мы находимся на самой первой странице.
@page_forward url - Заменяется переменная forward в блоке @pages, в том случае, если страниц так много, что они разбиты на несколько блоков и текущая страница в любом из них, кроме последнего.
@page_forward_disabled - - Заменяется переменная forward в блоке @pages, в том случае, если страниц так много, что они разбиты на несколько блоков и текущая страница входит в последний из них.
@page_last url - Заменяется переменная last в блоке @pages, в том случае, если мы находимся не на самой последней странице. Используется для формирования ссылки перехода к этой самой последней странице.
@page_active url, page - Используется для формирования переменной page_block в блоке @pages. Формируется для страницы списка товаров, на которую может перейти пользователь (то есть не для текущей страницы).
@page_passive url, page - Используется для формирования переменной page_block в блоке @pages. Формируется для странице списка товаров, на которой сейчас находиться пользователь сайта (то есть для текущей страницы).
@page_delimeter - - Используется для формирования переменной page_block в блоке @pages, Разделяет блоки @page_active и @page_passive друг от друга.
@page_null - - Используется в том случае, если страниц так много, что необходимо показывать не все из них.

Таб. 5: Перечень блоков, используемых для формирования постраничной навигации внутри архива новостей.

Прежде всего, следует обратить внимание на блок @pages. Именно в нём определяется взаиморасположение элементов навигации по страницам. А за тем, в каждом из блоков определяется, как выглядит тот или иной элемент навигации (будь то ссылка на самую первую страницу, или переход к следующему блоку).

Если вы не хотите использовать все элементы навигации, то вам просто не надо использовать соответствующую переменную-блок в блоке @page_s.

Следует отметить, что при описании всех этих блоков используется термин «страницы», который обозначает не страницы сайта (те что представлены в структуре), а страницы списка товаров, на которые разбивается весь категория каталога.

Пример секции страницы постраничной навигации

<!-- @pages -->
<div class="pages">
Страница: %pages_block%
</div>
<!-- @page_previous -->
<a href="%link%">&laquo; Назад</a>

<!-- @page_previous_disabled -->

<!-- @page_next -->
<a href="%link%">Вперед &raquo;</a>

<!-- @page_next_disabled -->

<!-- @page_active -->
<a href="%link%">%page%</a>

<!-- @page_passive -->
<b>%page%</b>

<!-- @page_delimeter -->
&nbsp;

<!-- @page_null -->

Переменные

Рассмотрим здесь только прямые переменные, используемые в шаблоне списка товаров, так как переменные-блоки заменятся блоками и уже были описаны выше. В Таблице 6 приведено описание переменных, используемых во всех блоках шаблонов.

Переменная Блоки применения Описание
total_in_cat @list Выводит количество товаров в категории
total_compared @list Выводит количество товаров сравниваемых товаров
Переменная типа category_catproperty_valueБлок типа @category_catpropertyВыводит значение свойства catproperty категории каталога
Переменная типа property_valueБлок типа @propertyВыводит значение свойства property товара
url Все участвующие в формировании постраничной навигации Заменяется ссылкой для перехода к конкретной странице (в зависимости от используемого блока)
page Все участвующие в формировании постраничной навигации Замещается номером страницы (в зависимости от используемого блока).

Таб. 6. Перечень всех переменных, используемых в шаблоне списка товаров.

Шаблон карточки товаров

Шаблон списка товаров используется для действия «Сформировать список товаров».

Стандартные блоки

Для построения карточки товара могут быть использованы следующие основные блоки, которые представлены в Таблице 7.

Заголовок блока Прямые переменные Переменные-блоки Описание
@item - cat_way_block, переменные-блоки типа property Основной блок, которым замещается метка в шаблоне, при переходе к карточки товара.
@cat_way_block - cat_way Определяет внешний вид «Дороги» товара
@cat_way_separator - - Определяет внешний разделителя в «дороге» товара
@cat_way_active cat_link, cat_name - Определяет внешний активного элемента «дороги» товара, т.е той категории в которой находится данный товар
@cat_way_passive cat_link, cat_name - Определяет внешний не активного элемента «дороги» товара, т.е. родительских категорий
Блоки типа @property property_value - Определяет внешний вид свойства property товара
Блоки типа @property_null - - Определяет, что будет выводиться вместо свойства property товара, если оно не заполнено в базе

Таб. 7: Основные блоки, используемые в шаблоне карточки товара.

Если Вам нужно из карточки товара получить доступ к переменным категории, то для этого есть конструкция %last_cat_block%

<!-- @item -->
<h1>%name%</h1>
%last_cat_block%

<!-- @last_cat_block -->
%cat_desc%

В этом фрагменте, в карточке товара мы отображаем описание родительской категории товара: %cat_desc%. Так как товар может принадлежать нескольким категориям, то берется последняя посещенная категория из cookies

Переменные

Рассмотрим здесь только прямые переменные, используемые в шаблоне списка товаров, так как переменные-блоки заменятся блоками и уже были описаны выше. В Таблице 8 приведено описание переменных, используемых во всех блоках шаблонов.

Переменная Блоки применения Описание
cat_link @cat_way_active, @cat_way_passive Заменяется ссылкой для перехода к конкретной странице в «дороге»
cat_name @cat_way_active, @cat_way_passive Заменяется названием конкретной страницы в «дороге»
Переменная типа property_valueБлок типа @propertyВыводит значение свойства property товара
%image_small%-Определяет вывод маленькой картинки, если поле с ID 'image' является изображением
%image_value%-Определяет вывод средней картинки, если поле с ID 'image' является изображением
%image_source%-Определяет вывод большой картинки, если поле с ID 'image' является изображением

Таб. 8. Перечень всех переменных, используемых в шаблоне списка товаров.

Пример шаблона карточки товара

<!-- @item -->
				%foto%
				<h2><a href="/cart.html?catalog_basket_additemid=%item_id%">Заказать</a></h2> <-- Кнопка, добавляющая заказ в корзину
				%description%
				<h3>Характеристики %name_value%</h3>
				<table>
					<tr>
						<th>Характеристика</th>
						<th>Значение</th>
					</tr>
					<tr>
						<td>Напряжение электросети</td>
						<td>%voltage_value% вольт</td>
					</tr>
					<tr class="alt">
						<td>Потребляемая мощность</td>
						<td>%power_value%</td>
					</tr>
					<tr>
						<td>Диапазон регулирования</td>
						<td>%idelta_value% А</td>
					</tr>					
					<tr class="alt">
						<td>ПВ</td>
						<td>%pv_value%%</td>
					</tr>	
					<tr>
						<td>Вес</td>
						<td>%weight_value% кг.</td>
					</tr>				
				</table>

<!-- @name -->
%name_value%

<!-- @description -->
%description_value%


<!-- @foto -->
<img class="obj-photo" src="%foto_value%" alt="%name_value%"/>

<!-- @price -->
%price_value%


<!-- @name_null -->

<!-- @description_null -->

<!-- @foto_null -->        

<!-- @price_null -->


<!-- Секции построения цепочки навигации -->
<!-- @cat_way_block -->
%cat_way%

<!-- @cat_way_separator -->
-&gt;

<!-- @cat_way_active -->
<b>%cat_name%</b>

<!-- @cat_way_passive -->
<a href="%cat_link%">%cat_name%</a>

Внутренние фильтры

Внутренние фильтры предназначены для того, чтобы производить отбор товаров по некоторым правилам. Если Вам необходимо, к примеру, показать товары с наименьшей ценой, новинки, все товары с определенным полем и т.п. - сделать это можно с помощью внутреннего фильтра.

Внутренние фильтры имеют следующие поля:

Название поляОписание
НазваниеНазвание фильтра для администратора
Строковый IDID фильтра для CMS. Будет использоваться в шаблонах, поэтому важно, чтобы было строковым, латиницей, без пробелов и спецсимволов
ЗапросСамая важная часть фильтра. Собственно, выражение, которое отбирает те или иные товары
ШаблонШаблон вывода результатов фильтра. Структура такая же, как шаблон списка товаров
ЛимитСколько товаров отбирать по фильтру. Иногда нужно отобрать не все товары, а только 2-3
Товаров на страницуЕсли отбирается много товаров, и их всех нужно выводить, то в этом поле задаем по сколько товаров на страницу выводим
Макс. кол-во страницЗадает количество страниц в постраничной навигации
Товарная группа фильтраФильтр работает в одной товарной группе. Эту группу нужно задать
Страница товараТак же как в категориях каталога, нужно задать на какой странице структуры сайта будут отображаться товары
КатегорииФильтр может работать как в текущей категории в которой находится пользователь, так и по всем категориям, так и в выбранных категориях

Язык запросов

Язык запросов очень похож на SQL, но имеет ряд упрощений. Синтаксис запроса очень простой. Вы указываете свойство, и его значение. К примеру, если у вас есть свойство color и вы хотите отобрать все товары красного цвета, то строка запроса у Вас будет такой:

items.color = Красный

или

items.color = 'Красный'

Если Вы хотите отобрать все товары производителя Ferrari и красного цвета, то используйте оператор AND

manufacturer = 'Ferrari' AND color = 'Красный'

Если Вам нужно получить доступ не к полю общих свойств товара, а к полю определенной товарной группы, то укажите ID товарной группы перед полем через точку.

car.color = 'Красный'

Список некоторых операторов и функций, которые вы можете задействовать в своих фильтрах

ОператорОписаниеКомменатрий
ORЛогическое «ИЛИ»Используется если вам нужно отобрать товары с одним условием ИЛИ с другим
ANDЛогическое «И»Используется если вам нужно отобрать товары с одним условием И с другим
=РавноСосбтвенно оператор условия «равно»
!=Не равно-
<Меньше-
>Больше-
ORDERASC(свойство)Сортировка по возрастанию -
ORDERDESC(свойство)Сортировка по убыванию-
GROUP (свойство)Группировка по свойствуАналог Group By в mysql. Группирует по какому-либо свойству, оставляя только уникальные значения
LIKEподобиеИщет вхождение подстроки в строку. К примеру есть название «Sony Handycam 5100» name='Handycam' этот товар не найдет, а name LIKE '%Handycam%' - найдет
REMOVE_NOT_SET[кусок запроса]удаляет секцию запроса, если переменная не пришлаREMOVE_NOT_SET[ AND `maxi`⇐param[maxi_to]] - уберет эту секцию, если во внешнем фильтре пользователь не введет данные в поле «maxi_to»
IS NULL, IS NOT NULLТест для определения, является ли свойство равной NULL или нет

Так же можно использовать просто SQL-запросы и другие SQL-команды и операторы.

Внешние фильтры

Суть их такая же как у внутренних фильтров. Только параметры, по которым производится отбор они получают от посетителя сайта.

Последовательность создания внешнего фильтра:

  1. Создаем внутренний фильтр
  2. Заменяем в нем значения на параметры, получаемые из формы внешнего фильтра

Форма внешнего фильтра выглядит как обычная форма, с двумя дополнениями: 1. Она должна обязательно содержать скрытое поле с ID внутреннего фильтра. Это боле должно называться «filterid» 2. Поля формы должны иметь параметр name по которым и осуществляется получение данных.

Например: У нас есть внешний фильтр, который отбирает товары по производителю. Строка фильтра выглядит вот так:

mygroup.manufacturer = 'param[manuf]'

Где

mygroupID товарной группы
manufacturerСвойтво товара «Производитель»
param[manuf]Переменная «manuf» которую фильтр получает из формы

ID этого фильтра будет manufacturer_select

В шаблоне списка товаров форма может выглядеть так:

<form>
<input name = "manuf" value="">
<input name = "filterid" value="manufacturer_select" type="hidden">
</form>

Некоторые не очевидные возможности использования фильтров

Нужно помнить, что фильтры можно использовать в связке. К примеру, с помощью одного фильтра строить другой.

Вот как это может выглядеть:

Фильтр с ID manufacturer_build строит второй фильтр следующим запросом в текущей категории:

manufacturer != «dgdg» GROUP (manufacturer)

Результатом работы этого фильтра будет отбор всех производителей в текущей категории и выводятся в страницу с помощью такого шаблона:

<!-- @list -->
				<p>Показать только производителя: <a href="%current_page_url%">Все</a>&nbsp;%row%</p>

<!-- @row -->
				<a href="%current_page_url%manuf=%manufacturer_value%&filterid=manufacturer_select">%manufacturer_value%</a>&nbsp;

<!-- @row_delimeter -->

где

ПеременнаяОписание
%current_page_url%Заменяется на текущий URL

В итоге мы имеем ссылки, которые вызывают второй фильтр с id 'manufacturer_select', который осуществляет отбор текущего списка товаров по производителю.

Таким образом, фильтры автоматически отслеживают параметры, которые Вы вводите в товары. Вызываются эти фильтры очень просто. В шаблоне списка товаров нужно последовательно вызвать сначала внутренний фильтр 'manufacturer_build', который строит внешний фильтр, а потом внешний фильтр 'manufacturer_select':

<!-- @list -->
%show_selection_manufacturer_build%
%show_selection_manufacturer_select%

Вызов фильтра с параметром

Вы можете создать внешний фильтр и вызывать его из кода страницы не GET/POST запросом, а через прямую передачу параметров.

%show_selection_analog(voltage = %voltage_value%; current = %current_value%)%

В этом примере мы вызвали фильтр с ID 'analog' и передали ему в качестве параметра 'voltage ' значение этого поля у товара (%voltage_value%)

Корзина товаров

Переменные корзины товаров

ПеременнаяОписание
%total_basket_items%Возвращает количество товаров в корзине товаров
catalog_basket_upd_qtyОбновляет количество товаров в корзине
%field_total[price]%подсчитывает общую сумму поля 'price'
%field_sum[price]%Сумма поля 'price' в строке
%items_qty%Количество товара в строке
%item_id%ID товара
%item_id%ID товара
%ending% Правильное окончание для множественного числа товаров

Количество товара

<input type="text" name="basket_item_qty[%item_id%]" value="%items_qty%" size="3">

Обновление количества товаров

<input type="submit" name="catalog_basket_upd_qty" value="Обновить количество">

Удаление товара

<a href="%current_page_url%catalog_basket_removeitemid=%item_id%">удалить из заказа</a>
<!-- @list -->
Всего товаров в корзине: %total_basket_items%
<form method="post" action="">
				<table>
					<tr>
						<th>Фото</th>
						<th width="60%">Наименование</th>
						<th>Цена</th>
						<th>Количество</th>
						<th width="20%">Сумма</th>
					</tr>
					%row%					
				</table>
<input type="submit" name="catalog_basket_upd_qty" value="Обновить количество">
<h2>Общая сумма заказа: %field_total[price]% рублей.</h2>
</form>

<!-- @row_odd -->
					<tr>
						<td class="photo">%foto%</td>
						<td><h2>%type% %name%</h2><a href="%current_page_url%catalog_basket_removeitemid=%item_id%">удалить из заказа</a></td>
						<td><nobr>%price% %currency_value%</nobr></td>
						<td><input type="text" name="basket_item_qty[%item_id%]" value="%items_qty%" size="3"></td>
						<td class="price"><nobr>%field_sum[price]% %currency_value%</nobr></td>
					</tr>
<!-- @row_even -->
					<tr class="alt">
						<td class="photo">%foto%</td>
						<td><h2>%type% %name%</h2><a href="%current_page_url%catalog_basket_removeitemid=%item_id%">удалить из заказа</a></td>
						<td><nobr>%price% %currency_value%</nobr></td>
						<td><input type="text" name="basket_item_qty[%item_id%]" value="%items_qty%" size="3"></td>
						<td class="price"><nobr>%field_sum[price]% %currency_value%</nobr></td>
					</tr>


<!-- @row_delimeter -->


<!-- @list_null -->
Нет элементов


<!-- @name -->
%name_value%

<!-- @foto -->
<img src="%foto_small%" border="0" alt="%type_value% %name_value%"/>

<!-- @type-->
%type_value% 


<!-- @price -->
%price_value%

<!-- @type_null -->

<!-- @name_null -->

<!-- @foto_null -->        

<!-- @price_null -->

Стикер корзины товаров

ПеременнаяОписание
%total_basket_items%Сколько всего товаров в корзине
%field_total[price]%Сумма поля 'price'
%ending% Правильное окончание для множественного числа товаров
<a href="/cart.html">Корзина: всего  %total_basket_items% %ending%  на сумму %field_total[price]%</a>

Экспорт и импорт товаров

Экспорт в CSV

Для выгрузки товаров в используется метод «Экспорт в CSV»

Пример шаблона строки:

 %id%; %tovar_id%; %short_description%; %name%; %full_description%; %price%

Выгрузка данных на Яндекс-Маркет и подобные сервисы

Для выгрузки товаров в различные интернет-витрины используется метод «Экспорт»

Последовательность действий

  1. Создаете пустую страницу в редакторе структуры. Называете ее, к примеру, yandex
  2. Создаете новый шаблон в папке /design/. Шаблон состоит из одной строчки:
    <?xml version="1.0" encoding="utf-8"?>
    [#content#]
  3. В настройке модуля «Каталог» добавляете новый метод «Экспорт». К нему можно прицепить какой-нибудь фильтр, чтобы отбирать только нужные товары (к примеру с ненулевой ценой). Так же в этом действии вы выбираете шаблон в котором хотите получать данные. Примерный шабалон для Яндекс-Маркета приведен ниже (обратите внимание, что ID полей данных Вы должны взять свои)
  4. В «Структуре» прицепляется к только созданной странице только что созданный шаблон.
  5. В метку [#content#] подключается действие «Экспорт»
  6. ПРОФИТ :)

Вот примерно так может выглядеть шаблон для Маркета

ПеременнаяОписание
%xml_cleanup[Данные какие-то]%Эта конструкция очищает выводимые данные от запрещенных в стандарте XML символов
%date[Y-m-d H:i]%Приводит дату в нужном формате
<!-- @list_null -->
<!-- @list -->
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="%date[Y-m-d H:i]%">
<shop>
<name>%xml_cleanup[Название Магазина]%</name>
<company>%xml_cleanup[Название Магазина]%</company>
<url>%variable[site_url]%</url>
<currencies>
<currency id="RUR" rate="1" plus="0"/>
</currencies>
%categories_flat_list%
<offers>
    %row%
</offers>
</shop>
</yml_catalog>

<!-- @categories_flat_list -->
<categories>
    %category_row%
</categories>
<!-- @categories_flat_null -->
<!-- @category_flat_row -->
<category id="%id_value%"  parentId="%parent_id_value%">
%xml_cleanup[%name_value%]%
</category>

<!-- @series -->
<param name="Серия">%xml_cleanup[%series_value%]%</param>
<!-- @manufacturer -->
<vendor>%xml_cleanup[%manufacturer_value%]%</vendor>
<!-- @description -->
<description>%xml_cleanup[%description_value%]%</description>
<!-- @name -->
<name>%xml_cleanup[%name_value%]%</name>

<!-- @image -->
<picture>%variable[site_url]%%image_value%</picture>

<!-- @price_null -->
<!-- @price -->
<price>%xml_cleanup[%formula[round(%variable[eurorate]%*%price_value%)]%]%</price>

<!-- @row -->
<offer id="%item_id%" bid="13" available="true">
<url>%xml_cleanup[%variable[site_url]%catalog.html?itemid=%item_id%]%</url>
%price%
<currencyId>RUR</currencyId>
<categoryId type="Own">%single_cat_id[%item_id%]%</categoryId>
%image%
%name%
%manufacturer%
%series%
</offer>

ЧПУ для каталога товаров

Пример построения каталога товаров на ЧПУ c использованием htaccess. Пример того, как это можно реализовать:

Для категорий:

  • добавляем в категории поле uri
  • заполняем его для КАЖДОЙ категории
  • в шаблоне вывода категорий вместо %link% пишем /c%id%/%uri_value%/ т.е. ссылки на наши категории будут выглядеть как /c123/category_uri/ где 123 - айдишник категории, category_uri - uri конкретной категории
  • в .htaccess перед существующим RewriteRule дописываем такой:
RewriteRule   ^c(\d+)/([a-z0-9_-]+)/ index.php?sitepage=catalogpage&cid=$1 [QSA,L]

в последней строке catalogpage - это айди страницы каталога в структуре

Для товаров:

  • добавляем в общие св-ва товаров поле uri
  • заполняем его для КАЖДОГО товара
  • в шаблоне вывода товаров вместо %link% пишем /i%item_id%/%uri_value%/ т.е. ссылки на наши товары будут выглядеть как /i123/item_uri/ где 123 - айдишник товара, item_uri - uri конкретного товара
  • в .htaccess перед существующим RewriteRule дописываем такой:
RewriteRule   ^i(\d+)/([a-z0-9_-]+)/ index.php?sitepage=catalogpage&itemid=$1 [QSA,L]
constructor/catalog.txt · Последние изменения: 2016/03/14 12:23 — bubek