วิธีแฮช (#) ในเส้นทาง drupal_goto


12

มีวิธีการรวม # ใน drupal_goto หรือไม่?

ฉันต้องการสิ่งนี้

function MYMODULE_preprocess_node(&$variables) {
  $node = $variables['node'];
  switch ($node->type) {
    case 'product':      
      drupal_goto("products#".$node->nid);
  }
}

คำตอบ:


18

สำหรับ Drupal 6

ควรเป็นพารามิเตอร์ที่ 3

drupal_goto($path = '', $query = NULL, $fragment = NULL, $http_response_code = 302)

drupal_goto("products", NULL, $node->nid);

สำหรับ Drupal 7

drupal_goto($path = '', array $options = array(), $http_response_code = 302)
drupal_goto("products", array('fragment' => $node->nid));

สำหรับตัวอย่าง D7 คุณสามารถใช้พารามิเตอร์ใด ๆ ที่ฟังก์ชัน url () รองรับ ... เช่น params URL
AyeshK

7

ใน Drupal 6 drupal_goto ใช้พารามิเตอร์ตัวที่สามสำหรับการกระจายตัว หากคุณต้องการสร้าง URL เช่นผลิตภัณฑ์ # 345 คุณควรผ่านส่วนของมันเป็นอาร์กิวเมนต์ที่สามในฟังก์ชั่น drupal_goto

drupal_goto("products", NULL, $node->nid); // where $node->nid is the fragment.

ใน Drupal 7 คุณควรส่งแฟรกเมนต์เป็นคู่ค่าคีย์ของอาร์เรย์ในพารามิเตอร์ที่สองของฟังก์ชัน drupal_goto

drupal_goto('products', array('fragment' => $node->nid)) ; // where $node->nid is the fragment.

ทั้งสองข้างต้นจะสร้าง URL เช่นเดียวกับผลิตภัณฑ์ # 123 โดยที่ 123 คือค่าของตัวแปร $ node-> nid


2

สิ่งนี้ใช้ได้กับฉันใน Drupal 7 ด้วย

 drupal_goto( '/products/' . 'section', array( 'fragment' =>  'subsection', 'alias' => TRUE ) );

0

drupal_goto สูญเสีย #zzz หากมี? ปลายทาง = foobar # zzz เนื่องจากไม่ถูกส่งคืนโดย $ _SERVER ให้ลบบรรทัดนี้ออกโดยไม่ทำสิ่งอื่นนอกเหนือจากการทำลายสิ่ง:

//$options['fragment'] = $destination['fragment'];  // removed
is the same as 
$options['fragment']='';
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.