Drupal で、自分の作ったフォームで自動採番する方法(CCK の Computed Field)

企業のイントラネットなどで Drupal を利用する場合、決裁文書に対してシーケンシャルに一意の採番をするユースケースを考える。単に ID を振っていくだけなのだが、ID といっても企業ごとにその仕様は決まっているだろう。Drupal ではどうしたらいいのだろう?

その答えだが、ユニークな ID をつけるくらいなら CCK にアドオンする Computed Field というモジュールを使えば Drupal にも簡単にできる。node には nid という一意な ID がデータベース中に保持されているから、それを利用すればよい。

  1. まずは ホーム > 管理セクション > コンテンツの管理 > コンテンツタイプ で自身のフォームを作る。
  2. 次にフィールドの追加で、Computed を選択する。
  3. そして Computed Field の設定画面の Computed Code: のところに、以下のコードを参考に記述する。
    $node_field[0]['value'] = sprintf('%s-%04d-%08d',
    $node->field_name1[0]['value'], // このフォーム中の field_name1 の値も組み入れることができる。
    date('Y', time()), // 西暦4桁
    $node->nid // 一意な ID (8桁)
    );
  4. Display Format: のところは、そのまま残しておく。
    $display = $node_field_item['value'];

このテクニックでの肝は、Computed Code: では

$node_filed[0]['value']

という変数に採番したい ID の値を入れてあげることと、そのユニークな ID を生成するときに、Computed Code: のところで、このフォーム内の値である field_name1 も参照できることだ(もちろん name1 という名前でフィールドを追加しておかねばならない)。name1 は、

$node->field_name1[0]['value']

という変数が対応している。

トラックバック URL: https://perltips.twinkle.cc/trackback/201
Posted on 2007-05-12 by yas |