Drupal 6で構築された新しいサイトで作業しており、ノードページで特定のアクションをプログラムする必要があります。
ユーザー向けの製品情報を表示するページがあります。情報に続いて、「今すぐ注文」というラベルの付いたボタンがあります。このボタンをクリックすると、次の2つのシナリオが考えられます。
ルール モジュールはあなたのためにこれを行うことができます。
ボタンの送信コールバックを使用して、_global $user;
_で現在のユーザーを確認できます。ボタンの配列に$form['button']['#submit'] = array('mymodule_submit_callback');
を追加し、コールバックを使用して作業を行うだけです。
_function mymodule_submit_callback($form, &$form_state) {
global $user;
if ($user->uid == 0) {
// Send the user to the login page if user is anonymous.
drupal_goto('user');
}
else {
drupal_mail(); // Send an email to the administrator.
}
}
_
したがって、ここでは、ボタンをクリックしたユーザーと、_$form_state['values']
_のフォームデータにアクセスできます。この関数を使用してメールを送信する方法については、 drupal_mail APIリファレンスを確認してください。
または、リンクを提供するだけの場合は、メニューコールバックを使用することもできます。
_function mymodule_menu() {
$items['path/to/callback/%user'] = array(
'title' => t('Send mail'),
'type' => MENU_CALLBACK,
'page callback' => 'mymodule_mail_callback',
'page arguments' => array(3),
);
return $items;
}
function mymodule_mail_callback($user) {
// Check if this is an anonymous user and redirect if necessary.
if ($user->uid == 0) {
drupal_goto('user');
}
else {
drupal_mail(); // Etc.
}
}
_
次に、ノードフォームのリンクを次のように実行できます。
_function mymodule_form_alter($form, &$form_state, $form_id) {
// Ensure this is the form you want with a conditional.
global $user;
// Add your "Order now" link to the form, linking to your menu callback.
$form['mail_link'] = array('#value' => l(t('Order now'), 'path/to/callback/' . $user->uid));
return $form;
}
_
または、メニューコールバックパスからユーザーIDを除外し、メニューコールバック自体から_global $user
_変数を取得することもできます。
Drupal Commerce モジュールを確認するか、 Commerce Kickstart インストールプロファイルを試してください。
これは、 Rules モジュールと高度に統合された完全なコマースソリューションであるため、質問で説明した内容を簡単に定義できます。