노드 추가 / 편집 후 사용자 리디렉션


13

노드를 만들거나 편집 한 후 사용자를 사용자 정의 페이지로 리디렉션하고 싶습니다.

답변:


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
수락되었지만이 답변은 너무 짧아서 유용하지 않습니다. 사용자 정의 제출 핸들러를 추가 하는 방법은 정말 중요하며이 답변은 이에 대한 침묵입니다. 가장 좋은 답변 IMHO는 @leymannx의 답변입니다 (그러나 편집 사용 사례에 대한 의견을 참조하십시오).
Free Radical

4

특정 컨텐츠 유형을 작성하거나 편집 할 때 사용자를 임의의 페이지로 경로 재지 정하는 규칙을 작성할 수 있습니다. 규칙을 추가 할 때 "새 컨텐츠 작성 후"를 선택하고 "컨텐츠 유형"조건도 추가하십시오. 할 일 섹션에서 사용자를 원하는 페이지로 리디렉션 할 수있는 옵션을 제공합니다.

노드를 편집 한 후 경로 재 지정하려면 새 규칙을 작성하고 첫 번째 옵션으로 "기존 컨텐츠를 업데이트 한 후"를 선택하십시오.


특정 콘텐츠를 만든 후 규칙을 사용하여 리디렉션했지만 사용자는 지금 피드백을받지 않습니다. 사용자에게 "콘텐츠가 생성되었습니다"라고 표시하고 싶습니다. 이것을 어떻게 향상시킬 수 있습니까?
wallace740

1
"사이트에 구성 가능한 메시지 표시"에 경로 재 지정 조치 뒤에 다른 조치를 추가하고 거기에서 사용자 정의 메시지를 추가하십시오.

다른 규칙을 추가했지만 메시지가 내 첫 페이지에 표시되지 않기 때문에 사용자 지정 테마에서 무언가를 놓친 것 같습니다. 팝업에서 이러한 종류의 메시지를 표시하기 위해 '더 나은 메시지'모듈을 사용하고 있습니다! 규칙 구성
wallace740

내 경험은 오버레이가 규칙 리디렉션을 위반한다는 점입니다.
Capi Etheriel

필자의 경우 노드 추가 양식이 패널 내부에 포함되었습니다. 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';
}

노드를 추가 한 후에는 리디렉션 에 사용하지만 편집 한 후에는 작동 하지 않습니다. 나는에 대한 호출을 이해 unsetdestination편집 유스 케이스를 처리하도록되어 있지만, 그들은 내 드루팔 7 사이트에 영향을주지 않습니다.
Free Radical

@FreeRadical – 당신이 맞아요. 대신 hook_form_BASE_FORM_ID_alter 를 사용하도록 답변을 업데이트했습니다 .
leymannx


1

문서는 매우 명확하지 않습니다,하지만 당신은 수정해야 $_GET['destination']변수가 아닌 $_REQUEST이상 $form_state['redirect'].


1
Drupal 7에서 $ form_state [ 'redirect']를 수정하면 잘 작동합니다.
Felix Eve

1

Drupal 7에서 노드 편집 양식을 변경하여 자신의 제출 기능을 '첨부'할 수 있습니다. 여기서 '삭제'매개 변수를 포함하도록 노드 삭제 확인 양식의 form_state를 변경할 수 있습니다. ve는 '일곱'관리자 테마의 하위 테마로 개발되었습니다 ...

hook_form_FORM_ID_alter에 대한 설명서

이 후크를 모듈뿐만 아니라 템플릿 / 테마에도 추가 할 수 있습니다.

그래서 당신의 테마 template.php에 다음 형식의 후크를 추가하십시오 :

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.