ノードの追加/編集後にユーザーをリダイレクトする


14

ユーザーがノードを作成または編集した後、ユーザーをカスタムページにリダイレクトしたい。

回答:


6

を使用hook_form_alterして、リダイレクトパスを設定できるカスタム送信ハンドラを追加できます。

フォームのリダイレクトの詳細については、FAPIを参照してください。


1
ご回答有難うございます !私はFAPIについて読んだことがありますが、まだ先に進むべき質問があります:hook_form_alter関数をどこに置くべきですか?
ousneo

2
@ousneo drupal 7では、テーマまたは作成したカスタムモジュールに配置できます。
googletorp

1
@Dmitry Vyalの答えを参照してください
CAPI Etheriel

1
これは、保存後にリダイレクトを行うモジュールです。drupal.org/project/node_save_redirect
polyclick

1
受け入れられている間、この答えは短すぎて有用ではありません。カスタム送信ハンドラをどのように追加するは本当に重要であり、この答えはそれについて沈黙しています。私見の最良の答えは、@ leymannxからのものです(ただし、ユースケースの編集に関するコメントを参照してください)。
フリーラジカル

4

ユーザーが特定のコンテンツタイプを作成または編集するときに、ユーザーを任意のページにリダイレクトするルールを作成できます。ルールを追加する場合、「新しいコンテンツの作成後」を選択し、「コンテンツがタイプ」の条件も追加します。あなたが行うセクションは、あなたが望む任意のページにユーザーをリダイレクトするオプションを提供します。

ノードの編集後のリダイレクトについては、新しいルールを作成し、最初のオプションとして「既存のコンテンツの更新後」を選択するだけです。


特定のコンテンツを作成した後、ルールを使用してリダイレクトしましたが、ユーザーにはフィードバックがありません。「あなたのコンテンツが作成された」ことをユーザーに見せたいです。これをどのように改善できますか?
wallace740

1
リダイレクトアクションの後に「サイトに構成可能なメッセージを表示する」に別のアクションを追加し、そこからカスタムメッセージを追加します。

別のルールを追加しましたが、フロントページにメッセージが表示されないため、カスタムテーマで何かを見逃していると思います。このような種類のメッセージをポップアップで表示するには、「Better messages」モジュールを使用しています!ルールの構成
-wallace740

私の経験では、オーバーレイはルールのリダイレクトを壊すことに注意してください。
カピエテリエル

私の場合、このノード追加フォームはパネル内に埋め込まれています。hook_form_alterはそれをキャッチしませんでした。しかし、ルールはうまくいきました!
Druvision

2

これを行う場合は、編集ボタンをクリックして既存のノードを編集するときに通常URLに追加される既存の宛先も設定解除してください。

置き換えarticleMYMODULE_form_article_node_form_alterコンテンツタイプのマシン名で。

/**
 * Implements hook_form_BASE_FORM_ID_alter().
 */
function MYMODULE_form_article_node_form_alter(&$form, &$form_state, $form_id) {

  $form['actions']['submit']['#submit'][] = '_MYMODULE_node_form_redirect';
}

/**
 * Submit callback.
 */
function _MYMODULE_node_form_redirect($form, &$form_state) {

  // Unset destination first.
  unset($_GET['destination']);
  unset($_REQUEST['edit']['destination']);

  $form_state['redirect'] = 'FOO/BAR';
}

これは、ノードを追加した後のリダイレクトでは機能しますが、編集した後では機能しません。私はへの呼び出しことを理解編集ユースケースを処理することになっているが、彼らは私のDrupal 7サイトには影響しません。unsetdestination
フリーラジカル

@FreeRadical –あなたは正しい。代わりにhook_form_BASE_FORM_ID_alterを使用するように回答を更新しました。これは、追加と編集の両方を対象としています。
レイマンス


1

ドキュメントはそれに非常に明確ではありませんが、あなたは変更する必要があり$_GET['destination']、変数、ではない$_REQUESTかと$form_state['redirect']


1
$ form_state ['redirect']を変更すると、Drupal 7で正常に動作します...
Felix Eve 14

1

Drupal 7では、ノード編集フォームを変更して独自の送信関数を「アタッチ」できます。この場合、ノード削除確認フォームのform_stateを変更して「destination」パラメーターを含めることができます...これはカスタムテーマiで行いました「7」の管理テーマのサブテーマとして開発されてきました...

hook_form_FORM_ID_alterのドキュメント

このフックは、モジュールだけでなく、テンプレート/テーマに追加できます。

テーマのに、template.phpこのフォームのalterフックを追加します。

function yourtheme_node_delete_form_submit( &$form, &$form_state ) {
    $form_state[ 'redirect' ][ 1 ][ 'query' ][ 'destination' ] = "admin/content";
}

そして、出来上がり。ノードが削除された後にホームページにリダイレクトされなくなりました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.