Как вывести Title и Description в каталоге Bitrix в зависимости от определенных условий?

Добрый день. <br/> У нас есть сайт с региональной привязкой, использующий поддомены. Нам необходимо установить разные заголовки и описания для главного домена и поддоменов. Например, для основного домена можно использовать описание "Товары в Хабаровске с доставкой по России", а для поддоменов — "Товары с доставкой в (город поддомена)". <br/> В основном файле index.php я реализовал условие на PHP: <br/> <pre><code class="php">$host = $_SERVER['HTTP_HOST']; 
 if($host == "site.ru") { 
$APPLICATION-&gt;SetPageProperty("title", "Заголовок для домена site.ru "); 
$APPLICATION-&gt;SetPageProperty("description", "Описание для домена site.ru");
} else {
$APPLICATION-&gt;SetPageProperty("title", "Другой заголовок для поддомена site.ru "); 
$APPLICATION-&gt;SetPageProperty("description", "Другое описание для поддомена site.ru");
}</code></pre> <br/> <br/> Можете подсказать, как создать аналогичное условие для разделов каталога, чтобы для домена использовалось одно описание, а для поддоменов — другое? <br/> <b>PS:</b> Обратите внимание, что поддомены ссылаются на основной домен и не являются независимыми сайтами.
  • 14 февраля 2025 г. 7:54
Ответы на вопрос 1
Чтобы настроить разные заголовки и описания (Title и Description) для разделов каталога в Bitrix в зависимости от домена или поддомена, вы можете добавить аналогичную логику в файл, отвечающий за вывод свойств страницы, например, в файл компонента вашего каталога. В зависимости от структуры вашего сайта, можно модифицировать файл `template.php` компонента каталога или использовать обработчик события, если такие настройки применяются глобально.

### Пример реализации в `template.php` компонента каталога:

1. Найдите файл `template.php`, который используется для отображения каталога товаров. Это может быть путь вида `bitrix/templates/YOUR_TEMPLATE/components/bitrix/catalog.section/template.php`.

2. Вставьте следующий код в начале этого файла:

```php
<?php
$host = $_SERVER['HTTP_HOST'];

if ($host == "site.ru") {
    $APPLICATION->SetPageProperty("title", "Заголовок для домена site.ru");
    $APPLICATION->SetPageProperty("description", "Описание для домена site.ru");
} else {
    // Определите логику для получения города из поддомена
    // Например, если поддомен совпадает с названием города: "khabarovsk.site.ru" должен вернуть "Хабаровске"
    $subdomain = explode('.', $host)[0]; // Получаем первую часть поддомена
    // Здесь можно добавить логику для преобразования поддомена в название города, если это необходимо
    $cityName = ucfirst($subdomain); // Заглавная буква

    $APPLICATION->SetPageProperty("title", "Товары с доставкой в $cityName");
    $APPLICATION->SetPageProperty("description", "Товары с доставкой в $cityName");
}
?>
```

### Пример реализации с использованием события:

Если вы хотите, чтобы эта логика управлялась из одного места и применялась ко всем страницам, вы можете использовать события:

1. В файле `init.php` вашего шаблона добавьте следующее:

```php
AddEventHandler("main", "OnEndBufferContent", "ModifyPageTitles");

function ModifyPageTitles(&$content) {
    global $APPLICATION;

    $host = $_SERVER['HTTP_HOST'];

    if ($host == "site.ru") {
        $APPLICATION->SetPageProperty("title", "Заголовок для домена site.ru");
        $APPLICATION->SetPageProperty("description", "Описание для домена site.ru");
    } else {
        $subdomain = explode('.', $host)[0]; // Получаем первую часть поддомена
        // Здесь можно добавить логику для преобразования поддомена в название города, если это необходимо
        $cityName = ucfirst($subdomain); // Заглавная буква

        $APPLICATION->SetPageProperty("title", "Товары с доставкой в $cityName");
        $APPLICATION->SetPageProperty("description", "Товары с доставкой в $cityName");
    }
}
```

### Заключение

Данный подход позволяет вам контролировать заголовки и описания для различных доменов и поддоменов, основываясь на текущем хосте. Не забудьте протестировать изменения, чтобы убедиться, что заголовки и описания отображаются корректно в зависимости от URL.
Похожие вопросы