เปลี่ยนเส้นทางผู้ใช้หลังจากเพิ่ม / แก้ไขโหนด


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 (แต่เห็นด้วยความคิดเห็นเกี่ยวกับกรณีการแก้ไขการใช้งาน)
ฟรี Radical

4

คุณสามารถสร้างกฎที่เปลี่ยนเส้นทางผู้ใช้ไปยังหน้าใดก็ได้เมื่อพวกเขาสร้างหรือแก้ไขประเภทเนื้อหาที่เฉพาะเจาะจง เมื่อคุณเพิ่มกฎให้เลือก "หลังจากสร้างเนื้อหาใหม่" เพิ่มเงื่อนไขของ "เนื้อหามีประเภท" ส่วนที่คุณต้องทำจะให้ตัวเลือกในการเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าใด ๆ ที่คุณต้องการ

สำหรับการเปลี่ยนเส้นทางหลังจากแก้ไขโหนดเพียงแค่สร้างกฎใหม่และเลือก "หลังจากอัปเดตเนื้อหาที่มีอยู่" เป็นตัวเลือกแรกของคุณ


ฉันใช้กฎเพื่อเปลี่ยนเส้นทางหลังจากสร้างเนื้อหาที่เฉพาะเจาะจง แต่ผู้ใช้ไม่ได้รับคำติชมในตอนนี้ ฉันต้องการแสดงให้ผู้ใช้เห็นว่า "เนื้อหาของคุณถูกสร้างขึ้น" ฉันจะปรับปรุงสิ่งนี้ได้อย่างไร
wallace740

1
เพิ่มการกระทำอื่นหลังจากการดำเนินการเปลี่ยนเส้นทางไปที่ "แสดงข้อความที่กำหนดค่าได้บนเว็บไซต์" และเพิ่มข้อความที่กำหนดเองของคุณจากที่นั่น

ฉันเพิ่มกฎอื่น แต่ฉันคิดว่าฉันพลาดบางสิ่งในธีมที่กำหนดเองเพราะข้อความไม่ปรากฏบนหน้าแรกของฉัน ฉันใช้โมดูล 'ข้อความที่ดีกว่า' เพื่อแสดงข้อความประเภทนี้ในป๊อปอัป! การกำหนดค่ากฎ
wallace740

ประสบการณ์ของฉันคือการซ้อนทับแบ่งกฎการเปลี่ยนเส้นทางระวัง
Capi Etheriel

ในกรณีของฉันนี้โหนดเพิ่มฟอร์มถูกฝังอยู่ภายในแผง hook_form_alter ไม่ได้จับมัน แต่กฎก็ใช้งานได้ดี!
Druvision

2

เมื่อทำสิ่งนี้ตรวจสอบให้แน่ใจว่าไม่ได้ตั้งค่าปลายทางที่เป็นไปได้ซึ่งปกติจะถูกเพิ่มลงใน URL เมื่อคุณคลิกปุ่มแก้ไขเพื่อแก้ไขโหนดที่มีอยู่

แทนที่articleในMYMODULE_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';
}

สิ่งนี้ใช้ได้กับการเปลี่ยนเส้นทางหลังจากเพิ่มโหนด แต่ไม่สามารถแก้ไขได้หลังจากแก้ไขแล้ว ฉันเข้าใจว่าการโทรไปunsetที่destinationควรจะจัดการกรณีการแก้ไขการใช้งาน แต่พวกเขาไม่มีผลกับไซต์ Drupal 7 ของฉัน
ฟรี Radical

@FreeRadical - คุณพูดถูก ฉันอัปเดตคำตอบเพื่อใช้hook_form_BASE_FORM_ID_alterแทนซึ่งเป็นเป้าหมายทั้ง - เพิ่มและแก้ไข
leymannx

@FreeRadical - ข้อมูลเพิ่มเติม: ความแตกต่างระหว่างการสร้างใหม่และแก้ไขโหนดในรูปแบบที่แตกต่างกัน
leymannx

1

เอกสารไม่ได้เป็นอย่างที่ชัดเจนเกี่ยวกับมัน แต่คุณควรแก้ไข$_GET['destination']ตัวแปรไม่ได้หรือ$_REQUEST$form_state['redirect']


1
การปรับเปลี่ยน $ form_state ['redirect'] ทำงานได้ดีใน Drupal 7 ...
Felix Eve

1

ใน Drupal 7 คุณสามารถเปลี่ยนรูปแบบการแก้ไขโหนดเป็น 'แนบ' ฟังก์ชั่นการส่งของคุณเองซึ่งคุณสามารถเปลี่ยน form_state ของแบบฟอร์มยืนยันการลบโหนดเพื่อรวมพารามิเตอร์ 'ปลายทาง' ... ทำแบบนี้ในธีมที่กำหนดเอง i ' เราได้พัฒนาเป็นส่วนย่อยของธีมผู้ดูแลระบบ 'เจ็ด' ...

เอกสารประกอบสำหรับhook_form_FORM_ID_alter

คุณสามารถเพิ่ม hook นี้ไปยังเทมเพลต / ธีมไม่ใช่เฉพาะกับโมดูล

ดังนั้นในธีมของคุณtemplate.phpให้เพิ่มแบบฟอร์มนี้แก้ไข hook:

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

แล้ว voila ไม่เปลี่ยนเส้นทางไปยังหน้าแรกหลังจากลบโหนดแล้ว


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.