Руководство по работе с адресами страниц в 1С-Битрикс D7 с помощью класса \Bitrix\Main\Web\Uri

В веб-разработке часто требуется управлять адресами (URL) страниц, например, изменять параметры запроса, удалять ненужные параметры или получать отдельные части URL (протокол, домен и т.д.). В 1С-Битрикс (в рамках новой архитектуры D7) для этих целей предусмотрен специальный класс \Bitrix\Main\Web\Uri. Ниже мы рассмотрим, как им пользоваться и решать типичные задачи при работе с URL.

Руководство по работе с адресами страниц в 1С-Битрикс D7

1. Создание объекта Uri из произвольного URL

Первый шаг при работе с классом \Bitrix\Main\Web\Uri – это создание его экземпляра. Если у вас есть произвольная строка с URL, достаточно просто передать её в конструктор класса Uri:

use \Bitrix\Main\Web\Uri;

$url = "https://example.com/catalog/item/?id=123&color=red";
$uri = new Uri($url);

// Теперь в $uri хранится объект класса Uri, и мы можем управлять им

Получив объект $uri, вы сможете получить или изменить любые части URL (параметры, путь, фрагмент и т.д.).


2. Создание объекта Uri из адреса текущей страницы

Во многих случаях важна работа именно с адресом текущей страницы, на которой находится пользователь (включая его GET-параметры). В 1С-Битрикс есть несколько способов получить текущий URL.

2.1. Прямое создание из $APPLICATION->GetCurUri()

Если вы привыкли работать с глобальным объектом $APPLICATION, можете использовать метод GetCurUri(). Он вернёт URI текущей страницы (без указания домена), но с query-параметрами:

use \Bitrix\Main\Web\Uri;

// Этот метод возвращает URI вида "/catalog/item/?id=123&color=red"
$currentPageUri = $APPLICATION->GetCurUri();

// Создаем объект Uri
$uri = new Uri($currentPageUri);

Если вам нужен полный адрес (с доменом), то придётся сконструировать его вручную, добавив протокол и хост:

$domain = (CMain::IsHTTPS() ? "https://" : "http://") . $_SERVER['HTTP_HOST'];
$uriStringFull = $APPLICATION->GetCurUri();

$uriFull = new Uri($domain . $uriStringFull);

// Теперь $uriFull содержит полный URL вида "https://example.com/catalog/item/?id=123"

2.2. Создание объекта Uri из текущего запроса

Альтернативный способ – воспользоваться объектом запроса \Bitrix\Main\HttpRequest, который считается более «правильным» в парадигме D7:

use \Bitrix\Main\Application;
use \Bitrix\Main\Web\Uri;

// Получаем объект текущего запроса
$request = Application::getInstance()->getContext()->getRequest();

// Достаем URI текущего запроса (путь и параметры, без домена)
$currentUrl = $request->getRequestUri();

// Создаем объект Uri
$uri = new Uri($currentUrl);

// Теперь в $uri содержится объект, описывающий URL текущей страницы

Данный способ удобен для использования в современных компонентах и модулях 1С-Битрикс, где глобальные переменные $APPLICATION менее востребованы.


3. Получение адреса из объекта Uri

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

3.1. Метод getUri()

Метод getUri() возвращает полный URL (то есть схему, домен, путь и query-параметры):

$originalUrl = $uri->getUri();
echo $originalUrl;
// Например, выведет: https://example.com/catalog/item/?id=123&color=red

3.2. Метод getLocator()

Если нужно получить URL без query-параметров, используйте getLocator():

$locator = $uri->getLocator();
echo $locator;
// Выведет, например: https://example.com/catalog/item/

4. Получение полного адреса текущей страницы

Чтобы вывести полный адрес текущей страницы (включая схему и домен), при условии что в $uri уже есть нужные данные, вы можете:

$currentFullUrl = $uri->getUri();
echo "Текущий полный адрес: " . $currentFullUrl;

Если объект Uri был создан без схемы и домена (например, из GetCurUri()), то придётся дополнить их вручную, как в примерах выше.


5. Получение составляющих адреса

Класс Uri предоставляет методы для доступа к отдельным частям URL:

  • getScheme() – протокол (http / https)
  • getHost() – домен (example.com)
  • getPort() – порт (если указан в URL, например 8080)
  • getPath() – путь (например, /catalog/item/)
  • getQuery() – строка запроса (часть после ?, например id=123&color=red)
  • getFragment() – фрагмент (часть после #, если есть)
echo "Протокол: " . $uri->getScheme() . PHP_EOL;
echo "Домен: " . $uri->getHost() . PHP_EOL;
echo "Порт: " . $uri->getPort() . PHP_EOL;
echo "Путь: " . $uri->getPath() . PHP_EOL;
echo "Параметры: " . $uri->getQuery() . PHP_EOL;
echo "Фрагмент: " . $uri->getFragment() . PHP_EOL;

6. Установка составляющих адреса

Чтобы менять структуру URL, у класса Uri есть соответствующие «сеттеры»:

  • setScheme($scheme)
  • setHost($host)
  • setPort($port)
  • setPath($path)
  • setQuery($query)
  • setFragment($fragment)
$uri->setScheme("http");
$uri->setHost("newdomain.ru");
$uri->setPath("/newpath/test/");
$uri->setQuery("product=456&sort=desc");
$uri->setFragment("section1");

echo $uri->getUri();
// Результат: http://newdomain.ru/newpath/test/?product=456&sort=desc#section1

7. Добавление параметров в адрес

Одно из самых часто используемых действий – добавить или изменить query-параметры. Для этого есть метод addParams():

// Исходный URL: https://example.com/catalog/item/?id=123&color=red
$uri->addParams([
    'page' => 2,
    'sort' => 'price'
]);

echo $uri->getUri();
// Результат: https://example.com/catalog/item/?id=123&color=red&page=2&sort=price

Важно: если какой-то параметр уже существует, addParams() перезапишет его значение.


8. Удаление параметров из адреса

Чтобы удалить параметры, используйте метод deleteParams(), передавая в него массив с именами нужных параметров:

// Исходный URL: https://example.com/catalog/item/?id=123&color=red&page=2&sort=price
$uri->deleteParams(['color', 'sort']);

echo $uri->getUri();
// Результат: https://example.com/catalog/item/?id=123&page=2

9. Удаление системных параметров из адреса

В Bitrix часто встречаются служебные параметры (sessid, bitrix_include_areas, bxajaxid и т.д.), которые бывают не нужны в итоговой ссылке. Их удобно убирать точно так же, методом deleteParams():

$systemParams = ['sessid', 'bitrix_include_areas', 'bxajaxid'];
$uri->deleteParams($systemParams);

echo $uri->getUri();

Таким образом вы очищаете адрес от «лишних» системных переменных.


Заключение

Класс \Bitrix\Main\Web\Uri в D7 значительно упрощает работу с URL в 1С-Битрикс, позволяя:

  1. Удобно получать нужную информацию о протоколе, домене, пути и параметрах.
  2. Гибко манипулировать составом query-параметров — добавлять, изменять и удалять их без риска допустить ошибку при ручном парсинге.
  3. Избегать лишних строковых операций, используя готовые методы для получения и преобразования URL.

Используйте Uri в своих проектах, чтобы быстрее и надёжнее формировать, модифицировать и анализировать адресные строки. Это позволит писать более чистый и поддерживаемый код, а также снизить вероятность ошибок при работе с URL.

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

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

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

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

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

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

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