Установка
Вся настройка осуществляется в 4 простых шага.
Шаг 1. Настройка поддоменов на хостинге (только для режима "Поддомен")
Чтоб настроить поддомены на хостинге вам необходимо будет указать алиасы.
Если у вас хостинг, то можете попросить хостера сделать чтобы все домены вида *.mysite.ru вели на корень сайта.
Обычно для этого надо сделать что-то вроде такого:
- Прописать днс-запись * IN A IP сервера
- В настройках apache прописать:
ServerName your_site.ru
ServerAlias *.your_site.ru
Мы можем вам в этом помочь
Шаг 2. Указать все поддерживаемые поддомены + основной доменВам нужно в админке по пути: Настройки->Настройки продукта->Сайты->Список сайтов->выбираете нужный сайт (обычно s1) и прописываете в поле "Доменной имя", список доменных имен, каждый домен на новой строке.
Данный пункт можно опустить, но мы рекомендуем вам прописать.Шаг 3. Настроить модуль "Поддомены и мультиязычность"
Вкладка "Настройки"- Активность - флаг активности модуля
- Алгоритм - указать алгоритм определения поддоменов
Поддомен - модуль определяет такой тип subdomain.domain.ru, где subdomain является поддоменом.
Подпапка - модуль определяет такой тип domain.ru/subdomain/, где subdomain является поддоменом.
- Тип - указать какой тип поддоменов.
Страны - режим стран
Города - режим городов
Языки - режим языков
Виртуальный - режим без редиректов и прочего физического
- Включить замену ссылок - автоматическая замена ссылок, работает только при "Подпапка"
- Ключ обнаружения IP - ключ в массиве $_SERVER в котором указан ip пользователя
- Домен по умолчанию - указать домен который является по умолчанию. Можно указать поддомен.
- Сопоставления - алгоритм сопоставления iso-кода страны/города к имени поддомена.
- Исключить пути - регулярные выражения путей, на которых модуль не запускается
По умолчанию исключаются след пути:
/bitrix/*/local/*
- Упраление муршрутизацией - при активном режиме "Подпапка" - добавляет маршруты, при другом режиме убирает лишние маршруты.
Вкладка "Мультиязычность"- Включить мультиязычность - при установленной галке мультиязычность работает
- Язык по умолчанию - код языка по умолчанию, в нижнем регистре
- Выводить HREFLANG - выводит указатели на другие версии языков страницы (полезно для SEO)
Вкладка "Домены"Описание указано ниже (п. Настроить "Поддомены")
Вкладка "SEO"- Включить SEO - при установке включается SEO у всех доменов и поддоменов. На сайте, для админов, выводится кнопка настройки SEO.
Шаг 4. Настроить "Поддомены"
Путь:
Настройки->Настройки продукта->Настройки модулей->Поддомены и мультиязычность->Вкладка Домены->нажать на ссылкуПройдясь по вышеуказанному пути мы попадаем в хайлоадблок битрикса "Dev2funMultiDomain"
В нем создаем записи.
Свойства:
- SITE_ID - идентификатор сайта (для мультисайтовости)
- Активность - указывает на активность домена
- Название - внутреннее название домена (любое, не влияет на систему)
- Подддомен - указываем название поддомена, например нам нужен вот такой вид my.domain.ru, то в этом поле указываем my
- Главный домен - указываем название главного домена, в нашем случае domain.ru
- HTML-код счетчиков - сюда копируем все нужные счетчики учета (например Yandex.Metrika или Google Analytics)
- HTML-код мета-тегов - сюда копируем мета-теги для разных верификаций и любые другие, которые нужно вывести для этого поддомена
- Язык - тут указываем язык поддомена. Работает только при включении Мультиязычности. НО если указать redirect, то система будет проверять пользователя и перенаправлять его на нужный поддомен.
Локализация (языки)В модуле с версии 0.2.0 есть поддержка локализации полей.
- добавить поддержку полей в настройках модуля (см. скриншот)
- заполнить данные в полях на страницах редактирования элементов и разделов
- сделать интеграцию модуля в шаблоны компонентов (ниже подробнее)
- сделать локализацию подписей и надписей в шаблоне
Интеграция локализации полей в компоненты:
Локализация у списков элементов/разделов:
Вам необходимо прописать в result_modifier.php шаблона используемого компонента следующее:
// подгружаем все модуль и все его классы
\Bitrix\Main\Loader::includeModule('dev2fun.multidomain');
$arItems = \Dev2fun\MultiDomain\LangData::getLangItemsFields($arItems, 'element');
// где $arItems - массив элементов или разделов
// где element - тип, т.к. element - для элементов, section - для разделов |
Локализация у элементов:Вам необходимо прописать в result_modifier.php шаблона используемого компонента следующее:
// подгружаем все модуль и все его классы
\Bitrix\Main\Loader::includeModule('dev2fun.multidomain');
$arResult = \Dev2fun\MultiDomain\LangData::getDataFields($arResult,'element');
// где arResult - массив полей элемента
// где element - тип, т.к. мы выводим для элемента, поэтому element |
Локализация у разделов:Вам необходимо прописать в result_modifier.php шаблона используемого компонента следующее:
// подгружаем все модуль и все его классы
\Bitrix\Main\Loader::includeModule('dev2fun.multidomain');
$arResult = \Dev2fun\MultiDomain\LangData::getDataFields($arResult,'section');
// где arResult - массив полей раздела
// где section- тип, т.к. мы выводим для раздела, поэтому section |
Локализация подписей и надписей в шаблонеВначале файла необходимо загрузить файл переводов (например файл header.php)
\Dev2fun\MultiDomain\LangData::loadMessages(__FILE__); |
Далее в нужных местах сделать подключение переводов
<span><?=\Dev2fun\MultiDomain\LangData::getMessage('HI');?></span> |
Если LangData::loadMessages был вызван в файле header.php, то переводы будут по пути: /путь_до_шаблона/lang/код_языка/header.php.
Состав файла для `ru`:<?php
$MESS['HI'] = 'Привет';
//$MESS['OTHER'] = 'Другое';
// другие переводы |
Состав файла для `en`:<?php
$MESS['HI'] = 'Hi';
//$MESS['OTHER'] = 'Other';
// другие переводы |
Настройка seo-шаблонов- Заходите в настройки нужного инфоблока
- Переходите во вкладку SEO
- Указываете шаблоны в нужных местах
Список поддерживаемых шаблонов:* `{=multiTitle}` - для Meta Title (разделы/элементы)
- {=multiDescription} - для Meta Description (разделы/элементы)
- {=multiKeywords} - для Meta Keywords (разделы/элементы)
- {=multiHeading} - для заголовка раздела/элемента
- {=multiLangField} - для языкового (перевода) заголовка раздела/элемента
Структура щаблона на примере Meta Title:
{=multiTitle "FieldName", "BeforeText", "AfterText", "AdditionData"} |
Где:
- FieldName - это название поле откуда выводить текст (По умолчанию UF_NAME),
- BeforeText - это текст до,
- AfterText - это текст после,
- AdditionData - любая дополнительная информация перечисленная через запятую (отсутствует у {=multiLangField})
По итогу вы увидите json, который заменяется на нужные данные.
Не забудьте поставить галку на "Очистить кеш вычисленных значений"Интеграция в компоненты
В режиме "подпапка" рекомендуется для комплексных компонентов или компонентов с ЧПУ указать `SEF_FOLDER`.
Пример на компоненте
bitrix:catalog<?php
$sefFolder = \Dev2fun\MultiDomain\Base::getSefFolder();
?>
<?php $APPLICATION->IncludeComponent(
"bitrix:catalog",
"bootstrap_v4",
array(
"IBLOCK_TYPE" => "catalog",
"IBLOCK_ID" => "2",
"TEMPLATE_THEME" => "site",
"HIDE_NOT_AVAILABLE" => "N",
"BASKET_URL" => "{$sefFolder}/personal/cart/",
"SEF_MODE" => "Y",
"SEF_FOLDER" => "{$sefFolder}/catalog/",
"AJAX_MODE" => "N",
"AJAX_OPTION_JUMP" => "N",
"AJAX_OPTION_STYLE" => "Y",
"AJAX_OPTION_HISTORY" => "N",
"CACHE_TYPE" => "A",
"CACHE_TIME" => "36000000",
"CACHE_FILTER" => "Y",
"CACHE_GROUPS" => "Y",
"SET_TITLE" => "Y",
"STORE_PATH" => "{$sefFolder}/store/#store_id#",
"SEF_URL_TEMPLATES" => array(
"sections" => "",
"section" => "#SECTION_CODE#/",
"element" => "#SECTION_CODE#/#ELEMENT_CODE#/",
"compare" => "compare/",
"smart_filter" => "#SECTION_CODE#/filter/#SMART_FILTER_PATH#/apply/",
)
// .... другие свойства
),
false
);?> |
Для программистов:Получить информацию о текущем домене:Dev2fun\MultiDomain\Base::GetCurrentDomain() |
Получить язык текущего домена:
Dev2fun\MultiDomain\Base::GetCurrentDomain()['UF_LANG']
|
Получить имя поддомена:Dev2fun\MultiDomain\Base::GetCurrentDomain()['UF_SUBDOMAIN'] |
Получить все sef-folder:Dev2fun\MultiDomain\Base::getSefFolder() |
Получить все поддомены:Dev2fun\MultiDomain\SubDomain::getInstance()->getDomainList() |
Получить поддомен по фильтру:
Фильтр передается как callback (для array_filter).\
Dev2fun\MultiDomain\SubDomain::getInstance()->getDomainByFilter($callbackFilter) |
Краткие правила установки:
- Проверить права у папки modules
- Установить модуль в административной панели.
- Прочитать сообщение
- Настроить поддомены
- Настроить модуль
- Сбросить кэш
- Поблагодарить автора
- Использовать
Поблагодарить автора