Функции для работы с URL в Drupal
Определяем адрес текущей страницы
Для определения адреса текущей страницы в Drupal служит функция current_path(). Она не имеет аргументов и возвращает внутренний адрес текущей страницы, например «node/1». Обратите внимание, что функция возвращает не ЧПУ страницы, заданный через синонимы вручную или созданный автоматически с помощью модуля Pathauto. В случае если необходимо получить синоним URL страницы, воспользуйтесь функцией drupal_get_path_alias(), которая по умолчанию возвращает адрес текущей страницы, а если в нее передать внутренний путь любой страницы, то она вернет синоним URL этой страницы. Примеры:
<?php print current_path(); // Вернет внутренний адрес, например "node/2" print drupal_get_path_alias(); // Вернет синоним адреса текущей страницы, например "kontakty" print drupal_get_path_alias('taxonomy/term/1'); // Вернет синоним URL заданной страницы сайта, например "katalog/bruschatka" ?>
Разбираем компоненты пути страницы
Для получения компонентов внутреннего пути любой страницы в Drupal служит функция arg(). Рассмотрим ее работу на примере страницы с адресом "node/1":
<?php print arg(0); // Вернет "node" print arg(1); // Вернет 1 ?>
Если в функцию arg() не передать параметр $index, то она вернет массив компонентов пути текущей страницы:
<?php print_r(arg()); // Вернет Array ( [0] => node [1] => 1 ) ?>
Также у функции arg() имеется дополнительный параметр $path, установленный по умолчанию в NULL. Если передать через этот параметр путь другой страницы, то функция arg() выполнит разбор компонентов этого пути.
Проверяем, является ли страница главной
Для того, чтобы узнать, является ли текущая страница главной, можно воспользоваться функцией drupal_is_front_page(), возвращающая значение булева типа.
Формируем URL страницы
Для того чтобы получить URL любой страницы сайта в Drupal имеется функция, которая так и называется – url(). Эта функция может возвращать как относительные, так и абсолютные URL страниц сайта, заменяя внутренние адреса страниц на их синонимы (если они заданы).
Примеры использования функции url():
Формируем относительный URL страницы:
<?php print url('node/2'); // Вернет синоним, например, "/o-kompanii" ?>
Получаем абсолютный адрес страницы:
<?php print url('node/2', array('absolute' => true)); // Вернет "<a href="http://mysite.com/o-kompanii"">http://mysite.com/o-kompanii"</a> ?>
Передаем в ссылку дополнительный параметр:
<?php print url('node/75', array('query' => array('product' => 125))); // Вернет "/zakaz-produkcii?product=125" ?>
Больше примеров вы найдете в документации по данной функции.
Формируем html ссылки
Функция url() позволят сформировать нужное значение для атрибута href тега a. Однако в Drupal API есть еще более удобная функция l(), которая позволяет сразу получить html-код ссылки. Первым аргументом функции является текст анкора ссылки, вторым – внутренний путь страницы. Третьим необязательным параметром является массив дополнительных опций.
Примеры использования функции l()
Выводим обычную ссылку:
<?php print l('О компании', 'node/2'); // Результат – '<a href="/o-kompanii">О компании</a>' ?>
Добавляем ссылке идентификатор:
<?php print l('О компании', 'node/2', array('attributes' => array('id' => 'about'))); // Результат – '<a id="about" href="/o-kompanii">О компании</a>' ?>
Добавляем класс ссылке:
<?php print l('О компании', 'node/2', array('attributes' => array('class' => array('about')))); // Результат – '<a class="about" href="/o-kompanii">О компании</a>' ?>
Обратите внимание, что при добавлении класса ссылке его нужно передавать в массиве, так как атрибут class может иметь множественные значения. Также функция l() добавляет класс active ссылке на текущую страницу, что очень удобно для решения задач верстки, когда ссылку на текущую страницу нужно выделить особым стилем.
Конечно же, рассмотренные здесь функции не исчерпывают запас Drupal API по работе с URL. В следующей статье я расскажу о функциях, позволяющих сформировать адреса файлов, в частности изображений, а также о том, как получить адрес изображения в определенном стиле.