Skip to content

Поддомены для 1с-битрикс и мультиязычность для 1с-битрикс. Страны и Города. Легкая настройка.

Notifications You must be signed in to change notification settings

darkfriend/dev2fun.multidomain

Repository files navigation

Поддомены и мультиязычность. Страны и Города.

Модуль позволяет добавить в битрикс поддержку множество поддоменов на 1 лицензии битрикса, приложив при этом минимальные усилия.

Модуль в Маркетплейс Битрикс

Содержание

Что делает модуль:

  • Добавляет возможность создания бесконечного числа поддоменов
  • Добавляет SEO-поддержку для каждого поддомена
  • Добавляет SEO-поддержку для каждой страницы
  • Добавляет возможность указать счетчики и мета-теги для каждого поддомена
  • Позволяет включить поддержку мультиязычности и автоматическое переключение языка
  • Позволяет автоматически определять город пользователя
  • Позволяет автоматически определять страну пользователя
  • Позволяет создавать любые дополнительные поля с привязкой к домену
  • Позволяет динамически подставлять любое значение в заголовок, title, description, keywords с привязкой к домену

SEO-поддержка

Модуль позволяет задать SEO для каждой страницы с привязкой к домену.

Также вы сможете:

  • задать SEO-текст для каждой страницы с привязкой к домену
  • задать H1-текст для каждой страницы с привязкой к домену
  • задать TITLE для каждой страницы с привязкой к домену
  • задать Description для каждой страницы с привязкой к домену
  • задать Keywords для каждой страницы с привязкой к домену
  • создать любые дополнительные поля для каждой страницы с привязкой к домену
  • указать общий паттерн формирования BROWSER TITLE
  • локализовать поля под любой язык

Кому пригодится:

  • кто хочет продвигать свой сайт точечно в любом городе
  • кто хочет продвигать свой сайт точечно в любой стране
  • кому нужно переключать язык сайта в зависимости от страны
  • кому нужна тонкая SEO-настройка
  • кому нужна поддержка разных языков

Плюсы модуля:

  • почти любой функционал можно включать/отключать
  • возможность полного управления
  • гибкая SEO-поддержка каждой страницы
  • гибкая SEO-поддержка каждого домена
  • очень легкая настройка
  • множество режимов работы
  • возможность исключать пути
  • возможность задавать соответствия
  • не использует сторонние сервисы
  • возможность сделать локализацию полей
  • поддержка городов, стран и языков
  • поддержка ЧПУ

Компоненты

  • multidomain.city.list - компонент для вывода списка поддоменов
  • multidomain.data - компонент для вывода информации текущего поддомена
  • multidomain.page - компонент для вывода статических страниц для мультиязычности

Как использовать

Шаг 1. Настройка поддоменов на хостинге (только для режима "Поддомен")

Чтоб настроить поддомены на хостинге вам необходимо будет указать алиасы. Если у вас хостинг, то можете попросить хостера сделать чтобы все домены вида *.mysite.ru вели на корень сайта. Обычно для этого надо сделать что-то вроде такого:

  • Прописать днс-запись
    • IN A IP сервера
  • В настройках apache прописать:
    • ServerName your_site.ru
    • ServerAlias *.your_site.ru

Шаг 2. Настроить модуль "Поддомены и мультиязычность"

