前回の記事で、Computed Fieldモジュールのインストール、簡単な使い方を説明しましたが、今回は引き続き、Computed Fieldモジュールのもう少し詳細な使い方を説明します。
コンテンツタイプのComputed Fieldタイプのフィールド定義画面が開いている状態から説明します。
Computed CodeにPHPのコードを記述するわけですが、
他のCCKフィールドを参照したい場合、$node->フィールド名[0][‘value’]で参照します。
例えば、CCKで数値フィールドとして、num1とnum2を追加していて、その掛け算の結果をComputed Fieldで計算させたい場合、
$node_field[0]['value'] = $node->field_num1[0]['value'] * $node->field_num2[0]['value'];
とComputed Codeに記述します。
フィールドを指定するとき、配列の[0]を指定していますが、Drupalではフィールを追加するとき、同一のフィールドタイプを同じフィールド名で一度に複数作成することができます(「値の数」で個数を指定できます。デフォルトは1)。
複数作成した場合、どの値かを識別するために配列で指定することができるようになっているのです。
もし、1つしか作成していないのであれば(通常このケースが多いと思いますが)、[0]で構いません。
このComputed Fieldは、PHPで記述できますので、言ってみれば何でもできます。
例えば、他のテーブルからデータを引っ張ってきて表示するなんてこともできます。
$node_field[0]['value'] = db_result(db_query("SELECT 項目1 FROM テーブル名 WHERE 項目2=%d",$node->field_num1[0][value]));
上記は、テーブルからnum1フィールドに一致する項目1を抽出し、表示するようなケースです。
もちろん、PHPなのでIF ELSE等のの条件式も使えます。さぁ、いろいろコードを書いて試してみましょう!
Diplay Formatは、Computed Fieldで計算されたものをどのように表示させるかをPHPで記述します。
計算結果をそのまま表示するのであれば、デフォルトのコードそのまま
$display = $node_field_item['value'];
でOKです。
例えば、計算結果の数字の後ろに接尾辞として「円」を付けたいなら、
$display = $node_field_item['value'] ."円";
と記述すれだけですね。
前回記事にも書きましたが、計算結果をデータベースに格納するかどうかを指定できます
Store using the database settings belowのチェックボックスをONにすれば、データベースに保存されます。ONにしなければ、表示時に毎回計算して表示します。
計算結果をVIEWSでソートをかけて表示するような場合、データベースに格納しておく必要があります。単なる表示だけなら、ONにしなくてもOKです。