Drupal 7

Drupal サイトでモジュール一覧を csv で取得する方法

今回も Drupal の開発ネタで、掲題のとおり「 Drupal サイトで利用されているモジュールの一覧を csv として取得する方法 」についてです。

個人的には、サイトの引き継ぎのときや、モジュールのアップデートをまとめてかけたいときに、モジュール一覧をスプレッドシートで管理したくなることがときどきあるのですが、そんな場合にはモジュール一覧が csv 形式で取得できるととても便利です。

2 つほど方法があるので、シンプルな方から順にご説明していきます。

  • Drush コマンドを使った方法
  • スクリプトを使った方法

Drush コマンドを使った方法

まずは Drush コマンドを使った方法をご紹介します。

Drupal のモジュール構成パターンあれこれ

今回は CMS の Drupal を使った開発に関する少しマニアックなお話です。

Drupal を使ったサイト開発において、「カスタムモジュールをどのように分割するか」というのはサイトの中長期的なメンテナンス性に大きく影響する重要なポイントです。

A というひとつの機能を実現する場合でもそのアプローチ方法は無数にあり、例えば、すべてを実装するひとつの大きなモジュールで実現することもできれば、小さく小分けにした多くのモジュールで実現することもできます。 粒度を小さくする最も極端なパターンは「 1 プラグイン実装 = 1 モジュール」「 1 フック実装 = 1 モジュール」とすることですが、これをするとモジュール数がやたらと増えてしまうので、小分けにする場合でもほどほどにするのがよいでしょう。

Drupal 7 で theme.inc で発生する Fatal error の対処方法

Drupal 7 で次のようなエラーに遭遇することがあります。

Fatal error: Unsupported operand types in /PATH/TO/DRUPAL_ROOT/includes/theme.inc on line 637

原因

問題の原因は関数 _theme_process_registry() の中で連想配列とその他の何か(たいてい NULL )の加算が行なわれていることです。 そしてそれが起こるのは hook_theme() の戻り値が正しく指定されていないことが原因です。

次のような hook_theme() を書いていると発生します。

Drupal 7 の .info ファイルの files[] とは

今回は Drupal 7 の .info ファイルの files[] についてのお話です( Drupal に興味のない方にはおもしろくないちょっとマニアックなお話です・・・)。

Drupal で開発を行う際に必ず必要となるもののひとつが .info ファイルです。 その中に記述可能な項目のひとつに files[] というものがあります。

例えば Entity モジュールの .info ファイルは以下のような内容になっています(一部抜粋)。

Drupal 7 の DrupalWebTestCase のメソッドまとめ

Drupal 7 には仮想ブラウザを使った自動テストのための DrupalWebTestCase というテストクラスがデフォルトで用意されています。

ただ、 DrupalWebTestCase には驚くほどたくさんの便利機能が備わってはいるのですが、主な利用者がコアコントリビュータの人たちにかぎられるためか、(英語で検索しても)わかりやすく解説している資料があまり見つかりません。 英語でその状況なのでいわんや日本語は・・・

せめて日本語で書かれたメソッド一覧などが手元にあると作業の捗り具合が違ってくるような気がするので、この度 DrupalWebTestCase のメソッド一覧表をかんたんに翻訳してみました。

原文はこちらです。

Drupal 7 で hook_boot() と hook_init() と hook_preprocess_html() の特徴と使いどころ

今回も Drupal 7 のマニアックなお話です。 今回は「すべてのページリクエストに対してある処理を行いたい場合、どの関数を使うべきか」の判断ポイントについてまとめてみたいと思います。

Drupal 7 では、原則すべてのページリクエストにおいて実行される関数として次の 3 つがあります。

Drupal 7 でファイルアップロード後にノードを保存しなかった場合のファイルのゆくえ

Drupal 7 でファイルフィールドからファイルをアップロードした後にノードそのものを保存しなかった場合。

ファイルは確かに一度アップロードされるのですが、ファイル参照がないのでその後 Drupal からは取得できなくなります。 じゃあそのファイルは、どこに行くのか、なのですが・・・結論としては以下のようになります。

Drupal 7 の EntityFieldQuery でオリジナルの条件指定メソッドを利用する方法

今回は Drupal 7 の開発のマニアックなお話です。

$pq = new PackageQuery();
$result = $pq->random()->range(0, 1)->execute();
$random_package_id = key($result['node']);

Drupal 7 で開発を行っていると EntityFieldQuery でオリジナルの条件指定メソッドを作成したくなることがあります。 オリジナルの条件を指定するには基本的には addTag() メソッドを利用すれば OK です。 ただこれだとコードがいかにも手続き的な感じになりわかりづらくなるので、ドメインモデルに忠実なサブクラスを作成してそこでメソッドを作成すると吉です。

ページ