Skip to content
plAffiliates
plAffiliates
филиалы, остатки в филиалах, региональность, мультиязычность, геолокация, seo
  1. Компоненты
  2. plAffiliates

plAffiliates

Основные возможности компонента plAffiliates

  • Создание филиалов и полей для них
  • Управление порядков вывода как филиалов, так и их полей
  • Мультиязычность на основании пакета Polylang
  • Подвязывание геолокации к филиалам
  • Вывод на картах Google и Yandex маркеров расположения филиалов и информации о них
  • Поиск ближайшего филиала на карте по геолокации посетителя сайта
  • Мульти-региональность (на основании страны/города) через поддомены
  • Автоматический редирект посетителя на основании его геолокации на нужный поддомен филиала
  • Учёт количества оставшихся товаров в каждом филиале
  • Вывод товаров (на основании остатков) только определенного филиала
  • Создание для каждого филиала SEO полей, подвязанных к шаблонам MODX
  • Создание для каждого филиала своего robots.txt файла
  • Создание для каждого филиала своего sitemap.xml файла, который содержит только товары филиала (на основании остатков)

Видео-обзор

plAffiliates - Видео-обзор

Создание групп для полей филиалов

На странице "Пакеты" -> Филиалы" во вкладке "Менеджер полей филиалов" вы можете создать свои группы для полей, что в дальнейшем позволит вам в различных сниппетах, как получать нужные поля передав название группы, так и использовать отдельные чанки для каждой группы полей.

Из "коробки" будет доступен список основных групп для полей.

plAffiliates - Создание групп для полей филиалов

Создание полей для филиалов

На странице "Пакеты" -> Филиалы" во вкладке "Менеджер полей филиалов" вы можете создать необходимые вам для филиалов поля, задав для каждого из них ряд параметров, отвечающих как за тип ввода, так и за оформление.

Примечание

Параметр "Мультиязычное" позволяет создать поле, которое будет иметь возможность ввода значения на разных языках при условии, что установлен пакет Polylang.

Из "коробки" будет доступен список основных полей. При необходимости вы можете ненужные поля удалить либо отключить.

Через перетаскивание поля в списке полей вы можете менять порядок его вывода.

plAffiliates - Создание полей для филиалов

plAffiliates - Создание полей для филиалов - 2

plAffiliates - Создание полей для филиалов - 3

plAffiliates - Создание полей для филиалов - 4

Создание филиалов

На странице "Пакеты" -> Филиалы" во вкладке "Филиалы" вы можете создавать и управлять данными филиалов.

При создании нового филиала будет доступно только одно обязательное поле "Метка", которое является внутренним названием филиала и нигде кроме админки не будет фигурировать, а также ряд полей в разделе "Дополнительно". Все поля, которые были выми созданы, будут уже доступны на этапе редактирования филиала.

Значение полей филиалов проходят обработку парсером Fenom, поэтому в них можно использовать плейсхолдеры и теги MODX. Например, в поле "Ссылка" вы можете указать ссылку на страницу с информацией о филиале в следующем виде.

modx
[[~ID-страницы]]

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

plAffiliates - Редактировать филиал

plAffiliates - Редактировать филиал - 2

Управление количеством оставшегося товара в филиалах

Через админ-панель

Добавлять информацию по количеству оставшегося товара по филиалам можно, как на отдельной странице "Пакеты" -> Филиалы" -> "Остатки товаров в филиалах", так и непосредственно в карточки товара во вкладке "Остатки товара в филиалах"

plAffiliates - Создать товарplAffiliates - Создать товар - 2

Через скрипт

Для программного добавления/обновления информации по количеству оставшегося товара у филиала имеется ряд функций.

php
/** @var PlAffiliate $plaffiliate */
$plaffiliate = $modx->getService('plaffiliates', 'PlAffiliate');
/** @var PlAffiliateTools $tools */
$tools = $plaffiliate->getTools();
$count = 24;
$productId = 12;
$guid = 'e7555e6f-37a8-11ec-ca96-0242ac120005'
// Получение ID филиала для некого внешнего ID, например ID в УТ\CRM. Устанавливается для филиала через поле "Внешний ID"
$affiliateId =  $tools->getAffiliateIdByGuid($guid);
// Добавления/обновления информации по количеству оставшегося товара у филиала
$tools->setAffiliateProductRemain($affiliateId, $productId, $count);
// Количество оставшегося товара у филиала
$remain = $tools->getAffiliateProductRemain($affiliateId, $productId);
// Общее количество оставшегося товара по всем филиалам
$remain = $tools->getAllAffiliateProductRemain($productId);
// Сброс (обнуление значения) у всех филиалов количества оставшегося товара
$tools->resetAllAffiliateProductRemain($productId);

