如何在drupal_goto路径中包含哈希(#)?


12

有没有办法在drupal_goto中包含#?

我想要这样的东西

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

Answers:


18

对于Drupal 6

它应该是第三个参数

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参数。
AyeshK 2012年

7

在Drupal 6中,drupal_goto使用其第三个参数进行分段。如果您想使URL像products#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.

上面两者都将产生一个类似于products#123的url,其中123是$ node-> nid变量的值。


2

这在Drupal 7中也对我有用

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

0

如果存在?destination = foobar#zzz,drupal_goto将丢失#zzz,因为$ _SERVER永远不会返回它,请删除此行,除了破坏东西外别无其他:

//$options['fragment'] = $destination['fragment'];  // removed
is the same as 
$options['fragment']='';
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.