モジュール開発を行わないDrupalカスタマイズin work

 
date:2011.05.30   posted by:asai
 

浅井です。

ホワイトハウスの公式サイトの管理システムにも採用されているオープンソースCMSの「Drupal」。
拡張性と自由度が高く、HTMLを全く知らない人からウェブデザイナーなどのプロにまで幅広く利用されています。
また、豊富に開発されているモジュールと活発な公式コミュニティもdrupalの魅力の一つです。

弊社ではCMSとしてwordpressを使用する事が多いのですが、今回はdrupalについての記事を書かせていただこうと思います。
モジュール開発の方法などは書籍やネットで割と簡単に情報が手に入るので本稿では『モジュール開発を行わないDrupalのカスタマイズ方法』についてのTipsを掲載しています。言い換えると、『Drupalの機能を使いつつ、独立したシステムの作成方法』です。
wordpressのテンプレート編集に慣れた方には、モジュール開発をしない方が取っ付き易いのではないかと思います。

※本稿の内容は全てDrupal6.22にて検証した情報となります。

 

■Drupal機能へのアクセス

Drupalとは独立したPHPからDrupalの機能へアクセスする場合、以下の記述が必要になります。

include_once ‘includes/bootstrap.inc’;
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

アクセスする機能を細かく制限したい場合はオフィシャルサイトのドキュメントに詳しくまとめられています。
http://api.drupal.org/api/drupal/includes–bootstrap.inc/6

■管理者以外がアクセス出来ないように

Drupal機能へのアクセスを許可された場合、ユーザー変数($user)にも当然ながらアクセス可能です。
ユーザー変数($user)にはログイン中のユーザーの情報が格納されているので、

if( $user->uid == 1){
}
else{
	exit();
}

のようにして管理者以外がアクセスした場合、exitしてしまえば問題ありません。

■usersテーブル

drupalのモジュールを使わず外部からユーザーを追加する場合、直接DBにユーザー情報を格納することになります。
ユーザー情報の格納先はusersテーブルですが、その中の「data」フィールドとは何なのか疑問に感じる人は多いと思います。

dataフィールドの中身はユーザー情報の保存時に使われるのですが、とりあえず以下の作業を行えば登録上の問題はありません。

まず、drupalのデフォルトの機能を使ってユーザーを作成します。
次に、作成したユーザーの情報をDBから確認し、dataフィールドの中身をコピーしますがその際、

a:1:{s:13:"form_build_id";s:37:"form-705fadeca0b349360a7d6e648de6744c";}

のようなフォーマットになっていると思います。ここで重要なのは、

705fadeca0b349360a7d6e648de6744c

の部分です。この部分は同じusersテーブルのcreatedフィールドとの整合性のチェックに使われるのですが、

md5(uniqid(mt_rand(), TRUE))

このようにして生成すればOKです。

■小ネタ

●usersテーブルに存在するuid=0の空ユーザー

インストール時にuid=0の空ユーザーが勝手に生成されます。一見不要に見えるこのユーザーですが、絶対に消してはいけません。
このユーザーを消すと登録/更新したnodeへのアクセスが出来なくなってしまいます。

●ページごとに異なるテンプレートファイルを適用

例えば、トップページだけ異なるレイアウトを適用したい場合、テンプレート変数の「$is_front」を使う方法と、トップページ用のテンプレートファイルを作成するという2つの方法があります。

それぞれにメリットはありますが、今回はより応用方法のある後者について解説します。

themesディレクトリの中には「page.tpl.php」というファイルが存在します。
このファイルの名前を変更することによってページごとに異なるテンプレートファイルを適用することが可能です。トップページの場合は、「page-front.tpl.php」とリネームすることによってトップページ用のテンプレートファイルになります。

その他のページについても「page.tpl.php」をリネームすることで専用のテンプレートファイルとすることが可能です。
基本的にファイル名はパスに準拠します。例えば、

パス「abc/123」以下に表示されるページに適用させたい場合、ファイル名は「page-abc-123.tpl.php」となり、パス「abc/123/aiu」以下に表示されるページに適用させたい場合は「page-abc-123-aiu.tpl.php」のような形式です。
適用されるテンプレートはより下層を指定しているものが優先されます。(この例なら「page-abc-123-aiu.tpl.php」>「page-abc-123.tpl.php」の順に優先順位が高く「page.tpl.php」の優先順位は最も低い)

 
Copyright © TheDesignium inc. powered by WordPress & mootools.
Relative Keyword|none