Вкладка "Настройки"

  • Алгоритм - указать алгоритм определения поддоменов
    • Поддомен - модуль определяет такой тип subdomain.domain.ru, где subdomain является поддоменом.
    • Подпапка - модуль определяет такой тип domain.ru/subdomain/, где subdomain является поддоменом.
  • Тип - указать какой тип поддоменов.
    • Страны - режим стран
    • Города - режим городов
    • Язык - режим языков
    • Виртуальный - виртуальный режим, не производит редиректов и переустановку свойств битрикса. Все данные лежат в свойствах модуля и их можно получить.
  • Включить замену ссылок - работает при алгоритме подпапка, заменяет все ссылки
  • Ключ обнаружения IP - ключ в массиве $_SERVER в котором указан ip пользователя
  • Домен по умолчанию - указать домен который является по умолчанию. Можно указать поддомен.
  • Сопоставления - алгоритм сопоставления iso-кода страны/города к имени поддомена.
  • Исключить пути - регулярные выражения путей, на которых модуль не запускается
    • По умолчанию указаны след пути:
      • /bitrix/*
      • /local/*
      • и все файлы которые заканчиваются на .php
  • Управление маршрутизацией - при нажатии на кнопку "обновить urlrewrite", делает проверку и добавляет нужные правила маршрутизации

Вкладка "Домены"

Описание указано ниже (п. Настроить "Поддомены")

Вкладка "Мультиязычность"

  • Включить мультиязычность - при установленной галке мультиязычность работает
  • Язык по умолчанию - код языка по умолчанию, в нижнем регистре
  • Выводить HREFLANG - выводит указатели в head на другие языки у каждой из страниц
  • Поддержка переводов - указываются все поля для которых должны быть языковые версии
Локализация (языки)

В модуле с версии 0.2.0 есть поддержка локализации полей.

Шаги:
  1. добавить поддержку полей в настройках модуля
  2. заполнить данные в полях на страницах редактирования элементов и разделов
  3. сделать интеграцию модуля в шаблоны компонентов (ниже подробнее)
  4. сделать локализацию подписей и надписей в шаблоне
Интеграция локализации полей в компоненты

Локализация у списков элементов/разделов

Вам необходимо прописать в 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 у всех доменов и поддоменов. На сайте, для админов, выводится кнопка настройки сео.
  • Активировать SEO-паттерн для title - активирует поле с SEO-паттерном ниже. В данный момент модуль поддерживает паттерны: (устаревшее, используйте паттерны)
    • #TITLE# - текущий title страницы
    • #CITY# - город

Шаг 3. Указать все поддерживаемые поддомены + основной домен

Шаг 3.1

Вам нужно в админке по пути: Настройки->Настройки продукта->Сайты->Список сайтов->выбираете нужный сайт (обычно s1) и прописываете в поле "Доменной имя", список доменных имен, каждый домен на новой строке.

Шаг 3.2

Путь: Настройки->Настройки продукта->Настройки модулей->Поддомены и мультиязычность->Вкладка Домены->нажать на ссылку

Пройдясь по вышеуказанному пути мы попадаем в хайлоадблок битрикса "Dev2funMultiDomain"\

В нем создаем записи. Каждая запись соответствует поддерживаемому домену\

Свойства:

  • Активность - указывает на активность домена
  • Название - внутреннее название домена (любое, не влияет на систему)
  • Подддомен - указываем название поддомена, например нам нужен вот такой вид my.domain.ru, то в этом поле указываем my
  • Главный домен - указываем название главного домена, в нашем случае domain.ru
  • HTML-код счетчиков - сюда копируем все нужные счетчики учета (например Yandex.Metrika или Google Analytics)
  • HTML-код мета-тегов - сюда копируем мета-теги для разных верификаций и любые другие, которые нужно вывести для этого поддомена
  • Язык - тут указываем язык поддомена. Работает только при включении Мультиязычности. А если указать redirect, то система будет проверять пользователя и перенаправлять его на нужный поддомен.

Шаг 4. Настройка seo-шаблонов

  1. Заходите в настройки нужного инфоблока
  2. Переходите во вкладку SEO
  3. Указываете шаблоны в нужных местах

Список поддерживаемых шаблонов:

  • {=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, который заменяется на нужные данные. Не забудьте поставить галку на "Очистить кеш вычисленных значений"

Шаг 5. Интеграция в компоненты

В режиме "подпапка" рекомендуется для комплексных компонентов или компонентов с ЧПУ указать 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
);?>

Шаг 6. Настройка битрикса

  • Перейти на страницу Настройки->Сайты->Список сайтов
  • Выберите нужный сайт
  • Указать "Доменное имя"
  • Указать правильный "Путь к корневой папке веб-сервера для этого сайта"

Для программистов

Получить информацию о текущем домене

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)

Поддерживаемые события

название события передаваемые переменные описание
OnBeforeSeoSetCityName &$cityName - название города
$currentDomain - массив полей текущего домена
Событие запускается перед заменой seo-шаблона {=get_city}
onBeforeFindDomain $domains - домен
$domainFilters - объект фильтров
Событие запускается перед получением домена
onBeforeFindDomains $domains - массив доменов
$domainFilters - объект фильтров
Событие запускается перед получением списка доменов
onAfterFindCurrentSubdomain Событие запускается после обнаружения текущего домена
onBeforeSetNotFound $isSetNotFound (bool) - флаг установки ошибки 404, при не определении текущего домена Событие запускается до установки ошибки 404

Migrations

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

About

Поддомены для 1с-битрикс и мультиязычность для 1с-битрикс. Страны и Города. Легкая настройка.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published