Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/darkfriend/dev2fun.multidomain
Поддомены для 1с-битрикс и мультиязычность для 1с-битрикс. Страны и Города. Легкая настройка.
https://github.com/darkfriend/dev2fun.multidomain
bitrix module multidomain seo solutions
Last synced: 22 days ago
JSON representation
Поддомены для 1с-битрикс и мультиязычность для 1с-битрикс. Страны и Города. Легкая настройка.
- Host: GitHub
- URL: https://github.com/darkfriend/dev2fun.multidomain
- Owner: darkfriend
- Created: 2018-01-18T19:37:33.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-09-16T19:43:23.000Z (4 months ago)
- Last Synced: 2024-09-17T00:42:01.367Z (4 months ago)
- Topics: bitrix, module, multidomain, seo, solutions
- Language: PHP
- Size: 68.6 MB
- Stars: 19
- Watchers: 3
- Forks: 14
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
# Поддомены и мультиязычность. Страны и Города.
Модуль позволяет добавить в битрикс поддержку множество поддоменов на 1 лицензии битрикса, приложив при этом минимальные усилия.
[Модуль в Маркетплейс Битрикс](http://marketplace.1c-bitrix.ru/solutions/dev2fun.multidomain/#tab-install-link)
## Содержание
* [Что делает модуль:](#что-делает-модуль)
* [SEO-поддержка](#seo-поддержка)
* [Кому пригодится:](#кому-пригодится)
* [Плюсы модуля:](#плюсы-модуля)
* [Компоненты](#компоненты)
* [Как использовать](#как-использовать)
* [Шаг 1. Настройка поддоменов на хостинге (только для режима "Поддомен")](#шаг-1-настройка-поддоменов-на-хостинге-только-для-режима-поддомен)
* [Шаг 2. Настроить модуль "Поддомены и мультиязычность"](#шаг-2-настроить-модуль-поддомены-и-мультиязычность)
* [Вкладка "Настройки"](#вкладка-настройки)
* [Вкладка "Домены"](#вкладка-домены)
* [Вкладка "Мультиязычность"](#вкладка-мультиязычность)
* [Локализация (языки)](#локализация-языки)
* [Шаги:](#шаги)
* [Интеграция локализации полей в компоненты](#интеграция-локализации-полей-в-компоненты)
* [Локализация подписей и надписей в шаблоне](#локализация-подписей-и-надписей-в-шаблоне)
* [Вкладка "SEO"](#вкладка-seo)
* [Шаг 3. Указать все поддерживаемые поддомены + основной домен](#шаг-3-указать-все-поддерживаемые-поддомены--основной-домен)
* [Шаг 3.1](#шаг-31)
* [Шаг 3.2](#шаг-32)
* [Шаг 4. Настройка seo-шаблонов](#a-nameseopattersa-шаг-4-настройка-seo-шаблонов)
* [Шаг 5. Интеграция в компоненты](#шаг-5-интеграция-в-компоненты)
* [Пример на компоненте `bitrix:catalog`](#пример-на-компоненте-bitrixcatalog)
* [Шаг 6. Настройка битрикса](#шаг-6-настройка-битрикса)
* [Для программистов](#для-программистов)
* [Получить информацию о текущем домене](#получить-информацию-о-текущем-домене)
* [Получить язык текущего домена](#получить-язык-текущего-домена)
* [Получить имя поддомена](#получить-имя-поддомена)
* [Получить все sef-folder](#получить-все-sef-folder)
* [Получить все поддомены](#получить-все-поддомены)
* [Получить поддомен по фильтру](#получить-поддомен-по-фильтру)
* [Поддерживаемые события](#поддерживаемые-события)
* [Миграции на новые версии](#migrations)
* [Техническая поддержка](#техническая-поддержка)
* [Поддержка выпуска обновлений (донаты)](#поддержка-выпуска-обновлений)## Что делает модуль:
* Добавляет возможность создания **бесконечного** числа **поддоменов**
* Добавляет **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. добавить поддержку полей в настройках модуля
1. заполнить данные в полях на страницах редактирования элементов и разделов
1. сделать интеграцию модуля в шаблоны компонентов (ниже подробнее)
1. сделать локализацию подписей и надписей в шаблоне###### Интеграция локализации полей в компоненты
**Локализация у списков элементов/разделов**
Вам необходимо прописать в result_modifier.php шаблона используемого компонента следующее:
```php
// подгружаем все модуль и все его классы
\Bitrix\Main\Loader::includeModule('dev2fun.multidomain');
$arItems = \Dev2fun\MultiDomain\LangData::getLangItemsFields($arItems, 'element');
// где $arItems - массив элементов или разделов
// где element - тип, т.к. element - для элементов, section - для разделов
```**Локализация у элементов**
Вам необходимо прописать в result_modifier.php шаблона используемого компонента следующее:
```php
// подгружаем все модуль и все его классы
\Bitrix\Main\Loader::includeModule('dev2fun.multidomain');
$arResult = \Dev2fun\MultiDomain\LangData::getDataFields($arResult,'element');
// где arResult - массив полей элемента
// где element - тип, т.к. мы выводим для элемента, поэтому element
```**Локализация у разделов**
Вам необходимо прописать в result_modifier.php шаблона используемого компонента следующее:
```php
// подгружаем все модуль и все его классы
\Bitrix\Main\Loader::includeModule('dev2fun.multidomain');
$arResult = \Dev2fun\MultiDomain\LangData::getDataFields($arResult,'section');
// где arResult - массив полей раздела
// где section- тип, т.к. мы выводим для раздела, поэтому section
```###### Локализация подписей и надписей в шаблоне
Вначале файла необходимо загрузить файл переводов (например файл `header.php`)
```php
=\Dev2fun\MultiDomain\LangData::getMessage('HI');?>
```Если `LangData::loadMessages` был вызван в файле `header.php`, то переводы будут по пути: `/путь_до_шаблона/lang/код_языка/header.php`.
Состав файла для `ru`:
```php
Настройки продукта->Сайты->Список сайтов->выбираете нужный сайт (обычно 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
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-файл](CHANGELOG.md)_**
## Техническая поддержка
Поддержку решения осуществляет @darkfriend от команды [dev2fun](http://dev2fun.com)
Вы можете найти меня по этому нику в [telegram](https://t.me/darkfriend) или написав на почту [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](https://www.paypal.me/darkfriend) |
| Payeer | P93175651 |
| Bitcoin | 15Veahdvoqg3AFx3FvvKL4KEfZb6xZiM6n |
| Litecoin | LRN5cssgwrGWMnQruumfV2V7wySoRu7A5t |
| Ethereum | 0xe287Ac7150a087e582ab223532928a89c7A7E7B2 |
| BitcoinCash | bitcoincash:qrl8p6jxgpkeupmvyukg6mnkeafs9fl5dszft9fw9w |