Réponses:
Pour Drupal 6,
Ce devrait être le 3ème paramètre
drupal_goto($path = '', $query = NULL, $fragment = NULL, $http_response_code = 302)
drupal_goto("products", NULL, $node->nid);
Pour Drupal 7
drupal_goto($path = '', array $options = array(), $http_response_code = 302)
drupal_goto("products", array('fragment' => $node->nid));
Dans Drupal 6, drupal_goto utilise son troisième paramètre pour la fragmentation. Si vous voulez créer l'url comme des produits # 345, vous devez passer son fragment comme troisième argument dans la fonction drupal_goto.
drupal_goto("products", NULL, $node->nid); // where $node->nid is the fragment.
Dans Drupal 7, vous devez passer le fragment comme paire de valeurs clés du tableau sur le deuxième paramètre de la fonction drupal_goto.
drupal_goto('products', array('fragment' => $node->nid)) ; // where $node->nid is the fragment.
Les deux ci-dessus produiront une URL comme les produits # 123, où 123 est la valeur de la variable $ node-> nid.
drupal_goto perd #zzz s'il y a un? destination = foobar # zzz, car cela n'est jamais retourné par $ _SERVER, supprimez cette ligne comme rien à part casser des choses:
//$options['fragment'] = $destination['fragment']; // removed
is the same as
$options['fragment']='';