web-dev-qa-db-ja.com

URLをクリックしてCCKフィールドの値を変更する-可能ですか?お勧めですか?

クリックするとCCKフィールド値の変更などのアクションを実行するユーザー通知メールで送信されるURLを作成することが可能/推奨されるかどうかを判断しようとしています。

たとえば、問題追跡システムがあるとします。 1週間、1つの問題に関するアクティビティがないため、システムは、問題を投稿した人に、問題がクローズされたと見なすかどうかを尋ねる電子メールを送信します。その場合は、ここをクリックして問題を解決してください。

電子メールの「問題を閉じる」リンクをクリックすると、問題のCCKステータスフィールドが「クローズ」に変更され、サイトの任意のページに移動します。

そのようなことは実行可能ですか?

In Drupal 6?

1
chriscaple

私は多かれ少なかれ私が望むことをするモジュールを見つけました-

http://drupal.org/project/node_update_from_url

ユーザーが自分のコンテンツを編集する権限を持っている場合、ユーザーがクリックして任意のCCKフィールドを更新できるURLを作成できます。ユーザーを確認ページに移動し、そこで「更新」をクリックする必要があります...その後、アクションが実行されます。

私はそれをテストしているだけです。動作しているようです。おそらく今のところ私の要件に合うはずです。だが! -他の答えはかなり興味深いので、おそらくそれらも調べます。

0
chriscaple

それは実行可能ですが、お勧めできません。 URLを介してデータを変更するためのDrupalの標準:1)_GET変数(または単純なURLパス)を使用して_access_dataに2)_POST変数を使用してデータを変更する

_POSTの使用に加えて、DrupalのForm APIを使用して、トークンとフィールドが生成および検証されるようにする必要があります。

URL(リンクなど)を介してデータを変更するために実行できるオプションは次のとおりです。1)URLにトークンを追加して、一度だけ使用されることを検証します(またはその他の検証が必要です)2)ユーザーがログインしていることを確認します(おそらく、ユーザーが所有者であることを確認しますそのチケットのなど)これがお役に立てば幸いです。

1
Chris

非アクティブの1週間後にメールを送信するには、ルールをインストールして設定する必要があります。

メニューリンクには、カスタムモジュールを作成します

/**
 * Implements hook_menu()
 */
function MYMODULE_menu()  {
  $items['issue/close/%'] = array(
    'page callback' => '_MYMODULE_close_issue',
    'page arguement' => array(2),
    'access callback' => TRUE,
  );
}

function _MYMODULE_close_issue($nid = NULL) {
  if ($nid) {
    $node = node_load($nid);
    $node['field_issue_closed'][0][value] = TRUE;
    node_save($node);
  }
}

問題:

  • これにより、誰でもアクセスできるようになります
  • ユーザーにログインさせるためのコントロールはありません
  • Array(3)の検証はありません。ユーザーは何でも渡すことができます

あなたが本当にこれをしたい方法は、Drupalがユーザーパスワードをリセットする方法です。そこでは、1回のログインに適したハッシュリンクをユーザーに電子メールで送信します。これに対する事前定義アクションがある場合を除きます。リンク、問題を閉じることです。

ローカルコミュニティの誰かを知っていますDrupalこれらのハッシュリンクを作成するモジュールを作成しているMeetup。まだサンドボックスにあると思います。彼を追跡して、彼のプロジェクトがどこにあるかを確認します。にあります。

1
iStryker

Drupal 7の場合、アンカーリンクから値を変更できる別のモジュールがあります。これは Rules Link と呼ばれ、はるかに人気があります。ルールとの接続により、 more-必要なルールをアクティブにします。

0
Druvision