plAffiliates - Редактировать филиал

Примечание

Если вы не планируете вообще работу с остатками и хотите, что бы в карточки товара не выводилась вкладка "Остатки товара в филиалах", то в системных настройках компонента отключите опцию "Показать вкладку остатки у товара".

Учет количества оставшегося товара в филиале при покупке

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

Проверка нужного количества товара будет происходить в текущем филиале. Что бы она происходила с учетом общего количества во всех филиалах, необходимо включить в системных настройках компонента опцию "Учитывать общее количество остатков во всем филиалах", но в таком случае не будет доступен функционал синхронизации остатков при покупке/возврате товара.

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

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

  • Статусы списания остатков (plaffiliates_status_pickup_remains)
  • Статусы возврата остатков (plaffiliates_status_return_remains)

plAffiliates - Системные настройки

Создание SEO-полей для филиалов

В меню компонента, кликнув на пункте "SEO" на открывшейся странице на вкладке "SEO-Поля", вы можете создать нужные вам поля.

plAffiliates - Создание SEO-полей для филиалов

После чего на вкладке "SEO-Шаблоны полей" задать значения для поля, связав его с филиалом и шаблоном MODX. Значение поля обрабатывается шаблонизатором Fenom.

plAffiliates - Создание SEO-полей для филиалов - 2

Для того, что бы созданные SEO-полей были доступны через плейсхолдеры Modx, необходимо:

  • В системных настройках компонента включить опцию "Включить плейсхолдеры SEO-полей" plAffiliates - Включить плейсхолдеры SEO-полей
  • При необходимости изменить префикс полей в системной опции компонента "Префикс для плейсхолдеров SEO-полей" по умолчанию используется pas

Пример использования плейсхолдеров SEO-полей

