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>

そのようなことを行うようにサーバーを構成することは可能ですか? 基本的に、独自のドメインまたはサブドメインを使用している場合、クライアントに「sites」ディレクトリがサーバー上に存在することさえ知られたくありません。上記のテーマの問題は言うまでもありません。

4

1 に答える 1

0

あなたが理解しようとしていることを私が理解していることから、これはあなたが通常物事に対処する方法ではないことを伝えさせてください.

モジュールは、何かを取得するためにテーマ (テンプレート ファイルを除く) フォルダーを参照する必要はありません。ロゴ、ヘッダー、およびその他のテーマ関連のものは、「images」などという名前のテーマのサブフォルダーに保存できます。

テーマ フォルダーにはすべてのテンプレート ファイル (ページ テンプレート、html テンプレート、ノード テンプレートなど) が含まれますが、テーマのパスを取得する場合は変数を使用できます。

css の url() は、スタイルがファイルにある場合、現在のページではなく css ファイルに相対的になります。url('images/a_border_image.png')そのため、テーマの場所に関係なく、テーマ フォルダーに対して相対的になるように入力できます。ブラウザーは、css ファイルの場所が であることを認識しており、css 内のsites/sub.mywebsite.com/themes/mythemefolderurl() はそのフォルダーに対して相対的になります。

ただし、正しいパスを(簡単に)取得したい場合は、次のようにします。

<?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 に答える