CMSのポテンシャルを引き出す─MODxで作る商用サイト

第10回MODx Revolutionとコンテキスト

はじめに

最近は公私共にやや忙しく、なかみつ園のサイト更新が滞っている日々が続いていますが、商品自体は自信を持って熊本から提供しております。

真夏日の続くこの時期におすすめなのは、やはり冷水茶です。麦茶やペットボトルとは一味違った涼しさを体感できますので、まだ未体験の方は、ぜひお試しください。

さて、前回の記事ではMODxのバックエンドであるMySQLの構造についてお話ししましたが、その中で、コンテキストや語彙など、さまざまな意味不明な用語が出てきてしまいましたので、今回はそのひとつである「コンテキスト」について解説したいと思います。

コンテキストとは、MODxレベルで作成可能なバーチャルドメインのようなものです。たとえば商用サイトを構築する上で、独自ドメインやサブドメインを用いたキャンペーンサイトを立てることがあります。最近では一時期に比べると減ってきた印象が強いですが、数年前は映画の新作が発表されるたびに、キャンペーン用の独自ドメインサイトが作成されていました。

このようなキャンペーンサイトの多くは短期プロジェクトですが、ダウンタイムを極力避けるには冗長構成は必須ですし、ドメインごとにクラウドを利用する手もあります。または、もしすでに冗長構成に対応したウェブサーバやデータベースサーバをお持ちの場合は、それを母艦としてApacheのインスタンスを増やしていく考え方もあります。

Apacheはバーチャルホストをサポートしているため、MODxを異なったディレクトリに複数インストールし、MySQLデータベースも複数作成することで、多くのサイトを同一ホスト内でホスティングすることができます。しかし、インスタンス間でバージョンを維持したり、インスタンスの数だけデータベースを作成しメンテナンスする必要があったりと、拡張性は高いものの、

「多くのキャンペーンサイトは作りたいが、なるべく簡単に済ませたい」

という用途にはいまいち向きません。このような用途にピッタリなのがMODx Revolutionのコンテキストという機能です。コンテキストを活用すれば、Apacheの設定を変更することなく、ドメインやサブドメインごとに別のコンテンツを表示させることができ、複数サイト構築の手間を大幅に軽減させることができます。

さっそく設定してみよう

これまで、MODxの練習用に http://www.example.com/ というURLを使用してきましたが、今回はコンテキストの練習用に http://www.example.net/ というアドレスを使用します。example.comやexample.netとはサンプル用のドメインですので、筆者の検証環境では、ブラウザを実行しているクライアント上の/etc/hostsに

MODxサーバのIPアドレス	www.example.com	 www.example.net

といった設定を行っています。

まずは、コンテキストを設定しないデフォルトの状態で、ブラウザから「http://www.example.com/」⁠http://www.example.net/」を叩いた場合、これまで通りのコンテンツが表示されます。

図1 ⁠http://www.example.net」を叩いてもこれまでの画面が表示される
図1 「http://www.example.net」を叩いてもこれまでの画面が表示される

では、ドメインごとに別々の画面を表示させるため、管理画面よりコンテキストの設定を行います。⁠システム⁠⁠→⁠コンテキスト」より、⁠新規作成」をクリックし、example.net用のコンテキストを作成します。

図2 example.net用のコンテキストを作成
図2 example.net用のコンテキストを作成

コンテキストの作成が終わったら、左側のメニューより「ツリーの再描画」をクリックし、画面をリフレッシュさせてください。同メニュー中に「example.net」というコンテキストが加わります。

図3 example.net用のコンテキストが作成された
図3 example.net用のコンテキストが作成された

では、このコンテキスト中にトップページとなるリソースを作成してみます。新しく作成したコンテキストを右クリックし、⁠作成」よりいつものようにリソースを作成してみてください。

図4 新コンテキスト内にリソースを作成
図4 新コンテキスト内にリソースを作成

このようにコンテンツを作成しただけでは、MODxが何をトリガーにそれぞれのコンテキストを表示するか判断することができませんので、これより

  • http://www.example.net/が叩かれた場合にはexample.netコンテキストをコールする
  • さらに、デフォルトでリソースID=17のコンテンツを表示する

という最低限の設定を行います。一番目の設定は、CMS上ではなく、sshなどのコンソール上から行います。シェルアクセスが許可されていない場合には、いったんファイルをダウンロードした上で編集、再度FTPなどでアップロードするようにしてください。

では、viなどのエディタを使って/var/www/html/index.phpを編集し、77行目付近の