modx
h1: [[!+pas.h1]]
title: [[!+pas.title]]
fenom
h1: {$_modx->getPlaceholder('pas.h1')}
title: {$_modx->getPlaceholder('pas.title')

Создание robots.txt для филиалов

  1. В меню компонента, кликнув на пункте "SEO" на открывшейся странице на вкладке "robots.txt", можно создать содержания файла robots.txt для нужного филиала.

    plAffiliates - Создание robots.txt для филиалов

  2. Создать документ с названием robots, у которого "Тип содержимого" должен быть указан как "text", "Шаблон" выбран "(пустой шаблон)" и в поле "Содержимое" указать вызов сниппета getPlAffiliateRobots

    plAffiliates - Создание robots.txt для филиалов - 2

    plAffiliates - Создание robots.txt для филиалов - 3

    Если для филиала не будет создано значение robots.txt, то сниппет getPlAffiliateRobots вернет значение по умолчанию, которое указано в чанке "tpl.plAffiliates.robots.default"

Примечание

В списке филиалов будут доступны только родительские филиалы, для которых заполнено поле "Хост".

Важно!

В корне сайта не должно быть файла robots.txt

Создание sitemap.xml для филиалов

Необходимо создать документ с названием sitemap, у которого "Тип содержимого" должен быть указан как "XML", "Шаблон" выбран "(пустой шаблон)" и в поле "Содержимое" указать вызов сниппета getPlAffiliateSitemap

plAffiliates - Создание sitemap.xml для филиалов

Важно!

В корне сайта не должно быть файла sitemap.txt

Основные настройки

Настройка сервиса геолокации

В системных настройках компонента в разделе "Карта" в опции "Класс Карты" укажите класс провайдера для карты.

Доступные следующие значения:

  • PlAffiliateYaMapProvider - Yandex карты (по умолчанию)
  • PlAffiliateGMapProvider - Google карты

Примечание

Для работы с Google картами необходимо обязательно получить API-ключ и указать его в опции "API Ключ Google Maps"

plAffiliates - API Ключ Google Maps

Настройка геолокации у филиалов

После того, как вы настроили выбранный сервис карт, можно перейти к настройке геолокации у филиалов.

Укажите данные широты и долготы расположения офиса филиала, что позволит вам в дальнейшем через сниппет getPlAffiliateMap выводить его на карте и делать поиск ближайшего.

Указать широту и долготу можно как вручную, так и с помощью перетаскивания маркера на карте. Что бы открыть карту, нужно кликнуть по кнопке "Определить на карте".

Для того, что бы маркер быстро переместить в нужное место, зажмите на клавиатуре клавишу SHIFT и не отпуская ее сделайте клик левой кнопкой мышки в нужном месте карты, если при этом еще одновременно зажать Alt, то дополнительно произойдёт центрирование карты.

plAffiliates - Редактировать филиал

plAffiliates - Определить координаты

Настройка сервиса определения местоположения пользователя по IP

Для подключения сервиса необходимо в системных настройках компонента в разделе "Геолокация" заполнить опцию API ключ/конфиг выбранного сервиса, который вы получили после регистрации, а также его класс обработчик.

Из коробки доступные следующие условно-бесплатные сервисы:

dadata.ru

  • API конфиг сервиса DaData.ru
  • PlAffiliateDaDataGeoLocation

ipinfo.io

  • API ключ сервиса ipinfo.io
  • PlAffiliateIpInfoGeoLocation

iploka.com

  • API ключ сервиса iploka.com
  • PlAffiliateIpLokaGeoLocation

plAffiliates - Системные настройки

Настройка автоматического перенаправления посетителей на поддомены филиалов

Если вы планируете использовать автоматическое перенаправление посетителей на основании их геоданных на поддомены филиалов, то для каждого "родительского" филиала необходимо заполнить:

  • В поле "Хост" название поддомена, на который следует делать переадресацию
  • Через выбранный сервис геолокации получить данные для полей "Страна" и "Город"

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

IP нужного города можно получить, например, на сайте ip.osnova.news

Важно!

Если через какое-то время вы решите изменить сервис определения геоданных, то после перехода на него необходимо заново произвести настройку поля "Город", так как каждый сервис может по-разному его именовать.

plAffiliates - Редактирование филиала

plAffiliates - Геолокация

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

plAffiliates - session_cookie_domain

Примечание

Перенаправление будет происходить через 302-редирект только один раз на сессию сайта.

Добавление информации о текущем выбранном филиале в плейсхолдеры MODX

Для того, что информация о текущем выбранном филиале была доступна через плейсхолдеры MODX, необходимо:

  • В системных настройках компонента включить опцию "Включить плейсхолдеры филиала" plAffiliates - Включить плейсхолдеры филиала
  • При необходимости изменить префикс полей в системной опции компонента "Префикс для плейсхолдеров филиала" по умолчанию используется pa
  • Для полей филиала, которые должны быть доступны через плейсхолдеры MODX, необходимо в менеджере полей филиалов включить опцию "Доступно в плейсхолдере" plAffiliates - Доступно в плейсхолдере

Пример использования плейсхолдеров филиала

modx
id: [[!+pa.id]]
Name: [[!+pa.name]]
Phone: [[!+pa.phone]]
E-mail: [[!+pa.email]]
fenom
id: {$_modx->getPlaceholder('pa.id')}
Name: {$_modx->getPlaceholder('pa.name')
Phone: {$_modx->getPlaceholder('pa.phone')
E-mail: {$_modx->getPlaceholder('pa.email')

Сниппеты

getPlAffiliates - Вывод списка филиалов

Параметры:

ИмяОписание
affiliatesСписок ID филиалов, через запятую. По умолчанию выводятся все опубликованные филиалы.
cityНазвание города филиалы, которого следует вернуть.
onlyParentВернуть только родительские филиалы.
parentsСписок ID родительских филиалов через запятую, потомков которых следует вернуть.
includeParentВключить вывод родительских отделений. Полезно при указании более одного «parents».
publishedТолько опубликованные. По умолчанию: 1
onlyFieldsНазвание полей филиала, через запятую, которые нужно выводить.
ignoreFieldsНазвание полей филиала, через запятую, которые не нужно выводить.
fieldGroupsНазвание группы полей, через запятую, поля которых нужно выводить.
sortbyСортировка выборки. По умолчанию: rank.
sortdirНаправление сортировки. По умолчанию: ASC.
limitОграничение количества результатов выборки. По умолчанию: 0
offsetПропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit. По умолчанию: 0
tplИмя чанка для оформления результата. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: tpl.plAffiliates
tplGroupsИмя чанков, через запятую, для группы полей. Формата: название группы:название чанка
tplWrapperЧанк-обёртка, для заворачивания всех результатов. Принимает один плейсхолдер: [[+output]].

Пример вызова сниппета с параметром tplGroups.

modx
[[getPlAffiliates?
  &tplGroups=`address:affiliates.group.address,contacts:affiliates.group.contacts`
]]
fenom
{$_modx->runSnippet('getPlAffiliates', [
  'tplGroups' => 'address:affiliates.group.address,contacts:affiliates.group.contacts',
])}

Примечание

Группа полей обработанная в чанке группы будет доступна в основном чанке (tpl) под названием группы и иметь порядковый номер сортировки первого поля из группы.

getPlAffiliateField - Возвращает значения поля филиала

Параметры:

ИмяОписание
fieldНазвание поля. По умолчанию id
affiliateIdID филиала. По умолчанию текущий, определяемый на основании хоста.

getPlAffiliateMap - Вывод списка филиалов на карте

Параметры:

ИмяОписание
affiliatesСписок ID филиалов, через запятую. По умолчанию выводятся все опубликованные филиалы.
cityНазвание города филиала, которого следует вернуть.
onlyParentВернуть только родительские филиалы.
parentsСписок ID родительских филиалов, через запятую, потомков которых следует вернуть.
includeParentВключить вывод родительских отделений. Полезно при указании более одного «parents».
publishedТолько опубликованные. По умолчанию: 1
onlyFieldsНазвание полей филиала, через запятую, которые нужно выводить.
ignoreFieldsНазвание полей филиала, через запятую, которые не нужно выводить.
fieldGroupsНазвание группы полей, через запятую, поля которых нужно выводить.
limitОграничение количества результатов выборки. По умолчанию: 0
offsetПропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit. По умолчанию: 0
providerПровайдер карты. По умолчанию используется тот который задан в системной опции компонента "Класс Карты". Допустимые значения: PlAffiliateYaMapProvider; PlAffiliateGMapProvider.
zoomЗум карты
markerIconИконка маркера. По умолчанию: /assets/components/plaffiliates/images/map/marker.svg
markerSizeРазмер маркера. Пример: 67,81
markerAnchorAnchor маркера. Пример: 30,81
mapCenterКоординаты центра карты в формате JSON строки вида: {"lat": 55.76,"lon": 37.64}. По умолчанию если на карте всего 1 маркер, то центр карты будет установлен относительно его координат, если несколько, то таким образом, что бы они все смогли отобразиться.
tplИмя чанка для оформления результата. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: tpl.plAffiliates.map
tplGroupsИмя чанков, через запятую, для группы полей. Формата: название группы:название чанка
tplWrapperЧанк-обёртка, для заворачивания всех результатов. Принимает один плейсхолдер: [[+output]].
tplMarkerHintЧанк оформления хинта маркера карты. По умолчанию: @INLINE {$fields.name.value}
tplMarkerInfoЧанк оформления информационного окна маркера карты. По умолчанию: tpl.plAffiliates.marker.info
cssClassCSS Класс для контейнера карты
cssСсылка на подключаемый css. По умолчанию: {assets_url}components/plaffiliates/css/web/map.css

Примечание

Если на карте больше одного отделения, то на ней появиться кнопка поиска ближайшего отделения на основании геоданных посетителя.

Параметры:

ИмяОписание
affiliatesСписок ID филиалов, через запятую. По умолчанию выводятся все опубликованные филиалы.
cityНазвание города филиала, которого следует вернуть.
onlyParentВернуть только родительские филиалы.
parentsСписок ID родительских филиалов, через запятую, потомков которых следует вернуть.
includeParentВключить вывод родительских отделений. Полезно при указании более одного «parents».
publishedТолько опубликованные. По умолчанию: 1
onlyFieldsНазвание полей филиала, через запятую, которые нужно выводить.
ignoreFieldsНазвание полей филиала, через запятую, которые не нужно выводить.
fieldGroupsНазвание группы полей, через запятую, поля которых нужно выводить.
sortbyСортировка выборки. По умолчанию: rank.
sortdirНаправление сортировки. По умолчанию: ASC.
limitОграничение количества результатов выборки. По умолчанию: 0
offsetПропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit. По умолчанию: 0
tplИмя чанка для оформления результата. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: tpl.plAffiliates.links
tplGroupsИмя чанков, через запятую, для группы полей. Формата: название группы:название чанка
tplWrapperЧанк-обёртка, для заворачивания всех результатов. Принимает один плейсхолдер: [[+output]].
jsСсылка на подключаемый js. По умолчанию: {assets_url}components/plaffiliates/js/web/switch.js

getPlAffiliateRemains - Вывод списка филиалов с количеством оставшегося товара в каждом

Параметры:

ИмяОписание
pidID товара остатки которого следует отобразить. По умолчанию ID ресурса, в котором вызван сниппет.
showZeroRemainПоказывать филиалы с нулевым остатком. По умолчанию 1.
affiliatesСписок ID филиалов, через запятую. По умолчанию выводятся все опубликованные филиалы.
cityНазвание города филиала, которого следует вернуть.
onlyParentВернуть только родительские филиалы.
parentsСписок ID родительских филиалов, через запятую, потомков которых следует вернуть.
includeParentВключить вывод родительских отделений. Полезно при указании более одного «parents».
publishedТолько опубликованные. По умолчанию: 1
onlyFieldsНазвание полей филиала, через запятую, которые нужно выводить.
ignoreFieldsНазвание полей филиала, через запятую, которые не нужно выводить.
fieldGroupsНазвание группы полей, через запятую, поля которых нужно выводить.
sortbyСортировка выборки. По умолчанию: rank.
sortdirНаправление сортировки. По умолчанию: ASC.
limitОграничение количества результатов выборки. По умолчанию: 0
offsetПропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit. По умолчанию: 0
tplИмя чанка для оформления результата. Если не указан, то содержимое полей ресурса будет распечатано на экран. По умолчанию: tpl.plAffiliates.remains
tplGroupsИмя чанков, через запятую, для группы полей. Формата: название группы:название чанка
tplWrapperЧанк-обёртка, для заворачивания всех результатов. Принимает один плейсхолдер: [[+output]].

getPlAffiliateProducts - Вывод списка товаров с учетом его наличия в филиале

Сниппет является оберткой над сниппетом msProducts, поэтому содержит все его параметры плюс следующие свои.

Параметры:

ИмяОписание
affiliateIdID филиала. По умолчанию текущий, определяемый на основании хоста.
elementНазвание сниппета для вывода товаров. По умолчанию msProducts.

Примечание

В чанке tpl доступно поле "affiliate_remain", в котором содержится значение остатка для товара.

getPlAffiliateSitemap - Генерация карты сайта для поисковых систем для текущего филиала

Среди списка товаров будут только те, для которых есть остаток.

Сниппет является оберткой над сниппетом pdoSitemap, поэтому содержит все его параметры плюс следующие свои.

Параметры:

ИмяОписание
affiliateIdID филиала. По умолчанию текущий, определяемый на основании хоста.

getPlAffiliateRobots - Вывод содержания файла robots.txt для текущего филиала

Параметры:

ИмяОписание
affiliateIdID филиала. По умолчанию текущий, определяемый на основании хоста.
tplDefaultЧанк с значением по умолчанию. По умолчанию: tpl.plAffiliates.robots.default

Системные события

plaffiliateOnManagerCustomCssJs - Загрузка скриптов plAffiliates

Параметры:

ИмяОписание
controllerЭкземпляр класса контроллера
pageИдентификатор страницы. Доступные значения: affiliates; remains; seo

plaffiliateOnPrepareMapMarker - Подготовка данных для создания маркера филиала на карте

Параметры:

ИмяОписание
toolsЭкземпляр класса PlAffiliateTools
placeМассив с данными для маркера
affiliateМассив с данными филиала

Пример плагина меняющего иконку, текст хинта и информационного окна маркера у филиала с ID 5

php
<?php
/**
 * @var modX $modx
 * @var PlAffiliateTools $tools
 * @var array $place
 * @var array $affiliate
 */
switch ($modx->event->name) {
  case 'plaffiliateOnPrepareMapMarker':
    if ($affiliate['id'] == 5) {
      $params = & $modx->event->params;
      $params['place']['hint'] = 'New hint text';
      $params['place']['info'] = $tools->getPdoTools()->getChunk('@INLINE ({$id}) - {$fields.name.value}', $affiliate);
      $params['place']['marker'] = array(
        'icon' => '/assets/components/plaffiliates/images/map/marker_green.svg',
        //'size' => '67,81',
        //'anchor' => '30,81',
      );
    }
    break;
}