Wie wird ein Hash (#) in den Pfad drupal_goto eingefügt?

12

Gibt es eine Möglichkeit, ein # in drupal_goto aufzunehmen?

Ich möchte so etwas

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

Antworten:

18

Für Drupal 6

Es sollte der 3. Parameter sein

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

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

Für Drupal 7

drupal_goto($path = '', array $options = array(), $http_response_code = 302)
drupal_goto("products", array('fragment' => $node->nid));
Dinesh Kumar Sarangapani
quelle
In D7 können Sie beispielsweise jeden Parameter verwenden, den die Funktion url () unterstützt, z. B. URL-Parameter.
AyeshK
7

In Drupal 6 verwendet drupal_goto seinen dritten Parameter für die Fragmentierung. Wenn Sie die URL wie Produkte # 345 machen möchten, sollten Sie ihr Fragment als drittes Argument in der Funktion drupal_goto übergeben.

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

In Drupal 7 sollten Sie Fragment als Schlüsselwert-Array-Paar für den zweiten Parameter der Funktion drupal_goto übergeben.

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

Beide oben genannten erzeugen eine URL wie Produkte # 123, wobei 123 der Wert der Variablen $ node-> nid ist.

Nilesh Kumar Singh
quelle
2

Dies hat auch bei mir in Drupal 7 funktioniert

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

drupal_goto verliert #zzz, wenn es eine? destination = foobar # zzz gibt, da dies von $ _SERVER niemals zurückgegeben wird.

//$options['fragment'] = $destination['fragment'];  // removed
is the same as 
$options['fragment']='';
Stephen Robinson
quelle