Відповіді:
Для Drupal 6,
Це повинен бути 3-й параметр
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));
У Drupal 6 drupal_goto використовує свій третій параметр для фрагментації. Якщо ви хочете зробити URL-адреси подібними до продуктів # 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.
Обидва вище будуть створювати URL-адреси, подібні до продуктів # 123, де 123 - значення змінної $ node-> nid.
drupal_goto втрачає #zzz, якщо є? призначення = foobar # zzz, оскільки $ _SERVER це ніколи не повертається, видаліть цей рядок, оскільки нічого, крім зламаного матеріалу, не відбувається:
//$options['fragment'] = $destination['fragment']; // removed
is the same as
$options['fragment']='';