web-dev-qa-db-ja.com

マルチサイトにドメイン固有のCSSファイルをロードする

マルチサイトDrupal 7をインストールしています。

私はすべてのサイトに1つのテーマを使用し、それはsites/all/themesにあります。

各ドメインには、テーマを設定する独自の設定があり、CSSでクラスを指定できます。これにより、テーマを各サイト/ site1/themesにコピーしたり、それぞれにサブテーマを作成したりする必要がなくなります。オーバーヘッドが少ない。

だから私は1つの巨大なCSSファイルを持っています、それは各サイトの外観に対するすべてのCSSの微調整を含んでいます。

しかし、私は各サイトのCSSを独自のファイルに分離したいと思います。

したがって、site1.css、site2.css、site3.cssなどを使用できます。それらはすべて、sites/all/themesのテーマに配置する必要があります。

Drupalにsite2.comにあるときにsite1.cssをロードするように指示するには...

3
Joe

少し面倒ですが、カスタムモジュールで次のようなことができる場合があります。

function mymodule_preprocess_html() {
  $site = $_SERVER['HTTP_Host'];

  switch ($site) {
    case 'siteurl1':
      //Add your CSS for site 1 here with drupal_add_css
      break;
    case 'siteurl2':
      //Add your CSS for site 2 here with drupal_add_css
      break;
    case 'siteurl3':
      //Add your CSS for site 3 here with drupal_add_css
      break;

  }
}

または、テーマファイルで具体的に必要な場合は、template.php

function mytheme_preprocess_html(&$variables) {
  $site = $_SERVER['HTTP_Host'];

  switch ($site) {
    case 'siteurl1':
      //Add your CSS for site 1 here with drupal_add_css
      break;
    case 'siteurl2':
      //Add your CSS for site 2 here with drupal_add_css
      break;
    case 'siteurl3':
      //Add your CSS for site 3 here with drupal_add_css
      break;

  }
}

正直に言うと、モジュールでhook_preprocess_pageも使用できると思います。

猫とすべてのジャズに皮をむく多くの方法。

1
Chapabu

別の解決策:)

// Allow a site-specific user defined CSS file (useful for multisite installations):
// If a CSS file "local-[SITE].css" is residing in the "css" directory (beside "local.css"),
// it will be loaded after "local.css". SITE is the site's Host name, without leading "www".
// For example, for the site http://www.mydomain.tld/ the file must be called called "local-[mydomain.tld].css"
global $base_url;
$site = preg_replace("/^[^\/]+[\/]+/", '', $base_url);
$site = preg_replace("/[\/].+/", '', $site);
$site = preg_replace("/^www[^.]*[.]/", '', $site);
drupal_add_css(path_to_theme() . '/css/local-[' . $site . '].css', 'theme', 'all');
0
Rootical V.

コンテキスト+ コンテキストアセットの追加 を試しましたか?

大幅に簡単になります。ハードコーディングも必要ありません。マルチサイトではまだ試していません。

プロジェクトページから:

このモジュールは、コンテキスト内に反応を追加して、テーマ、モジュール、またはカスタムフォルダーファイルをページに追加します。

テーマにcssファイルをすばやく追加したいと思ったことはありませんか? jsファイルを1ページ(またはセクションのみ)に含めます。

このモジュールで複数のCSSファイルを簡単に使用し、テーマのコンテキストの力を利用してください!

0
chrisjlee

動的にロードされるファイルについては、多少のニーズがありました。 switchを使用する代わりに、適切なフックでこのようなことをします。

基本的に、テストする基準に基づいてファイルに名前を付けます。フックで、そのファイルが存在するかどうかを確認し、存在する場合はロードします。そうでない場合は、何もしないか、デフォルトをロードします。

このようなものが開始点になります。

function mytheme_preprocess_html (&$variables)
{
  $Host = $_SERVER["HTTP_Host"];
  $filename = "something-{$Host}.css";
  $default = "something.css";
  $path = drupal_get_path("theme", "mytheme");

  $options = array();

  if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/{$path}/css/{$filename}")) {
    drupal_add_css("{$path}/css/{$filename}", $options);
  } else {
    drupal_add_css("{$path}/css/{$default}", $options);
  }
}

あなたの場合、私はおそらくfile_existsについて少し賢くしようとし、テーマ変数として保存するために何かをするでしょう。

0
mpdonadio