Работа с URL-адресами в Bitrix D7
Работа с URL-адресами в Bitrix является одним из важных моментов в работе всей системы. До появления ядра версии D7 работа с URL адресами производилась посредством классов CMain::GetCurPageParam и DeleteParam. На нашем сайте ранее публиковались примеры формирования URL с передачей многомерных массивов, а также произвольных URL посредством использования GetCurPageParam.
В D7 для работы с ссылками появился аналог этим классам – Uri. Работа с классом в некоторых моментах стала сложнее, т.к. каждый аспект работы класса стал более самостоятельным, реализованным в отдельных методах.
Класс Uri в Bitrix D7
Примеры работы c классом Uri
В представлении класса Uri в системе Bitrix каждый URL является объектом, с параметрами которого класс и работает посредством отдельных методов. Поэтому в перед тем как работать с URL необходимо инициализировать объект класса Uri.
Создание объекта из URL строки
Создать объект класса Uri мы можем из обычной строки URL, после чего уже работать с этим объектом.
Создание объекта из текущего URL
Довольно часто приходится работать с параметрами URL текущей страницы. Для работы с URL текущей страницы аналогично необходимо создать объект класса Uri. Получить текущий URL, и создать объект класса для работы с ним можно таким образом:
После того как создан объект класса Uri, мы можем работать с методами класса. Так к примеру, мы можем получить составляющие части сайта.
Методы класса Uri
Таблица доступных методов в данный момент времени:
| Метод | Описание | С версии |
|---|---|---|
| addParams | Метод добавляет параметры в запрос или заменяет существующие параметры. | 15.5.10 |
| deleteParams | Метод удаляет параметры из запроса. | 15.5.10 |
| getFragment | Метод возвращает фрагмент. | 14.0.15 |
| getHost | Метод возвращает хост. | 14.0.15 |
| getLocator | Метод возвращает URI без фрагмента. | 15.5.10 |
| getPass | Метод возвращает пароль. | 14.0.15 |
| getPath | Метод возвращает путь. | 14.0.15 |
| getPathQuery | Метод возвращает путь с запросом. | 14.0.15 |
| getPort | Метод возвращает номер порта. | 14.0.15 |
| getQuery | Метод возвращает запрос | 14.0.15 |
| getScheme | Метод возвращает схему. | 14.0.15 |
| getUri | Метод возвращает URI с фрагментом, если он имеется. | 15.5.10 |
| getUser | Метод возвращает пользователя. | 14.0.15 |
| setHost | Метод устанавливает хост | 14.0.15 |
| setPath | Метод устанавливает путь. | 15.5.10 |
| setUser | Метод устанавливает пользователя. | 16.5.7 |
| setPass | Метод устанавливает пароль. | 16.5.7 |
Изменение параметров в URL
Методы класса Uri позволяют так же добавлять параметры в существующий URL, а также менять различные составляющие URL-адреса.
Таким образом, можно довольно гибко оперировать данными URL в различных участках кода. К примеру, это может потребоваться тогда, когда необходимо сформировать URL-адреса для списка ссылок в шаблоне компонента. Класс будет работать везде где подключается ядро, Bitrix-а, поэтому его можно использовать как в компонентах, так и в отдельных скриптах-обработчиках, к примеру, в ajax.
Если папка то применяем. в Битрикс
Бывает, стоит задача применить какой-либо стиль или вывести конкретный кусочек кода для дирректории. Для этого в Битрикс можно воспользоваться параметром CMain::GetCurPage. А как расскажу на примере.
Итак согласно документации Битрикс:
string CMain::GetCurPage(bool get_index_page=null)
Возвращает путь к текущей странице относительно корня без параметров.
Как нам это может пригодится:
Задача применить класс для li.company в разделе /company/ при этом на любой другой для этогоже li должен применяться li.nocompany
Элементарщина в общем.
Добавлено:
GetCurDir позволяет применить условие для каталога, если нужно применить для каталога и всех внутренних подкаталогов, можно воспользоваться if(CSite::InDir():
Пример из реальной жизни: на моем сайте часть разделов (портфолио, форум, дизайн) имеет одноколоночную верстку, дабы не плодить отдельные шаблоны, я просто указал в каких разделах не выводить aside
GetCurDir()==’/designes/ready-made-html-layouts/’)
|| ($APPLICATION->GetCurDir()==’/designes/adaptive-html/’)
|| ($APPLICATION->GetCurDir()==’/portfolio/’)
|| ($APPLICATION->GetCurDir()==’/forum/’)
):?>
По хорошему, злоупотреблять этим не стоит, так как после вас мало кто разберется в верстке если условий будет очень много. Приходилось сталкиваться с реализацией шаблона который проще переверстать нежели разобраться как эта хрень вообще работает. (накипело)
Определяем текущий уровень раздела в каталоге
Если нужно назначить некое условие для заранее заданного уровня подраздела в каталоге Битрикс, можно воспользоваться вот таким условием
Должно произойти вот это
По просьбе читателя добавляю: Отсчет разделов начинается с 0 а не с 1
Bitrix адрес текущей страницы
Современные сайты наполняются содержанием с помощью специального программного обеспечения: CMS.
Для кого этот курс?
Курс Контент-менеджер адресован тем, кто работает с содержанием сайта: наполнение, изменение текста, загрузка и размещение картинок и так далее.
Практика и тесты
При изучении курса рекомендуется повторять описываемые действия на демонстрационной версии сайта, установленной локально или в Виртуальной лаборатории.
После изучения курса пройдите тесты на сертификацию. При успешной сдаче последовательности тестов со страницы Моё обучение скачайте сертификат об успешном прохождении курса в формате PDF.
Для преподавания оффлайн
Если данный курс берётся в качестве основы для оффлайного преподавания, то рекомендуемая продолжительность: 2 дня (16 академических часов).
Если нет интернета

