web-dev-qa-db-ja.com

特定のリンクがクリックされたときに管理者ユーザーに電子メールを送信するにはどうすればよいですか?

Drupal 6で構築された新しいサイトで作業しており、ノードページで特定のアクションをプログラムする必要があります。
ユーザー向けの製品情報を表示するページがあります。情報に続いて、「今すぐ注文」というラベルの付いたボタンがあります。このボタンをクリックすると、次の2つのシナリオが考えられます。

  1. ユーザーがログインしていない場合は、ログインフォームにリダイレクトされます
  2. ユーザーがログインしている場合は、現在の製品情報とボタンをクリックしたユーザーの情報が記載された電子メールが管理者に送信されます。
1
NoOneElse

ルール モジュールはあなたのためにこれを行うことができます。

2
aerozeppelin

ボタンの送信コールバックを使用して、_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_変数を取得することもできます。

0
jordojuice

Drupal Commerce モジュールを確認するか、 Commerce Kickstart インストールプロファイルを試してください。

これは、 Rules モジュールと高度に統合された完全なコマースソリューションであるため、質問で説明した内容を簡単に定義できます。

0