Como incluir hash (#) no caminho drupal_goto?


12

Existe alguma maneira de incluir um # em drupal_goto?

eu quero algo assim

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

Respostas:


18

Para o Drupal 6,

Deve ser o terceiro parâmetro

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

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

Para Drupal 7

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

Para o exemplo D7, você pode usar qualquer parâmetro que a função url () suporte ... como parâmetros de URL.
AyeshK

7

No Drupal 6, o drupal_goto usa seu terceiro parâmetro para a fragmentação. Se você deseja criar a URL como produtos # 345, deve passar seu fragmento como terceiro argumento na função drupal_goto.

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

No Drupal 7, você deve passar fragmento como par de valor-chave da matriz no segundo parâmetro da função drupal_goto.

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

Ambos os itens acima produzirão uma URL semelhante aos produtos # 123, onde 123 é o valor da variável $ node-> nid.


2

Isso também funcionou para mim no Drupal 7

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

0

drupal_goto perde #zzz se houver um? destination = foobar # zzz, como isso nunca é retornado por $ _SERVER, remova essa linha, pois nada além de quebrar coisas:

//$options['fragment'] = $destination['fragment'];  // removed
is the same as 
$options['fragment']='';
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.