- Описание
- Установка
- Настройка веб сервера
- Данные и шаблоны
- Оптимизация JS и CSS файлов
- Вывод контента
- Корзина товаров
- Настройка онлайн оплаты
- Настройка оплаты через Robokassa
- Меню
- Формы
- Поиск
- Учет количества товара на складе
- Мульти-валютность
- Мульти-язычность
- Изменение размеров изображений
- Разработчикам
- Импорт-Экспорт
- Установка на локальный сервер XAMPP в Windows
- Настройка VDS и установка Nginx, PHP, MongoDB, Shopker
- JavaScript API
- Визуальный редактор шаблонов
- Бронирование
- Экспорт каталога в Яндекс.Маркет
- Bash скрипт для настройки VDS
- Bash скрипт для установки
- API
- Установка локально в ОС Windows
Данные и шаблоны
Для вывода списка товаров используется шаблон templates/category.html.twig
. Для страницы товаров используется шаблон templates/content-page.html.twig
. Можно создать отдельный шаблон для каждого типа контента. Для этого нужно использовать системное имя контента как префикс названия шаблона.
Примеры:
templates/text-content_category.html.twig
templates/text-content_content-page.html.twig
"text-content" - это системное имя типа контента. Если такой шаблон существует, он будет использован для страницы данного типа контента.
Страница со списком товаров
В шаблоне доступны следующие данные:
activeCategoriesIds
- Массив ID активных категорий (вверх по вложенности).currentCategory
- Объект текущей категории.currentPage
- Объект текущей категории (клон).currentId
- ID текущей страницы.currentUri
- URI текущей страницы.listTemplate
- Название текущего типа вывода контента (grid, list...).items
- Массив с данными товаров для текущей страницы.fields
- Массив с данными полей для текущего типа контента, у которых установлена опция "Показывать в списке".fieldsAll
- Все данные полей для текущего типа контента.filters
- Массив данных фильтров для текущей категории товаров.categoriesMenu
- Массив с данными вложенных категорий.categoriesSiblings
- Массив с данными соседних категорий.breadcrumbs
- Массив с данными хлебных крошек.queryOptions
- Данные запроса из текущей URL страницы.pagesOptions
- Данные для постраничной разбивки.
Страница товара
В шаблоне доступны следующие данные:
currentCategory
- Объект текущей категории.activeCategoriesIds
- Массив ID активных категорий (вверх по вложенности).currentPage
- Данные полей текущей страницы (товара).contentType
- Объект типа контента текущей страницы.currentId
- ID текущей страницы.currentUri
- URI текущей страницы.currency
- Название текущей валюты.categoriesMenu
- Массив с данными вложенных категорий.breadcrumbs
- Массив с данными хлебных крошек.fields
- Массив с данными полей для текущего типа контента, у которых установлена опция "Показывать в списке".priceFieldName
- Имя поля цены товаров текущего типа контента.
Данные полей товаров можно выводить несколькими способами.
Вывод сырых данных:
<span class="text-secondary">
{{ currentPage.price }}
</span>
renderOutputType
Рендеринг поля с использованием шаблона. Аргументы:
- Значение поля.
- Название типа вывода.
- Массив параметров типа вывода.
- Массив с данными товара.
- Массив с данными поля.
- Массив с дополнительными данными, к которым нужно получить доступ в шаблоне.
Пример использования:
{% for item in items %}
...
{{ renderOutputType(item.image, 'image', [], item) }}
...
{% endfor %}
renderOutputTypeField
Вывод данных с использованием шаблона типа вывода:
{{ renderOutputTypeField(currentPage, fields, 'price') }}
Аргументы:
- Массив со всеми данными страницы.
- Массив с данными полей типа контента.
- Системное имя поля.
renderOutputTypeChunk
Вывод данных поля по названию чанка:
{{ renderOutputTypeChunk(currentPage, fields, 'price') }}
Аргументы:
- Массив со всеми данными страницы.
- Массив с данными полей типа контента.
- Название чанка (шаблона) данного поля. Данное название указывается в свойствах типа вывода в окне типа контента.
- Префикс для шаблона.
- Массив с данными, которые нужно передать в шаблон.
- Максимальное число полей. По умолчанию - 0 (не ограничено).
renderOutputTypeArray
Вывод всех полей, в свойствах которых включен флажок "Показывать в списке".
{{ renderOutputTypeArray(currentPage, fields, 'prefix_') }}
Аргументы:
- Массив со всеми данными страницы.
- Массив с данными полей типа контента.
- Префикс имени шаблона.
- Массив с данными, которые нужно передать в шаблон.
renderOutputGallery
Рендеринг фотогалереи с использованием шаблона. Аргументы:
- Массив с данными страницы (товара).
- Массив с данными полей типа контента.
- Базовое имя поля с картинкой.
- Название чанка (шаблона) данного поля. Данное название указывается в свойствах типа вывода в окне типа контента.
Пример использования:
{{ renderOutputGallery(currentPage, fields, 'image') }}
getFieldNameByChunk
Вывод имени поля по названию чанка.
- Массив со всеми данными страницы.
- Массив с данными полей типа контента.
- Название чанка (шаблона) данного поля. Данное название указывается в свойствах типа вывода в окне типа контента.
- Префикс имени шаблона.
Пример:
{{ getFieldNameByChunk(currentPage, fields, 'header') }}
getField
Получить данные одного поля на названию поля или чанка. Аргументы:
- Массив с данными всех полей типа контента.
- Название поля.
- Название чанка поля.
Пример использования:
{% set fieldData = getField(fields, '', 'schedule') %}
...
getFieldOption
Для вывода свойств поля можно использовать функцию getFieldOption($fieldsData, $fieldName[, $optionName])
.
Пример:
{{ getFieldOption(fields, 'image', 'properties') | json_encode }}
Аргументы:
- Массив с данными полей типа контента.
- Название поля.
- Название свойства.
Шаблоны для типов вывода полей находятся в папке templates/chunks/fields/
. Для формирования названия шаблона используется поле "Название чанка". Если оно не заполнено, используется системное имя поля.
catalogPath
Вывод полного URL страницы. Пример:
{{ catalogPath(currentCategoryUri, systemName, itemData, 'categories') }}
Аргументы:
- URI категории страницы (товара).
- Системное имя страницы.
- Массив со значениями полей страницы.
- Название поля категорий. Не обязательное, но рекомендуется использовать, если на сайте используются множественные категории.
- Название поля со ссылкой. Можно использовать для внешних ссылок.
Для вывода контента доступны функции contentList()
и includeContent()
. О них читайте в разделе Вывод контента.
imageUrl или fileUrl
Вывод полной URL картинки. Пример:
{{ imageUrl(category.image, '/img/nofoto.png') }}
Аргументы:
- Массив с данными файла картинки.
- URL по умолчанию.
Пример с фильтром изменения размера картинки:
{{ imageUrl(category.image, '/img/nofoto.png') | imagine_filter('thumb_medium_relative') }}
pathLocalized
Вывод ссылки по имени роута контроллера для текущей локали.
Аргументы:
- Имя роута.
- Массив параметров URL.
Пример использования:
{{ pathLocalized('profile_contacts') }}
pageUrl
Вывод ссылки на страницу в постраничной навигации. Аргументы:
- Массив с параметрами постраничной навигации.
- Номер страницы (будет преобразовано в
&page=...
). - Число элементов на странице (будет преобразовано в
&limit=...
). - Название поля для сортировки (будет преобразовано в
&order_by=...
).
Пример использования:
...
{% for i in 1..pagesOptions.total %}
<li class="page-item{% if i == pagesOptions.current %} active{% endif %}">
<a class="page-link" href="{{ pageUrl(pagesOptions, i) }}{{ queryOptions.filterStr }}">
{{ i }}
</a>
</li>
{% endfor %}
...
settingsList
Вывод списка настроек по названию группы.
Аргументы:
- Название группы настроек (поле "groupName" в БД).
- Название шаблона в папке "catalog" (без
.html.twig
). - Включить кэш HTML.
- Включить кэш данных.
- Массив данных, которые нужно передать в шаблон.
Пример использования (вывод списка языков):
{{ settingsList('SETTINGS_LANGUAGES', 'languages_list', false, true) }}
fieldByLocale
Вывод значения поля для текущей локали.
Аргументы:
- Массив с данными страницы или объект категории.
- Имя поля.
Пример использования (название текущей категории):
<h1>{{ fieldByLocale(currentPage, 'title') }}</h1>
outputFilters
Вывод фильтров для категории товаров. Аргументы:
- Массив с данными фильтров.
- Префикс для названия шаблона.
- Ключ кеша (строка с именем ключа).
Пример использования:
{{ outputFilters( filters, '', 'filters' ~ currentPage.id ) }}
outputFilter
Вывод одного блока фильтров. Аргументы:
- Массив с данными фильтра.
- Префикс для названия шаблона.
Пример использования:
{% for filterData in filters %}
{{ outputFilter(filterData) }}
{% endfor %}
categoriesTree
Вывод дерева категорий (меню). Аргументы:
- ID родительской категории.
- Название шаблона для вывода (берется из папки
templates/nav/
). - Данные меню. Если
null
(по умолчанию), то данные будут получены из базы данных. - Массив активных страниц и категорий (вверх по вложенности).
- Включить кэширование HTML кода. По умолчанию выключено.
- Имя класса активного элемента меню (см. подробнее ниже). По умолчанию -
active
.
В шаблоне доступны все поля категории в массиве children
, а также:
currentUri
- текущий URI страницы.uriArr
- массив URI до текущей страницы.
Пример использования:
{{ categoriesTree(0, 'menu_dropdown', null, activeCategoriesIds, true) }}
arraySearch
Получить индекс значения в массиве. Аналог PHP-функции "array_search". Аргументы:
- Что искать (строка).
- Где искать (массив строк).
Пример использования смотреть ниже.
switch
Вывод значения из массива в зависимости от значения в другом массиве. Аргументы:
- Значение, которое нужно найти в первом массиве.
- Первый массив значений.
- Второй массив значений. Значение по индексу будет выведено в случае, если будет найдено совпадение в первом массиве.
Пример использования:
{% for tagValue in data %}
<div>
<span class="badge {{ switch(arraySearch(tagValue, fieldProperties.inputProperties.values_list|split('||')), [0, 1, 2], ['badge-success', 'badge-warning', 'badge-info']) }}">
{{ tagValue }}
</span>
</div>
{% endfor %}
isPaidProduct
Проверка куплен или нет товар.
Аргументы:
- Имя типа контента.
- ID товара.
Пример использования:
{% if isPaidProduct(currentCategory.contentTypeName, currentPage.id) %}
<p>Куплено.</p>
{% else %}
<p>Не куплено.</p>
{% endif %}