url
includes/common.inc, строка 1377
- Версии
- 5
url($path = NULL,
$query= NULL,$fragment= NULL,$absolute= FALSE)- 6
url($path = NULL, $options = array())
Генерирует URL из указанного пути меню. Также поддерживает уже существующие URL.
Для создания ссылок в модулях лучше вместо url()
использовать функцию l()
.
Параметры
$path
Путь меню, на который будет указывать URL, например 'admin/content/node'
, или уже существующий URL, например 'http://drupal.org/'
. Специальный путь '<front>'
может быть использован для получения адреса на заглавную страницу сайта.
$options
Ассоциативный массив дополнительных параметров со следующими ключами:
'query'
Строка запроса, присоединяемая к адресу или ассоциативный массив вида'имя_параметра' => 'значение'
.'fragment'
Идентификатор фрагмента (или именованный якорь), присоединяемый к адресу. Не добавляйте символ'#'
.'absolute'
(по умолчаниюFALSE
) Определяет, будет ли полученый URL абсолютным (т.е. начанаться с'http:'
). Это полезно для ссылок, которые будут показываться в материалах вне сайта, например, при генерации ленты RSS.'alias'
(по умолчаниюFALSE
) Определяет, является ли уже указанный путь псевдонимом или нет.'external'
Определяет, является ли указанный путь внешним.'language'
Языковой объект, определяющий к какой языковой версии документа требуется сформировать URL.'base_url'
Только для внутренних адресов: задает базовый URL, если этого требуют языковые настройки сайта.'prefix'
Только для внутренних адресов: задает префикс пути, если этого требуют языковые настройки сайта.
Возвращаемое значение
Строка, содержащая URL для заданного пути.
Код
<?php
function url($path = NULL, $options = array()) {
// Merge in defaults.
$options += array(
'fragment' => '',
'query' => '',
'absolute' => FALSE,
'alias' => FALSE,
'prefix' => ''
);
if (!isset($options['external'])) {
// Return an external link if $path contains an allowed absolute URL.
// Only call the slow filter_xss_bad_protocol if $path contains a ':' before
// any / ? or #.
$colonpos = strpos($path, ':');
$options['external'] = ($colonpos !== FALSE && !preg_match('![/?#]!', substr($path, 0, $colonpos)) && filter_xss_bad_protocol($path, FALSE) == check_plain($path));
}
// May need language dependent rewriting if language.inc is present.
if (function_exists('language_url_rewrite')) {
language_url_rewrite($path, $options);
}
if ($options['fragment']) {
$options['fragment'] = '#'. $options['fragment'];
}
if (is_array($options['query'])) {
$options['query'] = drupal_query_string_encode($options['query']);
}
if ($options['external']) {
// Split off the fragment.
if (strpos($path, '#') !== FALSE) {
list($path, $old_fragment) = explode('#', $path, 2);
if (isset($old_fragment) && !$options['fragment']) {
$options['fragment'] = '#'. $old_fragment;
}
}
// Append the query.
if ($options['query']) {
$path .= (strpos($path, '?') !== FALSE ? '&' : '?') . $options['query'];
}
// Reassemble.
return $path . $options['fragment'];
}
global $base_url;
static $script;
if (!isset($script)) {
// On some web servers, such as IIS, we can't omit "index.php". So, we
// generate "index.php?q=foo" instead of "?q=foo" on anything that is not
// Apache.
$script = (strpos($_SERVER['SERVER_SOFTWARE'], 'Apache') === FALSE) ? 'index.php' : '';
}
if (!isset($options['base_url'])) {
// The base_url might be rewritten from the language rewrite in domain mode.
$options['base_url'] = $base_url;
}
// Preserve the original path before aliasing.
$original_path = $path;
// The special path '<front>' links to the default front page.
if ($path == '<front>') {
$path = '';
}
elseif (!empty($path) && !$options['alias']) {
$path = drupal_get_path_alias($path, isset($options['language']) ? $options['language']->language : '');
}
if (function_exists('custom_url_rewrite_outbound')) {
// Modules may alter outbound links by reference.
custom_url_rewrite_outbound($path, $options, $original_path);
}
$base = $options['absolute'] ? $options['base_url'] .'/' : base_path();
$prefix = empty($path) ? rtrim($options['prefix'], '/') : $options['prefix'];
$path = drupal_urlencode($prefix . $path);
if (variable_get('clean_url', '0')) {
// With Clean URLs.
if ($options['query']) {
return $base . $path .'?'. $options['query'] . $options['fragment'];
}
else {
return $base . $path . $options['fragment'];
}
}
else {
// Without Clean URLs.
$variables = array();
if (!empty($path)) {
$variables[] = 'q='. $path;
}
if (!empty($options['query'])) {
$variables[] = $options['query'];
}
if ($query = join('&', $variables)) {
return $base . $script .'?'. $query . $options['fragment'];
}
else {
return $base . $options['fragment'];
}
}
}
?>
Функция возвращает URL с языковым префиксом (если он используется).
Это делает вызов:
language_url_rewrite($path, $options);