W jaki sposób uwzględnić skrót (#) w ścieżce drupal_goto?

12

Czy jest jakiś sposób na dodanie # do drupal_goto?

chcę coś takiego

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

Odpowiedzi:

18

W przypadku Drupal 6

Powinien to być trzeci parametr

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

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

Dla Drupal 7

drupal_goto($path = '', array $options = array(), $http_response_code = 302)
drupal_goto("products", array('fragment' => $node->nid));
Dinesh Kumar Sarangapani
źródło
dla przykładu D7 możesz użyć dowolnego parametru obsługiwanego przez funkcję url (), takiego jak parametry adresu URL.
AyeshK,
7

W Drupal 6 drupal_goto używa swojego trzeciego parametru do fragmentacji. Jeśli chcesz stworzyć produkt podobny do adresu URL # 345, powinieneś przekazać jego fragment jako trzeci argument w funkcji drupal_goto.

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

W Drupal 7 powinieneś przekazać fragment jako parę klucz-wartość tablicy w drugim parametrze funkcji drupal_goto.

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

Oba powyższe spowodują utworzenie produktów podobnych do adresu URL # 123, gdzie 123 to wartość zmiennej $ node-> nid.

Nilesh Kumar Singh
źródło
2

Działa to również dla mnie w Drupal 7

 drupal_goto( '/products/' . 'section', array( 'fragment' =>  'subsection', 'alias' => TRUE ) );
Yusef
źródło
0

drupal_goto traci #zzz, jeśli istnieje? destination = foobar # zzz, ponieważ to nigdy nie jest zwracane przez $ _SERVER, usuń tę linię, ponieważ nic nie robi oprócz zepsucia rzeczy:

//$options['fragment'] = $destination['fragment'];  // removed
is the same as 
$options['fragment']='';
Stephen Robinson
źródło