drupal_get_filename
includes/bootstrap.inc, строка 422
- Версии
- 5 – 6
drupal_get_filename($type, $name, $filename = NULL)
Возвращает и опционально устанавливает имя файла системного элемента (модуль, тема, и т.д.). Имя файла, который существует, кеширован или получен из базы данных, возвращается если файл существует.
Эта функция использует ключи установленных в Друпале ресурсов (модули и темы), которые могут находится в различных местах в соответствии с конфигурацией сайта. Например модуль 'foo'
может находится в одном из трех мест:
modules/foo/foo.module
sites/all/modules/foo/foo.module
sites/example.com/modules/foo/foo.module
Вызов функции drupal_get_filename('module'
, 'foo'
) возвратит одн из вышеуказанных путей в зависимости от положения модуля.
Параметры
$type
Тип элемента (напр., тема, движок темизации, модуль).
$name
The name of the item for which the filename is requested.
$filename
The filename of the item if it is to be set explicitly rather
than by consulting the database.
Возвращаемое значение
The filename of the requested item.
Код
<?php
function drupal_get_filename($type, $name, $filename = NULL) {
static $files = array();
if (!isset($files[$type])) {
$files[$type] = array();
}
if (!empty($filename) && file_exists($filename)) {
$files[$type][$name] = $filename;
}
elseif (isset($files[$type][$name])) {
// nothing
}
// Verify that we have an active database connection, before querying
// the database. This is required because this function is called both
// before we have a database connection (i.e. during installation) and
// when a database connection fails.
elseif (db_is_active() && (($file = db_result(db_query("SELECT filename FROM {system} WHERE name = '%s' AND type = '%s'", $name, $type))) && file_exists($file))) {
$files[$type][$name] = $file;
}
else {
// Fallback to searching the filesystem if the database connection is
// not established or the requested file is not found.
$config = conf_path();
$dir = (($type == 'theme_engine') ? 'themes/engines' : "${type}s");
$file = (($type == 'theme_engine') ? "$name.engine" : "$name.$type");
foreach (array("$config/$dir/$file", "$config/$dir/$name/$file", "$dir/$file", "$dir/$name/$file") as $file) {
if (file_exists($file)) {
$files[$type][$name] = $file;
break;
}
}
}
if (isset($files[$type][$name])) {
return $files[$type][$name];
}
}
?>
Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии