Функции для работы с URL в Drupal

15 февраля 2014 - 14:53

В этой статье я расскажу о полезных функциях Drupal API, позволяющих определить адрес текущей страницы, проанализировать компоненты пути, сформировать URL страницы сайта, а также вывести html ссылки с нужными атрибутами.

Определяем адрес текущей страницы

Для определения адреса текущей страницы в 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. В следующей статье я расскажу о функциях, позволяющих сформировать адреса файлов, в частности изображений, а также о том, как получить адрес изображения в определенном стиле.

Комментарии

Для ссылок с hash: l( 'Link text', 'node/7', array( 'fragment' => 'fragment-text', 'external' => true ) );
Интересен еще парамет external: если его значение false (по умолчанию), то по возможности будет сгенерирован алиас, иначе - системный адрес:

  • <a href="/node/7#fragment-text">Link text</a> - external=true
  • <a href="/page_alias#fragment-text">Link text</a> - external=false