1

所以基本上我使用的是drupal多站点。结构如下:

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

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

工作得很好(通过settings.php),但问题出现在主题化时。为了引用有效的图像文件,我必须使用drupal_get_path('theme','mythemefolder') 并且由于激活了“漂亮的网址”,我必须使用以下代码来引用图像文件:

$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>

是否可以配置我的服务器来做这样的事情?基本上,我宁愿让我的客户在使用他们自己的域或子域时甚至不知道服务器上存在“站点”目录。更不用说上面提出的主题问题了。

4

1 回答 1

0

根据我的理解,您试图理解的内容,让我告诉您,这不是您通常处理事情的方式。

模块不需要查看主题(模板文件除外)文件夹即可获取任何内容。徽标、标题和其他与主题相关的内容可以存储在主题的名为“images”或其他任何内容的子文件夹中。

主题文件夹将包含所有模板文件(页面模板、html 模板、节点模板等),但如果您想获取主题的路径,则可以使用一个变量。

css 中的 url(),如果样式在文件中,将相对于 css 文件 - 而不是当前页面。这就是您可以输入的位置,url('images/a_border_image.png')因此无论主题的位置如何,它都将相对于主题文件夹。浏览器知道 css 文件的位置是sites/sub.mywebsite.com/themes/mythemefolder,并且 css 中的 url() 内容将相对于文件夹。

但是,如果您想(轻松)获得正确的路径,请执行以下操作:

<?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 内容。

于 2012-10-25T00:04:25.503 回答