Модуль позволяет добавить в битрикс поддержку множество поддоменов на 1 лицензии битрикса, приложив при этом минимальные усилия.
- Что делает модуль:
- SEO-поддержка
- Кому пригодится:
- Плюсы модуля:
- Компоненты
- Как использовать
- Шаг 6. Настройка битрикса
- Для программистов
- Миграции на новые версии
- Техническая поддержка
- Поддержка выпуска обновлений (донаты)
- Добавляет возможность создания бесконечного числа поддоменов
- Добавляет SEO-поддержку для каждого поддомена
- Добавляет SEO-поддержку для каждой страницы
- Добавляет возможность указать счетчики и мета-теги для каждого поддомена
- Позволяет включить поддержку мультиязычности и автоматическое переключение языка
- Позволяет автоматически определять город пользователя
- Позволяет автоматически определять страну пользователя
- Позволяет создавать любые дополнительные поля с привязкой к домену
- Позволяет динамически подставлять любое значение в заголовок, title, description, keywords с привязкой к домену
Модуль позволяет задать SEO для каждой страницы с привязкой к домену.
Также вы сможете:
- задать SEO-текст для каждой страницы с привязкой к домену
- задать H1-текст для каждой страницы с привязкой к домену
- задать TITLE для каждой страницы с привязкой к домену
- задать Description для каждой страницы с привязкой к домену
- задать Keywords для каждой страницы с привязкой к домену
- создать любые дополнительные поля для каждой страницы с привязкой к домену
- указать общий паттерн формирования BROWSER TITLE
- локализовать поля под любой язык
- кто хочет продвигать свой сайт точечно в любом городе
- кто хочет продвигать свой сайт точечно в любой стране
- кому нужно переключать язык сайта в зависимости от страны
- кому нужна тонкая SEO-настройка
- кому нужна поддержка разных языков
- почти любой функционал можно включать/отключать
- возможность полного управления
- гибкая SEO-поддержка каждой страницы
- гибкая SEO-поддержка каждого домена
- очень легкая настройка
- множество режимов работы
- возможность исключать пути
- возможность задавать соответствия
- не использует сторонние сервисы
- возможность сделать локализацию полей
- поддержка городов, стран и языков
- поддержка ЧПУ
multidomain.city.list
- компонент для вывода списка поддоменовmultidomain.data
- компонент для вывода информации текущего поддоменаmultidomain.page
- компонент для вывода статических страниц для мультиязычности
Чтоб настроить поддомены на хостинге вам необходимо будет указать алиасы. Если у вас хостинг, то можете попросить хостера сделать чтобы все домены вида *.mysite.ru вели на корень сайта. Обычно для этого надо сделать что-то вроде такого:
- Прописать днс-запись
- IN A IP сервера
- В настройках apache прописать:
- ServerName your_site.ru
- ServerAlias *.your_site.ru
- Алгоритм - указать алгоритм определения поддоменов
- Поддомен - модуль определяет такой тип
subdomain.domain.ru
, где subdomain является поддоменом. - Подпапка - модуль определяет такой тип
domain.ru/subdomain/
, где subdomain является поддоменом.
- Поддомен - модуль определяет такой тип
- Тип - указать какой тип поддоменов.
- Страны - режим стран
- Города - режим городов
- Язык - режим языков
- Виртуальный - виртуальный режим, не производит редиректов и переустановку свойств битрикса. Все данные лежат в свойствах модуля и их можно получить.
- Включить замену ссылок - работает при алгоритме подпапка, заменяет все ссылки
- Ключ обнаружения IP - ключ в массиве $_SERVER в котором указан ip пользователя
- Домен по умолчанию - указать домен который является по умолчанию. Можно указать поддомен.
- Сопоставления - алгоритм сопоставления iso-кода страны/города к имени поддомена.
- Исключить пути - регулярные выражения путей, на которых модуль не запускается
- По умолчанию указаны след пути:
/bitrix/*
/local/*
- и все файлы которые заканчиваются на
.php
- По умолчанию указаны след пути:
- Управление маршрутизацией - при нажатии на кнопку "обновить urlrewrite", делает проверку и добавляет нужные правила маршрутизации
Описание указано ниже (п. Настроить "Поддомены")
- Включить мультиязычность - при установленной галке мультиязычность работает
- Язык по умолчанию - код языка по умолчанию, в нижнем регистре
- Выводить HREFLANG - выводит указатели в head на другие языки у каждой из страниц
- Поддержка переводов - указываются все поля для которых должны быть языковые версии
В модуле с версии 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
)
<?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 у всех доменов и поддоменов. На сайте, для админов, выводится кнопка настройки сео.
Активировать SEO-паттерн для title - активирует поле с SEO-паттерном ниже. В данный момент модуль поддерживает паттерны:(устаревшее, используйте паттерны)#TITLE# - текущий title страницы#CITY# - город
Вам нужно в админке по пути: Настройки->Настройки продукта->Сайты->Список сайтов->выбираете нужный сайт (обычно s1)
и прописываете в поле "Доменной имя", список доменных имен, каждый домен на новой строке.
Путь: Настройки->Настройки продукта->Настройки модулей->Поддомены и мультиязычность->Вкладка Домены->нажать на ссылку
Пройдясь по вышеуказанному пути мы попадаем в хайлоадблок битрикса "Dev2funMultiDomain"\
В нем создаем записи. Каждая запись соответствует поддерживаемому домену\
Свойства:
- Активность - указывает на активность домена
- Название - внутреннее название домена (любое, не влияет на систему)
- Подддомен - указываем название поддомена, например нам нужен вот такой вид my.domain.ru, то в этом поле указываем my
- Главный домен - указываем название главного домена, в нашем случае domain.ru
- HTML-код счетчиков - сюда копируем все нужные счетчики учета (например Yandex.Metrika или Google Analytics)
- HTML-код мета-тегов - сюда копируем мета-теги для разных верификаций и любые другие, которые нужно вывести для этого поддомена
- Язык - тут указываем язык поддомена. Работает только при включении Мультиязычности. А если указать redirect, то система будет проверять пользователя и перенаправлять его на нужный поддомен.
- Заходите в настройки нужного инфоблока
- Переходите во вкладку 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
.
<?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']
Dev2fun\MultiDomain\Base::getSefFolder()
Dev2fun\MultiDomain\SubDomain::getInstance()->getDomainList()
Фильтр передается как callback (для array_filter).
Dev2fun\MultiDomain\SubDomain::getInstance()->getDomainByFilter($callbackFilter)
название события | передаваемые переменные | описание |
---|---|---|
OnBeforeSeoSetCityName |
&$cityName - название города$currentDomain - массив полей текущего домена |
Событие запускается перед заменой seo-шаблона {=get_city} |
onBeforeFindDomain |
$domains - домен$domainFilters - объект фильтров |
Событие запускается перед получением домена |
onBeforeFindDomains |
$domains - массив доменов$domainFilters - объект фильтров |
Событие запускается перед получением списка доменов |
onAfterFindCurrentSubdomain |
Событие запускается после обнаружения текущего домена | |
onBeforeSetNotFound |
$isSetNotFound (bool) - флаг установки ошибки 404, при не определении текущего домена |
Событие запускается до установки ошибки 404 |
Note: Данный раздел обязателен для тех, кто обновляется через гитхаб. Если вы обновляетесь через систему обновления битрикса, то эти действия выполнять не нужно
Note2: Начиная с версии 1.1.8 данный раздел перенесен в changelog-файл
Поддержку решения осуществляет @darkfriend от команды dev2fun Вы можете найти меня по этому нику в telegram или написав на почту [email protected]
Yandex.Money | 410011413398643 |
Webmoney WMR (rub) | R218843696478 |
Webmoney WMU (uah) | U135571355496 |
Webmoney WMZ (usd) | Z418373807413 |
Webmoney WME (eur) | E331660539346 |
Webmoney WMX (btc) | X740165207511 |
Webmoney WML (ltc) | L718094223715 |
Webmoney WMH (bch) | H526457512792 |
PayPal | @darkfriend |
Payeer | P93175651 |
Bitcoin | 15Veahdvoqg3AFx3FvvKL4KEfZb6xZiM6n |
Litecoin | LRN5cssgwrGWMnQruumfV2V7wySoRu7A5t |
Ethereum | 0xe287Ac7150a087e582ab223532928a89c7A7E7B2 |
BitcoinCash | bitcoincash:qrl8p6jxgpkeupmvyukg6mnkeafs9fl5dszft9fw9w |