Odpowiedzi:
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));
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.
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']='';