アイキャッチ画像: デスクの上でパソコンを使用している

本日は手短に Drupal (ドルーパル)で .inc ファイルをインクルードする方法をご紹介できればと思います。

まずは前提から見ていきます。

前提

本記事では、 Drupal のコアのバージョン 7.x を対象とし、 想定読者は PHP 開発の経験のある方としています。

  • Drupal のバージョン: Drupal 7
  • 想定読者: PHP 開発経験のある Drupal 初心者の方

.inc ファイルをインクルードする方法

一般に .inc ファイルをインクルードする方法には大きく 2 通りの方法があります。

  1. 無条件に読み込む方法
  2. 実行時に条件によって読み込む方法

以下順番にご紹介していきます。

1. 無条件に常に読み込む方法

無条件に読み込みたい場合には .info ファイルを利用します。 CSS や JavaScript ファイルを読み込むときと同じようなやり方で files フィールドにファイル名を与えれば OK です。

umimodule.info:

files[] = umimodule.additional.inc    

これで umimodule モジュールが有効な間は umimodule.additional.inc が自動的に読み込まれる形になります。

たとえば umimodule.additional.inc の中に次のようなコードを書くと、定義されたクラス UmiModuleMessage が .module 他のファイルの中で使えるようになります。

umimodule.additional.inc:

class UmiModuleMessage {
  public static function umiinclude_set_message() {
    drupal_set_message('This is a function in additional .inc file.');
  }
}

たとえば hook_init() の中で umiinclude_set_message()呼び出してみると以下の画像のとおりのメッセージがページに表示されるようになります。

umimodule.module:

function umimodule_init() {
  UmiModuleMessage::umiinclude_set_message();
}

ただし、こちらのやり方で読み込めるのはクラスとインタフェースのみに限られています。 通常の関数などは読み込むことができないため注意してください。

続いて実行時に読み込む方法です。

2. 実行時に条件によって読み込む方法

こちらは関数内で都度ファイル名を指定して読み込む方法です。 Drupal で CSS や JavaScript を読み込むときの drupal_get_css()drupal_get_js() とよく似た関数を使います。

以下のコードを使うと、ファイル umiinclude.extra.inc をログインユーザからのリクエスト時のみ読み込む形になります。

umimodule.module:

umimodule_init() {
  // ログインユーザに対してのみ使用するモジュールを読み込む
  if (user_is_logged_in())  {
    module_load_include('inc', 'umiinclude', 'umiinclude.extra');
  }
}

こちらの場合は 1 つめの方法と異なり、クラスやインタフェースだけでなく定数や関数も利用することができます。 PHP コードで自由に読み込む条件も設定できるので、こちらはより自由度の高い方法ということができるでしょう。

以上です。

端的にではありますが、今回は Drupal 7 で .inc ファイルを読み込む方法をご紹介しました。 この他にも hook_menu() 内で読み込む方法やファイル名を特定のパターンで命名する方法などさまざまな方法が用意されていますが、基本となるのは今回取り上げた 2 つの方法かと思います。 モジュール読み込みの方法やルール、たとえば「 .info ファイルで読み込む場合にはクラスやインタフェースしかインクルードされない」といったところは単純に知っているか知っていないかの世界というところもありますので、開発を行う場合はぜひ早いうちに押さえていきたいところです。

.info ファイルにはこの他にもさまざまな機能が備わっているので、興味のある方は次の記事などもご覧になってみてください。


共に働く新しい仲間を
募集しています

スタジオ・ウミは「Drupal」に特化したサービスを提供する Drupal のエキスパートチーム。
フルリモート&フレックス制だから、働く場所を選ばず時間の使い方も自由です。
そんなワークライフバランスの整った環境で、当ブログに書かれているような
様々な技術を共に学びながら、Drupalサイト開発に携わってみたい方を募集しています。
まずはお話だけでも大歓迎!ぜひお気軽にご連絡ください。