$modx->initialize('web');

という定義を次の内容に置き換えます。

switch(strtolower(MODX_HTTP_HOST)) { 
 case 'example.net': 
 case 'www.example.net': 
   $modx->initialize('example.net'); 
   break; 
 default: 
   $modx->initialize('web'); 
   break; 
 }

これにより、MODxはHTTPヘッダ中のHTTP_HOSTを参照し、値がexample.netやwww.example.netであった場合には、example.netというコンテキストをコール、それ以外の場合はデフォルトであるwebというコンテキストをコールします。

次に、⁠デフォルトでどのリソースを表示させるか」という設定は管理画面上で行います。画面左側のメニューよりexample.netのコンテキストを右クリックし、⁠コンテキストの編集」より「コンテキスト設定」に進み、⁠site_start」というキーを作成します。筆者の環境ではトップページ用リソースのIDが17となっているため、ここでは17という値を設定しています。

図5 デフォルトのリソース設定(⁠⁠site_start」キーの作成)
図5 デフォルトのリソース設定(「site_start」キーの作成)

キーの追加が終わったら、ブラウザより.comと.netの両方のアドレスを叩いて、挙動を確認してみてください。サイトごとに違ったコンテンツが表示されれば成功です。

図6 http://www.example.com/を表示した場合
図6 http://www.example.com/を表示した場合
図7 http://www.example.net/を表示した場合
図7 http://www.example.net/を表示した場合

今回は両方のサイトで同じテンプレートを使っているため、見た目の違いがわかりにくくなっていますが、実際には別々のテンプレート、別々のスニペットなどを使うようにすれば、管理上の手間をそれほど増やすことなく、さまざまなサイトを簡単に構築することができます。

コンテキストごとに管理者を割り当てる

MODx Revolutionでは「example.comのコンテンツを管理するのはAさん、example.netを管理するのはBさん」という設定を実現することもできます。

今回は、次のようなユーザーを作成してみましょう。

ユーザー名権限
admin(すでに存在)すべて
dotcomexample.comのコンテンツの編集
dotnetexample.netのコンテンツの編集

まずは、⁠権限管理⁠⁠→⁠ユーザー管理」より、dotcom、dotnetという2人のユーザーを作成します。作成時、⁠有効」にチェックが付いていることを確認してください。

ユーザーの作成が完了したら、ユーザーをグループに結びつけるため、⁠権限管理⁠⁠→⁠ユーザーグループとロールの管理」より、⁠dotcom-ug」⁠dotnet-ug」という2つのユーザーグループを作成し、各ユーザーグループを右クリックしてユーザーをグループに加えます。このとき、ロール(役割)「Super User」としてください。

図8 ユーザー、ユーザーグループを作成
図8 ユーザー、ユーザーグループを作成

次に、各ユーザーグループにアクセス権限を割り当てます。ユーザーグループを右クリック、⁠ユーザーグループを編集」に進み、⁠コンテキストのアクセス」より、⁠dotcom-ug」にはデフォルトである「web⁠⁠、⁠dotnet-ug」には先ほど作成した「example.net」というコンテキストを追加します。また、管理画面アクセスを許可させるため、両者に「mgr」というデフォルトのコンテキストを追加するのを忘れないでください。

設定が完了したら、別のブラウザなどを立ち上げて「dotnet」「dotcom」というユーザーでログインしてみてください。これまでと異なり、制限された環境でコンテンツを作成することができるようになります。もしうまく行かない場合は、⁠権限管理」の中のリロードや初期化などを試してみてください。

図9 dotnetユーザーで管理画面にアクセスした場合
図9 dotnetユーザーで管理画面にアクセスした場合

これを応用すれば、⁠あるユーザーはexample.netのコンテキストにリードオンリーでアクセス」など、もう少し進んだ設定も可能になります。ユーザーや権限の設定は奥が深いため、少し分かりにくい部分もあるかもしれませんが、いろいろと試してみてください。例のごとく、事前にバックアップをとっておけば、何をしても安心です。

最後に

今回紹介したコンテキストという機能はMODx Revolutionの目玉機能のひとつで、環境によってはこれまでのオペレーションを大幅に簡素化することができます。

これまで、ウェブサーバ上でドメインごとにApacheのバーチャルホストを設定、コンテンツ管理者ごとにドキュメントルートやパスワードを発行されて「面倒だなぁ」と感じている方がいらっしゃれば、ぜひMODxのコンテキストを試してみてください。

おすすめ記事

記事・ニュース一覧