Я хочу написать модуль drupal, который обслуживает статические файлы, но я хочу, чтобы он обслуживал их с адреса www.mydomain.com/moduleName/fileName, где FileName может быть чем угодно (например, javascript / app.js или photos / imageA). .jpg). Я не хочу копировать файлы в это фактическое местоположение, если это возможно, в идеале я хочу, чтобы модуль просто связывал эти два местоположения.
Я попытался использовать меню с обратным вызовом, который выглядит как
$ numargs = func_num_args ();
$ arg_list = func_get_args ();
$fileName = drupal_get_path('module', 'moduleName') . "/files";
for ($i = 0; $i < $numargs; $i++) {
$fileName = $fileName . "/" . $arg_list[$i];
}
if ($numargs == 0) {
$fileName = drupal_get_path('module', 'moduleName') . "/files/index.html";
}
if (file_exists($fileName)) {
header('Content-Type: ' . getFileMimeType($fileName));
$handle = fopen($fileName, "r");
$contents = fread($handle, filesize($fileName));
fclose($handle);
echo $contents;
} else {
drupal_json_output(array('exists' => file_exists($fileName), 'fileName' => $fileName));
}
drupal_exit();
Где getFileMimeType выглядит как
function rcsarooms_getFileMimeType($file) {
$extension = pathinfo($file, PATHINFO_EXTENSION);
if ($extension == "html" || $extension == "md") {
$type = "text/html; charset=utf-8";
} else if ($extension == "css") {
$type = "text/css";
} else if ($extension == "js") {
$type = "application/x-javascript";
} else if ($extension == "json") {
$type = "application/json";
} else if ($extension == "ico") {
$type = "image/x-icon";
} else if ($extension == "png") {
$type = "image/png";
} else {
$type = "charset=UTF-8";
echo $extension;
drupal_exit();
return;
}
return $type;
}
но, хотя это прекрасно работает для любых текстовых файлов, оно полностью не работает для любых двоичных файлов (например, png, ico и т. Д.). Мне также не нравится указывать тип mime таким образом.
Вопрос в том, может ли custom_url_rewrite делать то, что мне нужно, и если да, что должна иметь в себе функция перезаписи URL-адреса и куда она должна идти?
Я пробовал это, но, похоже, это не работает:
function custom_url_rewrite($op, $result, $path) {
if (strpos($result, "data") === false) {
if ($op == 'alias') {
if (preg_match('|^' . drupal_get_path('module', 'myModule') . '/files/(.*)|', $path, $matches)) {
return 'myModule/' . $matches[1];
}
}
if ($op == 'source') {
if (preg_match('|^myModule/(.*)|', $path, $matches)) {
return drupal_get_path('module', 'myModule') . '/files/'.$matches[1];
}
}
}
return $result;
}