Android:
EPUB Reader
CoolReader
FBReader
Moon+ Reader
eBoox
iPhone:
FBReader
CoolReader
iBook
Bookmate
Windows:
Calibre
FBReader
Icecream Ebook Reader
Плагины для браузеров:
EpuBReader – для Firefox
Readium – для Google Chrome
Как проходить учебный курс?
Обработка адресов
Понятие обработки адресов
Обработка адресов (UrlRewrite) применяется для того, чтобы скрипт мог отвечать не только по своему физическому, но и по любому другому указаному адресу. Например, можно задать настройки обработки адресов, чтобы скрипт в файле /fld/c.php, отвечающий по адресу
отвечал также по адресу
Адрес, по которому будет отвечать скрипт, не должен физически существовать на сервере. Если такой адрес физически существует, то будет вызван скрипт по этому адресу. Система обработки адресов запущена в этом случае не будет.
Правила обработки
Правила обработки адресов настраиваются отдельно для каждого сайта и хранятся в корне сайта в файле urlrewrite.php. Файл содержит массив $arUrlRewrite, каждая запись которого является правилом обработки адреса. Файл urlrewrite.php имеет следующий вид:
Каждое правило должно содержать уникальное в рамках сайта условие выполнения правила. Условие выполнения записывается в ключ «CONDITION» массива и является шаблоном Perl-совместимого регулярного выражения. Например, условие:
указывает, что данное правило должно применяться для всех адресов, которые начинаются с подстрок вида:
Правило может содержать адрес физически существующего скрипта, который будет подключен при выполнении условия. Этот адрес записывается в ключ «PATH«. Например, если в системе обработки адресов зарегистрировано правило:
и пользователь запросил страницу:
которая физически не существует, то система обработки адресов подключит скрипт:
Правило может содержать правило замены, которое записывается в ключ «RULE«. Если правило замены установлено, то адрес реально существующего подключаемого скрипта формируется заменой регулярным варажением условия выполнения (шаблона выражения) на конкатенацию физического пути (ключ «PATH«) и правила замены (ключ «RULE«). Например, если в системе обработки адресов зарегистрировано правило:
и пользователем запрошена страница:
то для формирования адреса скрипта, который будет подключен, выполнится код:
и будет подключен скрипт:
Если в системе обработки адресов зарегистрировано правило:
и пользователем запрошена страница:
то для формирования адреса скрипта, который будет подключен, выполнится код:
и будет подключен скрипт:
Правило может содержать имя компонента, который создал это правило. Это имя записывается в ключ «ID«. При автоматическом пересоздании файла правил urlrewrite.php с помощью средств административной части сайта пересоздаются только правила, у которых заполнен ключ «ID«. Эти правила пересоздаются на основании анализа физических файлов в папке сайта. Правила с пустым ключом «ID» при автоматическом пересоздании файла правил не изменяются.
Подключение системы обработки адресов
Перед началом использования система обработки адресов должна быть подключена на сайте. Для этого необходимо:
Примеры правил и условий для модуля mod_rewrite
Поддержка компонентов 2.0
При добавлении на страницу компонента с поддержкой ЧПУ («человеко-понятный URL«) (если файл сохраняется с помощью API), автоматически создаётся правило обработки адреса. Если страница создаётся не с помощью API, а, например, записывается через FTP, то необходимо выполнить пересоздание правил (кнопка на панели инструментов на странице настройки правил обработки адресов).
Поддержка ЧПУ включается в компоненте с помощью предопределённого входного параметра SEF_MODE. При этом в предопределённом входном параметре SEF_FOLDER устанавливается папка, в которой работает компонент. Папка может быть виртуальной (т.е. физически может не существовать). При сохранении страницы с размещённым на ней компонентом, переключенным в режим ЧПУ (параметр SEF_MODE равен Y), через стандартный интерфейс правило обработки адресов создаётся следующим образом: в ключ условия применения шаблона («CONDITION«) записывается регулярное выражение, полученое из папки в параметре SEF_FOLDER, в ключ «ID» записывается имя компонента, в ключ пути («PATH«) записывается физический адрес страницы.
Например, пусть компонент «bitrix:catalog» размещён на странице /fld/c.php и его подключение выглядит следующим образом:
Тогда при сохранении страницы /fld/c.php в системе обработки адресов добавится запись:
Таким образом, при запросе адресов, начинающихся со строки /mycatalog/, будет подключаться скрипт /fld/c.php. В этом скрипте запрошенный адрес может быть проанализирован и выполнены требуемые действия.
Смотрите также
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
| Цитата |
|---|
| Борис Байзулаев пишет: Адрес физического файла, подключенного в результате обработки адреса записывается в Код $_SERVER[«REAL_FILE_PATH»] |
Упрощенный вариант правила, решающий проблему, описанную Денисом Мальцевым в предыдущем комментарии.
Одна интересная особенность, которую надо учитывать.
Допустим вам надо сделать преобразование такого вида, чтобы при открытии страницы /news/445.php происходило преобразование в /news/detail.php?ID=445
Можно использовать такое правило
Оно даже будет работать, но ровно до тех пор пока в строке не появятся дополнительные параметры. Например пользователь перешел с внешнего ресурса и в URL была добавлена метка для Google Analitics, запрошенный URL получился примерно такой /news/445.php?utm_source=google. Вместо текста новости вы увидите сообщение «Элемент не найден», потому что в результате преобразования получился такой адрес /news/detail.php?ID=445?utm_source=google.
Ниже приведен код, решающий эту проблему:
Задача : Выполнить 301 редирект с одного домена на другой, чтобы любой адрес домена olddomain вёл на тот же адрес, но в домене newdomain.
Bitrix адрес текущей страницы
Курс предназначен для базовой подготовки администраторов сайтов, созданных на «1С-Битрикс: Управление сайтом». Изучив курс, вы освоите основные методы администрирования системы, а также пополните знания по темам, изученным в курсе Контент-менеджер.
Если вы добросовестно изучите курс, то научитесь:
Если вам предстоит самостоятельная установка системы или перенос сайта на хостинг, то без курса Установка и настройка Курс Установка и настройка предназначен для специалистов устанавливающих «1С-Битрикс: Управление сайтом» или «Битрикс24 в коробке».
Начальные требования
Необходимый минимум знаний для изучения курса:
Неплохо было бы иметь базовые навыки установки и администрирования *nix-систем.
Тесты и сертификат
Иконка успешно сданного вами курса отображается в вашем профиле на Freelance, если вы укажите ссылку на ваш профиль на сайте компании 1С-Битрикс.
Комментарии к урокам
Для преподавания оффлайн
Если данный курс берётся в качестве основы для оффлайного преподавания, то рекомендуемая продолжительность: 3 дня (24 академических часа).
Если нет интернета

Android:
EPUB Reader
CoolReader
FBReader
Moon+ Reader
eBoox
iPhone:
FBReader
CoolReader
iBook
Bookmate
Windows:
Calibre
FBReader
Icecream Ebook Reader
Плагины для браузеров:
EpuBReader – для Firefox
Readium – для Google Chrome



