Подробное руководство по использованию метода CSite::InDir() в CMS Битрикс

Метод CSite::InDir() в CMS Битрикс используется для проверки, находится ли текущая страница в определенной директории сайта. Этот метод особенно полезен для выполнения условных операций в зависимости от текущего местоположения пользователя на сайте. В этой статье мы подробно рассмотрим, как использовать CSite::InDir(), и приведем множество примеров для различных сценариев.

Руководство по использованию метода CSite::InDir()

Основы использования CSite::InDir()

Метод CSite::InDir() принимает два параметра:

  • $dir (обязательный) — путь к директории, которую нужно проверить.
  • $exact (необязательный) — флаг, указывающий, должно ли совпадение быть точным. По умолчанию значение false, что означает, что метод будет проверять, начинается ли текущий путь с указанной директории.

Синтаксис:

CSite::InDir($dir, $exact = false);

Примеры использования

Пример 1: Проверка нахождения в разделе каталога

if (CSite::InDir('/catalog/')) {
    echo "Вы находитесь в разделе каталога.";
} else {
    echo "Вы не в разделе каталога.";
}

В этом примере, если текущая страница находится в директории /catalog/ или любой её поддиректории, будет выведено сообщение "Вы находитесь в разделе каталога.".

Пример 2: Проверка точного совпадения директории

if (CSite::InDir('/about/', true)) {
    echo "Вы находитесь в разделе 'О компании'.";
} else {
    echo "Вы не в разделе 'О компании'.";
}

В этом примере, если текущая страница точно совпадает с директорией /about/, будет выведено сообщение "Вы находитесь в разделе 'О компании'.".

Пример 3: Отображение баннера в определенном разделе

if (CSite::InDir('/promo/')) {
    echo "";
}

В этом примере баннер будет отображаться только в разделе /promo/ и его поддиректориях.

Пример 4: Подключение дополнительных стилей для раздела блога

if (CSite::InDir('/blog/')) {
    $APPLICATION->SetAdditionalCSS('/styles/blog.css');
}

В этом примере дополнительный CSS-файл будет подключаться только для страниц в разделе /blog/.

Пример 5: Отображение различных меню в зависимости от раздела

if (CSite::InDir('/services/')) {
    $APPLICATION->IncludeComponent(
        "bitrix:menu",
        "horizontal_multilevel",
        array(
            "ROOT_MENU_TYPE" => "services",
            "MENU_CACHE_TYPE" => "A",
            "MENU_CACHE_TIME" => "3600",
            "MENU_CACHE_USE_GROUPS" => "Y",
            "MENU_CACHE_GET_VARS" => array(),
            "MAX_LEVEL" => "2",
            "CHILD_MENU_TYPE" => "services",
            "USE_EXT" => "Y",
            "DELAY" => "N",
            "ALLOW_MULTI_SELECT" => "N"
        )
    );
} else {
    $APPLICATION->IncludeComponent(
        "bitrix:menu",
        "horizontal_multilevel",
        array(
            "ROOT_MENU_TYPE" => "top",
            "MENU_CACHE_TYPE" => "A",
            "MENU_CACHE_TIME" => "3600",
            "MENU_CACHE_USE_GROUPS" => "Y",
            "MENU_CACHE_GET_VARS" => array(),
            "MAX_LEVEL" => "2",
            "CHILD_MENU_TYPE" => "left",
            "USE_EXT" => "Y",
            "DELAY" => "N",
            "ALLOW_MULTI_SELECT" => "N"
        )
    );
}

В этом примере для раздела /services/ будет подключаться одно меню, а для остальных разделов — другое.

Пример 6: Логирование посещений определенного раздела

if (CSite::InDir('/admin/')) {
    file_put_contents('/path/to/admin_log.txt', 'Посещение административного раздела: ' . date('Y-m-d H:i:s') . PHP_EOL, FILE_APPEND);
}

В этом примере каждое посещение раздела /admin/ будет логироваться в файл admin_log.txt.

Пример 7: Отображение уведомления для пользователей в личном кабинете

if (CSite::InDir('/personal/')) {
    echo "
Добро пожаловать в ваш личный кабинет!
"; }

В этом примере уведомление будет отображаться только в разделе /personal/.

Пример 8: Подключение дополнительных скриптов для раздела новостей

if (CSite::InDir('/news/')) {
    $APPLICATION->AddHeadScript('/js/news.js');
}

В этом примере дополнительный JavaScript-файл будет подключаться только для страниц в разделе /news/.

Пример 9: Отображение различных шапок в зависимости от раздела

if (CSite::InDir('/about/')) {
    $APPLICATION->SetPageProperty("title", "О компании");
    $APPLICATION->SetPageProperty("description", "Информация о нашей компании.");
} elseif (CSite::InDir('/services/')) {
    $APPLICATION->SetPageProperty("title", "Наши услуги");
    $APPLICATION->SetPageProperty("description", "Описание услуг, которые мы предоставляем.");
} else {
    $APPLICATION->SetPageProperty("title", "Главная страница");
    $APPLICATION->SetPageProperty("description", "Добро пожаловать на наш сайт.");
}

В этом примере заголовок и описание страницы будут изменяться в зависимости от раздела.

Заключение

Метод CSite::InDir() является мощным инструментом для управления контентом и функциональностью сайта в зависимости от текущего местоположения пользователя. Использование этого метода позволяет создавать более гибкие и адаптивные веб-сайты, улучшая пользовательский опыт. Надеемся, что приведенные примеры помогут вам лучше понять, как и когда использовать CSite::InDir() в своих проектах на CMS Битрикс.

Теги:  справочник

Интернет-магазин от 120 000 руб., срок от 4 недель

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

Корпоративный сайт от 60 000 руб., срок от 3 недель

Готовый информационный ресурс, включающий лицензию на 1С-Битрикс «Стандарт», технологию «Композитный сайт».

Лендинг от 25 000 руб., срок от 2 недель

Компактный сайт, идеально подходящий для старта. На одной странице можно представить ключевые преимущества вашей компании и разместить форму для обратной связи.