drupal_gotoパスにハッシュ(#)を含める方法


12

drupal_gotoに#を含める方法はありますか?

このようなものが欲しい

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

回答:


18

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));

D7の例では、url()関数がサポートするパラメーター(URLパラメーターなど)を使用できます。
AyeshK

7

Drupal 6では、drupal_gotoはフラグメンテーションに3番目のパラメーターを使用します。products#345のようなURLにしたい場合は、そのフラグメントをdrupal_goto関数の3番目の引数として渡す必要があります。

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

Drupal 7では、フラグメントをdrupal_goto関数の2番目のパラメーターの配列のキー値ペアとして渡す必要があります。

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

drestal_gotoは、$ destroyが返されないため、?destination = foobar#zzzが存在する場合、#zzzを失います。

//$options['fragment'] = $destination['fragment'];  // removed
is the same as 
$options['fragment']='';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.