drupal_lookup_path

Хочешь помочь с переводом? Это очень просто и быстро. Лишь зарегистрируйся, и можешь тут же начать переводить.

includes/path.inc, строка 45

Версии
5
drupal_lookup_path($action, $path = '')
6
drupal_lookup_path($action, $path = '', $path_language = '')

Для указанного синонима пути возвращается системный URL Drupal, если он существует. Для указанного системного URL Drupal возвращается синоним пути, если он существует. В остальных случаях возвращается FALSE.

Параметры

$action Одно из следующих значений:

  • 'wipe': удаляет кеш синонимов пути.
  • 'alias': возвращает синоним для заданного системного пути Drupal (если он существует).
  • 'source': возвращает системный URL Drupal для синонима пути (если он существует).
$path Путь, для которого нужно найти соответствующий синоним пути или системный URL.

$path_language Не обязательный код языка, для которого ищется путь. По умолчанию задаётся равным языку страницы. Если нет пути, заданного для этого языка, то делается поиск без учёта языка.

Возвращаемое значение

Либо системный путь Drupal, либо синоним пути, либо FALSE, если путь не был найден.

▾ 3 функции вызывают drupal_lookup_path()

drupal_clear_path_cache in includes/common.inc
Обновляет static-переменные, в которых содержится кеш путей для данной страницы.
drupal_get_normal_path in includes/path.inc
Возвращает системный путь, для данного синонима.
drupal_get_path_alias in includes/path.inc
Возвращает синоним, к внутреннему пути друпала.

Код

<?php
function drupal_lookup_path($action, $path = '', $path_language = '') {
  global $language;
  // $map is an array with language keys, holding arrays of Drupal paths to alias relations
  static $map = array(), $no_src = array(), $count;

  $path_language = $path_language ? $path_language : $language->language;

  // Use $count to avoid looking up paths in subsequent calls if there simply are no aliases
  if (!isset($count)) {
    $count = db_result(db_query('SELECT COUNT(pid) FROM {url_alias}'));
  }

  if ($action == 'wipe') {
    $map = array();
    $no_src = array();
    $count = NULL;
  }
  elseif ($count > 0 && $path != '') {
    if ($action == 'alias') {
      if (isset($map[$path_language][$path])) {
        return $map[$path_language][$path];
      }
      // Get the most fitting result falling back with alias without language
      $alias = db_result(db_query("SELECT dst FROM {url_alias} WHERE src = '%s' AND language IN('%s', '') ORDER BY language DESC", $path, $path_language));
      $map[$path_language][$path] = $alias;
      return $alias;
    }
    // Check $no_src for this $path in case we've already determined that there
    // isn't a path that has this alias
    elseif ($action == 'source' && !isset($no_src[$path_language][$path])) {
      // Look for the value $path within the cached $map
      $src = '';
      if (!isset($map[$path_language]) || !($src = array_search($path, $map[$path_language]))) {
        // Get the most fitting result falling back with alias without language
        if ($src = db_result(db_query("SELECT src FROM {url_alias} WHERE dst = '%s' AND language IN('%s', '') ORDER BY language DESC", $path, $path_language))) {
          $map[$path_language][$src] = $path;
        }
        else {
          // We can't record anything into $map because we do not have a valid
          // index and there is no need because we have not learned anything
          // about any Drupal path. Thus cache to $no_src.
          $no_src[$path_language][$path] = TRUE;
        }
      }
      return $src;
    }
  }

  return FALSE;
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии

Вход в систему