Як включити хеш (#) до шляху 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 () ... наприклад параметри URL.
АйешК

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']='';
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.