Установка
Решение устанавливается стандартно. После установки Вы будете перенаправлены в интерфейс настройки модуля.
Для корректной работы модуля на редакциях «Бизнес» и «Малый бизнес» необходимо, чтобы были загружены местоположения в базу модуля «Интернет-магазин»
http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=42&LESSON_ID=3074&LESSON_PATH=3912.4580.4828.3074#load
Подключение компонента улучшенного выбора местоположений
Вы можете вставить ссылку на выбор местоположения города в шапку сайта. Для этого в нужном месте шаблона добавьте вызов компонента:
<?$APPLICATION->IncludeComponent("twofingers:location","",Array());?>
|
Для вашего удобства, чтобы вам не приходилось вручную править шаблон компонента, мы предусмотрели поля для классов, которые будут присвоены ссылкам вызова всплывающего окна, если вы захотите их кастомизировать.
Если вы используете модифицированный компонент sale.order.ajax, для того, чтобы использовать улучшенный выбор местоположения при оформлении заказа, необходимо для компонента sale.ajax.locations прописать шаблон tf_location.
|
Вызов пользовательской javascript-функции
В настройках модуля можно вписать JS функцию, которая будет выполняться при выборе города пользователем. В её названии можно использовать плейсхолдеры:
#TF_LOCATION_CITY_ID# - ID выбранного города
#TF_LOCATION_CITY_NAME# - Имя выбранного города
Например: handleMePlease('#TF_LOCATION_CITY_ID#', '#TF_LOCATION_CITY_NAME#');
|
Обработка javascript-события onTFLocationSetLocation
Также после выбора местоположения генерируется javascript-событие «
onTFLocationSetLocation», в которое передаётся DOM-объект выбранного местоположения. Пример обработчика:
BX.addCustomEvent("onTFLocationSetLocation", function(location)
{
var $location = $(location);
console.log('location id: ' + $location.data('id'));
console.log('location name: ' + $location.data('name'));
console.log('location region id: ' + $location.data('region-id'));
console.log('location region name: ' + $location.data('region-name'));
console.log('location country id: ' + $location.data('country-id'));
console.log('location country name: ' + $location.data('country-name'));
});
|
Получение выбранного местоположения на сайте
Выбранное местоположение сохраняется в сессию или куки (в зависимости от настроек) и может быть получено с помощью класса-обертки TwoFingers\Location\Storage и использовано в других местах:
$frame = new \Bitrix\Main\Page\FrameBuffered("my_dynamic_area"); // для композитного режима
$frame->begin(); // для композитного режима
if (Bitrix\Main\Loader::includeModule('twofingers.location')
&& $location = \TwoFingers\Location\Storage::getLocation())
{
echo $location->getPrimary() . '<br>'; // ID местоположения
echo $location->getName() . '<br>'; // название местоположения
if ($location->hasParent())
{
echo $location->getParent()->getPrimary() . '<br>'; // ID региона
echo $location->getParent()->getName() . '<br>'; // название региона
if ($location->getParent()->hasParent())
{
echo $location->getParent()->getParent()->getPrimary() . '<br>'; // ID страны
echo $location->getParent()->getParent()->getName() . '<br>'; // название страны
}
}
}
$frame->end(); // для композитного режима
|
Получение
текущего местоположения:
if (Bitrix\Main\Loader::includeModule('twofingers.location'))
{
$location = \TwoFingers\Location\Entity\Location::buildCurrent();
if ($location)
echo $location->getPrimary();
}
|
Получение
местоположения по ip:
if (Bitrix\Main\Loader::includeModule('twofingers.location'))
{
$location = \TwoFingers\Location\Entity\Location::buildByIp('5.255.255.88'); //yandex.ru
if ($location)
echo $location->getName(); // Москва
}
|
Получение
местоположения по умолчанию:
$location = \TwoFingers\Location\Entity\Location::buildDefault();
|
Получение информации из инфоблока в зависимости от местоположения
При установке модуля будет создан инфоблок «Контент» в типе «Местоположения». В этом инфоблоке Вы можете создавать элементы и привязывать их к местоположениям. Обратите внимание, что с данным инфоблоком вы можете работать так же, как и со всеми остальными: заполнять все доступные поля, добавлять и удалять свойства (кроме системных LOCATION_ID и SITE_ID). Можно обращаться к нему как к обычному инфоблоку, а можно через специальную сущность:
$frame = new \Bitrix\Main\Page\FrameBuffered("my_dynamic_area"); // добавьте для композитного режима
$frame->begin(); // добавьте для композитного режима
if (Bitrix\Main\Loader::includeModule('twofingers.location')
&& $location = \TwoFingers\Location\Storage::getLocation())
{
$content = $location->getContent();
if ($content)
{
echo $content->getPhone() . '<br>'; // вывод значения свойства PHONE инфоблока "Местоположения" -> "Контент", магический метод
echo $content->getPropertyValue('PHONE') . '<br>'; // тоже самое без магии
echo $content->getPreviewText() . '<br>'; // вывод анонса, магический метод
echo $content->getFieldValue('PREVIEW_TEXT') . '<br>'; // анонс без магии
echo $content->getDomain(); // домен для перенаправления
var_dump($content->getData()); // все поля и свойства привязанного элемента
}
}
$frame->end(); // добавьте для композитного режима
|
- Контент, к которому привязано местоположение по умолчанию, также будет выводиться по умолчанию.
- Сначала выводит контент по умолчанию для текущего сайта, затем, если таковой не найден, контент, к которому привязано местоположение по-умолчанию для всех сайтов.
Настройка автоматического редиректа на домены/поддомены для выбранных местоположений
Редирект можно настроить для местоположений, добавленных в инфоблок «Контент» (тип «Местоположения»). Для этого элементу иноблока необходимо добавить домен в свойство «Домен».
Элемент инфоблока обязательно должен быть связан с местоположением через свойство «ИД местоположения» или название.
Предварительно желаемые домены необходимо добавить в инфоблок «Домены» (тип «Местоположения»).
Получение домена для перенаправления для местоположения.
if ($location = \TwoFingers\Location\Storage::getLocation())
echo $location->getDomain();
|
Редирект между доменами/поддоментам может быть заблокирован политикой CORS на сайте. Необходимо настроить эту политику самостоятельно!
Пример работы с переменными без использования инфоблока
Допустим, нам необходимо менять телефон в шапке сайта в зависимости от города. Привяжемся к названию города. Будем показывать один телефон для Москвы и другой телефон для всех остальных городов.
use TwoFingers\Location\Storage;
$frame = new \Bitrix\Main\Page\FrameBuffered("my_dynamic_area"); // добавьте для композитного режима
$frame->begin(); // добавьте для композитного режима
if (\CModule::IncludeModule('twofingers.location'))
{
if (Storage::getCityName() == 'Москва')
echo "+7 (495) 055-65-19";
else
echo "8 800 500 40 30";
}
$frame->end(); // добавьте для композитного режима
|
Замена плейсхолдеров
При включенной опции «Заменять плейсхолдеры» в настройке модуля, будут заменены:
- #location_name#, #city_name# — название текущего местоположения;
- #region_name# — название текущего региона, области, края, республики и т.п.;
- #country_name# — название текущей страны;
- #content_%код%# — значение поля или свойства с кодом %код% из привязанного элемента контента. Например, #content_preview_text# будет заменено на анонс, а #content_phone# — на значение свойства PHONE.
Замена производится как в мета-тегах, так и в любом другом месте страницы.