¿Cómo incluir hash (#) en la ruta drupal_goto?


12

¿Hay alguna manera de incluir un # en drupal_goto?

Quiero algo como esto

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

Respuestas:


18

Para Drupal 6,

Debería ser el 3er 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 el ejemplo D7, puede usar cualquier parámetro que admita la función url () ... como parámetros de URL.
AyeshK

7

En Drupal 6, drupal_goto usa su tercer parámetro para la fragmentación. Si desea que la URL tenga el mismo estilo que los productos # 345, debe pasar su fragmento como tercer argumento en la función drupal_goto.

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

En Drupal 7, debe pasar el fragmento como un par de valores clave de la matriz en el segundo parámetro de la función drupal_goto.

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

Los dos anteriores producirán una URL como productos # 123, donde 123 es el valor de la variable $ node-> nid.


2

Esto también funcionó para mí en Drupal 7

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

0

drupal_goto pierde #zzz si hay un? destination = foobar # zzz, ya que esto nunca es devuelto por $ _SERVER, elimine esta línea ya que no hace nada aparte de romper cosas:

//$options['fragment'] = $destination['fragment'];  // removed
is the same as 
$options['fragment']='';
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.