Drupal WebForm モジュール。商品注文フォームの作成
以前のレッスンで作成した商品カタログに戻りましょう。カタログは順調に埋まってきており、多かれ少なかれ正しく表示されていますが、問い合わせフォームから商品を注文するのはやや不便です――名前や商品コードをコピーして、フォームに貼り付けてメッセージを書かなければなりません。注文プロセスを簡単にするフォームを作りましょう。そのために、Drupal でフォームを作成するために使われる Webform モジュールが必要になります。フォームを通じて、商品名と数量を送信します。商品コードも必要であれば、同じ要領で渡すことができます。
Webform モジュールをダウンロードしてインストールします。
インストール後、新しいコンテンツタイプ Webform が表示されるはずです。Webform タイプの新しいノードを作成し、商品注文フォーム(またはお好みの任意の名前)と名付けます。作成すると、webform ノードの設定ページにリダイレクトされます。
商品名とその数量のために、2 つのフィールドを作成する必要があります。そのために、2 つのテキストフィールドを使います。
商品名フィールドには、%get[product] を入力します。

数量フィールドには、デフォルト値を「1」に設定します。
また、メールアドレス用のテキストフィールドと、顧客のメモや要望用のテキストエリアをもう 1 つ追加します。
%get[product] は、URL から値を取得する PHP 変数 $_GET['product'] に相当します。
フォームができました。次に、このフォームへのリンクを作成し、リンクに商品名を含む product パラメーターを付加する必要があります。このリンクを、各商品ノードの下部に表示される個別のブロックとして整形します。
以下の操作を行うには、ブロックやコンテンツに直接 PHP コードを挿入できる、組み込みの PHP filter モジュールを有効にする必要があります。このモジュールを有効にすると、PHP code という名前の新しい入力フォーマットが表示されるはずです。
新しいブロックを作成し、PHP code 入力フォーマットを選択します。次のコードをブロックのコンテンツに貼り付けます:
<a href="<?php print base_path(); ?>node/6?product=<?php print drupal_get_title(); ?>">Order this product</a>
ここで、node/6 は商品注文 webform のノードパスです。
drupal_get_title() 関数は、この場合は商品名であるノードのタイトルを返します。base_path() 関数は、サイトのベースパス(例:drupalbook.org/)を返します。次に、このブロックを Content リージョンに配置する必要があります。PHP モードで次の可視性設定を行います:
$types['tovar'] = 1;
$match = false;
if ((arg(0) == 'node') && is_numeric(arg(1))) {
$node = node_load(arg(1));
$match = isset($types[$node->type]);
}
return $match;
ここで、tovar はコンテンツタイプ「商品」のマシン名です。
これで商品注文フォームの完成です。