CocoaSpace

Drupalでウェブサイト構築

シンプルなカスタムモジュールの作成

Jan 27 2010
Drupalバージョン: 
モジュール: 

モジュールの作成は意外に簡単!

モジュールの作成というと、「デベロッパーの方だけの話かな?」と思う方が多いかもしれません。実際私も最初は「なんか難しそう」と思って尻込みしてしまいそうでした。でも、Drupalでは簡単に独自のモジュールを作成できるように設計されていますので、慣れていない方も大丈夫です!なるほどdrupal.orgのモジュールのダウンロードセクションにあるような、機能満載のモジュールを作成するのは素人には難しいでしょう。そういったものではなく、例えば、サイトのフォームやメニューにほんの少しの変更を加え、自分の好みの表示や動作に調整しようとするときにも、どうしても独自のシンプルなモジュールを作成しなければならないことがあります。drupal.orgのコミュニティメンバーによるフォーラムスレッドでも、「その機能を実装するには、自分のカスタムモジュールにこのコードを加えるとできますよ。・・・」などと書いてあることが多いですが、そんなときには本投稿で作成するようなモジュールの枠組みの中に、そのコードを書き込むだけでOKの場合がほとんどです。というわけで、この投稿ではDrupal 6.x用の、functionを書き込む前の空っぽのモジュールを作成する方法をご紹介します。

モジュール名の注意点

もしもご自分のサイトにcustomというテーマがあったら、同じ名前のcustomというモジュールは作成しないでください。2つが衝突してDrupalがおかしな挙動をするそうです。それと、モジュール名(やテーマ名)を2語に分ける場合、custom_module.infoやcustom_module.moduleのようにアンダースコアを用いるようにしてください。custom-module.infoのようにハイフンを用いるのはやめましょう。2010customなど、モジュール名を数字で始めるのも良くないようです。

必要なファイル

customというモジュールを作成すると仮定します。モジュールを作成するにはsites/all(またはexample.com)/modulesディレクトリ内にcustomというディレクトリを作成し、そのcustomディレクトリ内にcustom.infoファイルとcustom.moduleファイルの2つを作成する必要があります(下図参照)。

customモジュールのディレクトリ、ファイルの配置図customモジュールのディレクトリ、ファイルの配置図

infoファイル

infoファイル内には、下のname、description、coreの3項目が必須です。nameとdescriptionはお好きなように変更してください。

このinfoファイルの書式はiniフォーマットです(PHP: parse_ini_file - Manual参照)。

name = Custom
description = My custom module.
core = 6.x

その他、dependencies(他のモジュールへの依存)、package(モジュールのグループ)など任意に設定することができます。詳しくは下記ページをご参照ください。 参考ページ: Telling Drupal about your module | drupal.org

moduleファイル

<?phpの後に独自のfunctionを書き込んでいきます。?>タグはCoding standardsに従って、記載しないようにしてください。Coding standardsのページにはその他にもコーディングの法則が書いてありますので、参考にしてください。Coderモジュールをインストールすると、Coding standardsに従ってコードをチェックし、訂正すべき箇所を指摘してくれます。また、Drupal 5.x用のモジュールを6.x用のモジュールにアップデートする際にも、どのhookをどのように修正すればよいかなどを教えてくれたりもします。是非試していただきたいオススメのモジュールです。

モジュールの有効化

後はexample.com/admin/build/modulesでモジュールを有効化するだけです。モジュールを有効化してもmoduleファイル内にコードが書いてないのでまったく意味がないのですが、Drupalはここで作成したcustomモジュールを参照してくれています。試しに下のコードをcustom.moduleファイルに書き込んでください。

/**
 * Implementation of hook_menu_alter().
 */
function custom_menu_alter(&$items) {
  unset($items['user/password']);
}

キャッシュをクリアした後、example.com/userに移動して、パスワードの再発行のタブがなくなっていたら成功です。

テーマのtemplate.phpファイルでは対応しきれない、モジュールでなければ使えないhookは、このようにmoduleファイルにコードを追加していくことで使用可能です。詳細な情報が欲しい方は、英語ですが下のリンクをご参照ください。

参考ページ:
Module developer's guide | drupal.org

コメントを追加

Powered by Drupal + Linux