Модуль «Каталог товаров» предназначен для построения каталога товаров или услуг, с разделением по рубрикаторам, и работой с карточкой товара.
Каждый товар принадлежит определенной товарной группе. Товары каждой товарной группы имеют свой набор свойств (полей), определяемых данной группой. Также для товаров могут определяться, так называемые, общие свойства, т.е. свойства, которыми обладают все товары вне зависимости от принадлежности к той или иной товарной группе. Набор общих свойств товаров и свойств конкретных товарных групп задается администратором сайта. Таким образом, создавая необходимый набор полей (цвет, размеры, вес… ) для каждой товарной группы, можно описать любые объекты какой-либо предметной области.
Все товары при необходимости могут быть быть разделены на категории. Список категорий имеет древовидную структуру. Он формируется администратором сайта, исходя из конкретной задачи, путем добавления нужных страниц в дерево каталога.
Для категорий каталога, так же как и для товаров, может быть сформирован список полей - свойств категорий (описание категории, изображение для категории и т.д.). Значения этих свойств могут выводиться на сайте для описания данной категории.
Каталог является многородительским, так что один и тот же товар может входить в разные категории. Уровень вложенности категорий не ограничен, но для удобства пользователей сайта не рекомендуется создавать иерархические структуры, содержащие более двух - трех уровней. Это сильно усложняет навигацию по сайту.
Так же в каталоге реализован механизм фильтров, с помощью которого Вы сможете делать отборы товаров по произвольным параметрам.
Корзина товаров служит для построения интернет-магазина. Заказы отсылаются на почту
Концепция каталога предполагает, что любой товар каталога имеет общие свойства, которые присутствуют у всех товаров и собственные поля. К примеру, у нас будут в качестве товаров выступать телевизоры и холодильники. Общими свойствами для них будут: Цена, Наименование товара, Артикул. Т.е. те поля в карточке товара, которые присутсвуют у ВСЕХ товаров каталога.
Если наш каталог имеет разнотипные товары, то логично, что админки этих товаров и карточки товара для посетителя должны быть различны. Чтобы посетитель не приходил на карточку телевизора и не видел там пустое поле «Объем морозильной камеры», а на карточке холодильника «Диагональ экрана». Соответсвенно, каждый товар принадлежит одной товарной группе. Именно для товарной группы определяется - какие дополнительные поля нужно будет задавать для товара, как будет выглядеть список товаров и как будет выглядеть конкретная карточка товара.
После создания и настройки товарной группы необходимо сделать два действия:
Это то, что забывают сделать 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> </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%">« Назад</a> <!-- @page_previous_disabled --> <!-- @page_next --> <a href="%link%">Вперед »</a> <!-- @page_next_disabled --> <!-- @page_active --> <a href="%link%">%page%</a> <!-- @page_passive --> <b>%page%</b> <!-- @page_delimeter --> <!-- @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 --> -> <!-- @cat_way_active --> <b>%cat_name%</b> <!-- @cat_way_passive --> <a href="%cat_link%">%cat_name%</a>
Внутренние фильтры предназначены для того, чтобы производить отбор товаров по некоторым правилам. Если Вам необходимо, к примеру, показать товары с наименьшей ценой, новинки, все товары с определенным полем и т.п. - сделать это можно с помощью внутреннего фильтра.
Внутренние фильтры имеют следующие поля:
Название поля | Описание |
---|---|
Название | Название фильтра для администратора |
Строковый ID | ID фильтра для 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. Она должна обязательно содержать скрытое поле с ID внутреннего фильтра. Это боле должно называться «filterid» 2. Поля формы должны иметь параметр name по которым и осуществляется получение данных.
Например: У нас есть внешний фильтр, который отбирает товары по производителю. Строка фильтра выглядит вот так:
mygroup.manufacturer = 'param[manuf]' |
Где
mygroup | ID товарной группы |
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> %row%</p> <!-- @row --> <a href="%current_page_url%manuf=%manufacturer_value%&filterid=manufacturer_select">%manufacturer_value%</a> <!-- @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»
Пример шаблона строки:
%id%; %tovar_id%; %short_description%; %name%; %full_description%; %price%
Для выгрузки товаров в различные интернет-витрины используется метод «Экспорт»
<?xml version="1.0" encoding="utf-8"?> [#content#]
Переменная | Описание |
---|---|
%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. Пример того, как это можно реализовать:
RewriteRule ^c(\d+)/([a-z0-9_-]+)/ index.php?sitepage=catalogpage&cid=$1 [QSA,L]
в последней строке catalogpage - это айди страницы каталога в структуре
RewriteRule ^i(\d+)/([a-z0-9_-]+)/ index.php?sitepage=catalogpage&itemid=$1 [QSA,L]