Как включить хеш (#) в путь 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, если существует? destination = 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.