Симлинки для нескольких сайтов в Drupal?

Так что в основном я использую мультисайт drupal. Структура выглядит следующим образом:

mywebsite.com: -- public_html/sites/default/

sub.mywebsite.com: -- public_html/sites/sub.mywebsite.com/

Работает просто отлично (через settings.php), но проблема возникает при создании тем. Чтобы ссылаться на действительные файлы изображений, я должен использовать drupal_get_path('theme','mythemefolder'). И из-за того, что активированы «красивые URL-адреса», я должен использовать следующий код для ссылки на файлы изображений:

$uri=$_SERVER["REQUEST_URI"];
$path=drupal_get_path('theme','mythemefolder')."/";
$real_prefix=$base_path; // global from drupal, equates to "/" as drupal resides in public_html folder.
$count=substr_count($uri,"/");
for ($i=0;$i<$count;$i++) $real_prefix.="../";

Таким образом, я могу сделать следующее:

<script type="text/css">
#borderclass {
  background-image: url('<?= $real_prefix.$path.'images/a_border_image.png'; ?>');
  background-repeat: repeat-x;
  vertical-align: top;
}
</script>
<div class="borderclass" width="10px" height="10px"><!-- my image border div --></div>

Было бы гораздо предпочтительнее не делать этого. И просто укажите ссылку на локальную папку сайта...

Так что вместо этого я мог бы написать через PHP, упомянутый выше:

<div style="background-image: url('<?= $path ?>images/a_border_image.png');"></div>


Результирующий html вместо этого должен появиться внутри View Source, как:

<div style="background-image: url('themes/mythemefolder/images/a_border_image.png');"></div>

и не:

<div style="background-image: url('sites/sub.mywebsite.com/themes/mythemefolder/images/a_border_image.png');"></div>

Можно ли настроить мой сервер для выполнения такой задачи? По сути, я бы предпочел, чтобы мои клиенты даже не знали, что каталог «sites» существует на сервере при использовании их собственного домена или поддомена. Не говоря уже о представленной выше тематической проблеме.


person Jacob ONassereth    schedule 24.10.2012    source источник


Ответы (1)


Из того, что я понимаю, то, что вы пытаетесь понять, позвольте мне сказать вам, что вы обычно не так поступаете с вещами.

Модулю не нужно заглядывать в папку темы (кроме файлов шаблонов), чтобы что-то получить. Логотип, заголовки и другие материалы, связанные с темой, могут храниться в подпапке темы с именем «images» или чем-либо еще.

Папка темы будет содержать все файлы шаблонов (шаблон страницы, шаблон html, шаблон узла и т. д.), но для вас готова переменная, если вы хотите получить путь к теме.

url() в css, если стиль находится в файле, будет относиться к файлу css, а не к текущей странице. Так что здесь вы можете ввести url('images/a_border_image.png'), чтобы он относился к папке темы независимо от местоположения темы. Браузер знает, что местоположение файла css — sites/sub.mywebsite.com/themes/mythemefolder, и ваш материал url() в css будет относиться к этой папке.

Однако, если вы хотите получить правильный путь (легко), сделайте следующее:

<?php
$theme_path = drupal_get_path('theme','mythemefolder').'/';
$real_path = url($theme_path . 'images/images/a_border_image.png'); // 'sites/sub.mywebsite.com/themes/mythemefolder/images/a_border_image.png'
?>

url() будет обрабатывать базовый путь и все материал substr для вас.

person AKS    schedule 25.10.2012
comment
Полностью понимаю. Единственная причина, по которой я использую page.tpl.php (шаблон), — это динамическая генерация изображений с использованием ImageTTF через php. Таким образом, я могу кэшировать их и динамически вставлять вместо некрасивого текста. Но согласен, использовать файл style.css было бы намного проще. --------------------- Кроме того, представленное вами решение определенно проще моего. буду реализовывать. Однако мой вопрос был больше о символических ссылках Apache. Я бы предпочел полностью скрыть папку /sites/mywebsite.com/ от видимости в исходном коде. Это возможно - person Jacob ONassereth; 25.10.2012