![](https://habrastorage.org/storage1/14d4af5b/dca8cdf2/a7f592fa/e977a2f5.jpg)
このトピックがハブで実質的にカバーされていないことは私には奇妙に思えたので、この状況を少し修正しようとします。
私はアングリシズムの支持者ではありませんが、私たちの言語では同様の用語さえありません。 要するに、マルチサイトは、さまざまなサイトでエンジンファイルを使用する機能として定義できます。 私はこの言葉の語源を理解しませんが、その出現がDrupalに関連していたことをあえて示唆します。 multisitingの最も一般的な例の1つは、複数のサイトでの共通ユーザーデータベースの使用です。 Drupalでは、単純化と利便性の観点からmultisitingが魅力的に実装されています。
参加する代わりに
私の意見では、Drupalはあなたが望むならとても素敵な小さなものを眩惑させることができる粘土です。 Drupalでの私の経験はそれほど素晴らしいものではありませんが、これまでのところ、その助けでは解決できない問題に遭遇することはありませんでした。 開発者の知識/動機/経験のレベルが小さい場合、この粘土はほんの少しの既知のd死しない塊を生成する可能性が高いことを認めなければなりませんが、これはまったくそれについてではありません。
これはどのように行われますか?
Drupalフォルダー構造の構築の論理的リテラシーに注意する必要があります。 カーネルはネイティブコードから分離されており、すべてのコードはマークアップから分離されています。 Multisitingは、「すぐに使える」Drupalによって提供され、ルートディレクトリにはサイトフォルダーがあります。 このフォルダには、メインサイトと連動するサイトの設定ファイルが含まれている必要があります。 Drupalを少なくとも1回インストールしたことがある人は、Drupalがフォルダーにsettings.phpファイルを作成する必要があることを知っています。
sites/default
この場合、「デフォルト」フォルダの名前は、「メイン」サイトに属することを決定します。
multisitingを整理する必要がある場合は、「default」の隣にドメイン名のフォルダーが作成され、sites / all / default / default.settings.phpのsettings.phpファイルがそこにコピーされます
sites/first.example.ru/settings.php
sites/second.example.ru/settings.php
.
.
.
sites/n.example.ru/settings.php
このサイトの特定の設定を示します。 指定したサイトでのみ使用可能にする必要があるテーマとモジュールは、適切なフォルダーに配置されます
sites/first.example.ru/themes/
sites/first.example.ru/modules/
フォルダーにあるテーマとモジュール
sites/all
マルチサイトバンドルのすべてのサイトで利用できます。 したがって、更新時間を大幅に短縮できます。
重要! バンドル内のすべてのサイトのドキュメントルートには、Drupalがインストールされているルートディレクトリ(index.phpがある場所)が必要です。 このフォルダへのシンボリックリンクのバージョンも可能です。
フォルダーに名前を付ける方法は?
settings.phpファイルの検索中、Drupalはサブドメインの名前を左から右へ、サブフォルダーの名前を右から左へ「切り捨て」ます。 例から、これが何を意味するかが明らかになるはずです。
私たちがインストールしなければならないサイトとしましょう
www.example.ru/mysite/test
Drupalは、指定された順序で次のフォルダーでsettings.phpファイルを検索します。
1. sites/www.example.ru.mysite.test
2. sites/example.ru.mysite.test
3. sites/ru.mysite.test
4. sites/www.example.ru.mysite
5. sites/example.ru.mysite
6. sites/ru.mysite
7. sites/www.example.ru
8. sites/example.ru
9. sites/ru
10. sites/default
最初に見つかったファイルが使用され、残りは無視されます。 この例は、example.ruサイトが機能するためには、settings.phpを配置するだけで十分であることを示しています
sites/example.ru/settings.php
そしてそれを複製する必要はありません
sites/www.example.ru/settings.php
なぜなら example.ruを介して処理すると、 www.example.ruを処理すると、 Drupalは同じファイルを見つけます。
標準以外のポートにインストールされたサイトをバインドする必要がある場合、ポートは追加のサブドメインとして示されます。 だから、サイトのために
www.example.ru:8080/mysite/test/
settings.phpファイルのあるフォルダーは
sites/8080.www.example.ru.mysite.test
サブフォルダにインストールされているサイトをリンクすることはお勧めしませんが、自分で追加します。 それらの正しい機能は保証されていません(ドキュメントに記載されています)。 もちろん、 www.example.ruのドキュメントルートにwww.example.ru.mysiteのシンボリックリンクドキュメントルートを作成するなど、エラーを修正するための推奨事項があります。
( document root www.example.ru)
ln -s . mysite
しかし、これは万能薬ではなく、絶対に必要な場合にのみこの方法を選択する必要があります。
settings.phpで何を変更しますか?
1.完全に独立したサイトを使用する場合
次に、$ db_urlのsettings.phpで、別のデータベースを指定します。 ユーザーも異なる場合があります。 ここでのプレフィックスの有無は何の違いもありませんが、サイトデータベースへのプレフィックスの割り当ては、大きなものではありませんが、セキュリティトリビュートであり、無視すべきではありません。
2.共通のデータベースまたは共有テーブルを持つサイトを使用する場合
a。 サイトが同じデータベースを使用する場合
その後、一意のテーブルには異なるプレフィックスを使用し、一般的なテーブルには同じプレフィックスを使用する必要があります。 たとえば、common_は、共有ユーザーテーブルとプロファイルテーブルのプレフィックスとして、default_はメインサイトの独自のデータベーステーブルに、first_はサイトfirst.example.ruの独自のデータベーステーブルとして考えられます。
sites / first.ru / settings.phpに次のように記述します。
// $db_prefix = '';
$db_prefix = array(
"default" => "first_",
"users" => "common_",
"sessions" => "common_",
"authmap" => "common_",
"profile_fields" => "common_",
"profile_values" => "common_",
);
サイト内/デフォルト/settings.php
// $db_prefix = '';
$db_prefix = array(
"default" => "default_",
"users" => "common_",
"sessions" => "common_",
"authmap" => "common_",
"profile_fields" => "common_",
"profile_values" => "common_",
);
したがって、サイトfirst.example.ruは、サイトexample.ruでユーザーとそのプロファイルの共通データベースを使用します。 ただし、この方法で関与しないでください。 平均して、各新しいサイトを組み合わせて使用すると、テーブルの数は60〜70増えます。 10サイトでデータベースに何が起こるかを計算するのは簡単です。 これに、1つのデータベースの正しい操作に対するすべてのサイトの依存関係を追加します。
b。 サイトが異なるデータベースといくつかの一般的なテーブルを使用する場合。
使用する必要があるとしましょう:
- 一般的なビュー(viewsモジュールによって作成された)
- example.ruおよびfisrt.example.ruサイトのユーザーとそのプロファイルの共通データベース
そして、それを仮定:
- example.ruのDB名-例
- example.ruのテーブルプレフィックスはexample_です。
- first_example.ruのDB名-最初
- fisrt.example.ruのテーブルテーブルプレフィックスはfirst_です。
sites / first.ru / settings.phpに次のように記述します。
// $db_prefix = '';
$db_prefix = array(
"default" => "first_",
"users" => "example.example_",
"sessions" => "example.example_",
"authmap" => "example.example_",
"profile_fields" => "example.example_",
"profile_values" => "example.example_",
"views_display" => "example.example_",
"views_view" => "example.example_",
);
サイト内/デフォルト/settings.php
$db_prefix = 'example_';
このようにして、first.example.ruの場合、ビューとユーザーに関するデータはサンプルデータベースから取得され、残りはすべてexample.ruデータベースから取得されます
重要! ここのドットは、Drupalによってデータベース名の終わりとして解釈されるため、ドットを含むプレフィックスを作成しないでください。
おわりに
Drupalマルチサイトは設定が非常に簡単で、安定して動作します。 このタスクを達成するために、views_display、views_view、blocks、blocks_rolesテーブルを結合する必要があるという事実にもかかわらず、私は問題に対処する必要がありませんでした。必要なものを慎重に組み合わせてください。
一方、マックスキリレンコは 、「共通テーブルでのマルチサイトニグは、Drupalの文書化されていない機能であり、利点よりも問題の方が多い」 と考えています。 しかし、彼の記事はDrupal 5に関するものであり、おそらくそれが理由でしょう。
これに関するコメントを待っています。
トピックに関する2つの便利なモジュール:
マルチサイト検索 - 多数のサイトのコンテンツにインデックスを付けて、それらを検索できます
マルチサイトログイン -異なるドメイン上であっても、すべてのサイトの承認をまとめて保存できます
UPD: psiteiliは、/ sites / allフォルダー内のモジュールを更新するときは注意することをお勧めします(このフォルダーを使用してすべてのドメインでupdate.phpを実行してください)。
UPD:最初に、Drupalはsites / example.ru / modulesでモジュールを探し、その後/ sites / all / modulesでモジュールを探します
UPD: drush andyceoを介して更新するためのスクリプトを作成しました
UPD: shubaは Drupal 7の有用な革新を説明しています