メニュータブのリンクを押下した際にURLにパラメーターを渡したいです

Events happening in the community are now at Drupal community events on www.drupal.org.
ilohas_1020's picture

お世話になってます。
早速質問をさせて下さい。

drupalのメニューで複数のタブを作成して
メニュータブを押下時に指定したURLに遷移が出来ますが、
このURLにパラメーターを渡すことは可能でしょうか。

押下時のURL
ttp://localhost/drupal6/?q=test/aaa/
↓↓↓
↓↓↓
実現したいURL
ttp://localhost/drupal6/?q=test/aaa/&page=2

よろしくお願い致します。

Comments

ilohas_1020さん、メニューモジュールのメニューで

jun784's picture

ilohas_1020さん、メニューモジュールのメニューであれば

サイトの構築 >> メニュー >> 変更したいメニュー >> リンク から

URLを
test/aaa/&page=2

ではなく

test/aaa/?page=2

にすれば引数を渡せますよ!

ilohas_1020's picture

jun784さん

お返事ありがとうございます。早速やってみたのですが
分かりませんでしたので再度、質問をさせてく下さい。すいません

サイト構築⇒メニュー⇒ナビゲーション(自分が作ったメニューがあった)
に行き、「編集」をクリックしてメニューの設定を表示しました。

パス、メニューリンク、説明、有効、上位メニュー項目、重み付けの項目がありました。
おそらくパスがリンクの設定だと思ったのですが文字列のリンクになっており設定が出来ませんでした。

やりたい事はdrupalのpager_queryを使っていてページングを表示させています。
他のページにいき、そのページングをしているページに戻ってきた際に
先程見ていたページを表示したいと思っています。

AAA(ページングがあるページ ページングは2見ている)
BBBに遷移
AAAに再度、遷移
ページングは1に戻ってしまうので保持をさせたいです。

下記の「TEST一覧」が押下されたときにURLにパラメーターをつける事が出来れば
実現できるかと思っていました。
どうすれば実現出来るでしょうか。

function test_menu() {

$items['test']= array(
'title' => 'TEST',
  'page callback' => 'test_aaa',
'access arguments' => array('test aaa'),
'type' => MENU_NORMAL_ITEM,
 'file' => 'test.inc',
);

 $items['test/aaa']= array(
  'title' => 'TEST一覧',
  'access arguments' => array('test aaa'),
  'type' => MENU_DEFAULT_LOCAL_TASK,
  'access callback' => TRUE,
  'weight' => 0,
  'file' => 'test.inc',
 );

 $items['test/bbb']= array(
 'title' => 'BBB',
'page callback' => 'test_bbb',
'access arguments' => array('test bbb'),
'type' => MENU_LOCAL_TASK,
  'access callback' => test_bbb_access,
'weight' => 1,
  'file' => 'test.inc',
 );

$items['test/ccc']= array(
'title' => 'CCC',
'page callback' => 'test_ccc',
'access arguments' => array('test ccc'),
'type' => MENU_LOCAL_TASK,
  'access callback' => test_ccc_access,
'weight' => 2,
  'file' => 'test.inc',
 );
return $items;
}

またDrupalでグローバル変数がうまく動作していません。
どこかのサイトでグローバル変数名にモジュール名+アンダーバー+テーマ名とあったので
その通りにしたつもりなのですができませんした。
どのようにしたらグローバル変数を実装できますか。

ilohas_1020さん パス、メニューリンク、説明、

jun784's picture

ilohas_1020さん

パス、メニューリンク、説明、有効、上位メニュー項目、重み付けの項目がありました。
おそらくパスがリンクの設定だと思ったのですが文字列のリンクになっており設定が出来ませんでした。

文字列のリンクになっているのは、メニューモジュールを使用したメニューではなく、
オリジナルモジュールでfunction my_menu() でパス、タイトルを指定しているからですね。

やりたい事はdrupalのpager_queryを使っていてページングを表示させています。
他のページにいき、そのページングをしているページに戻ってきた際に
先程見ていたページを表示したいと思っています。

なるほど!これはとてもユーザビリティがいいですね!

メニューの項目のリンクはキャッシュに保存されてしまうので、
メニュー項目自体を毎度毎度リフレッシュするのはよくありません。

グローバル変数的な使い方で、最近USERオブジェクトにプロパティを挿入できることを知ったので、ページのクエリーを変えてみます。

functio mymodule_menu() {
  $items = array();

  $items['mymodule/test'] = array(
    'title' => t('mymodule_page'),
    'page callback' => 'mymodule_page',
    'access callback' => TRUE,
    'type' => MENU_LOCAL_TASK,
  );

  return $items;
}

function mymodule_page(){
  global $user;
 
  //アクセス履歴を確認する。履歴がなければ1に
  $lastvisit = isset($user->mymodule_page) ? $user->mymodule_page : 1;
  $page = isset($_GET['page']) ? $_GET['page'] : FALSE;
 
  //GETの確認
  if($page){
    //履歴の保存
    user_save($user, array('mymodule_page' => $page));
  } else {
     if(1 != $lastvisit){
     //パラメーターが与えられて無く、かつ履歴があれば
      drupal_goto('mymodule/test',array('page' => $lastvisit));
     } else {
     drupal_goto('mymodule/test',array('page' => 1));
      }
  }
 
 
  return 'Succsess!';
}
dokumori's picture

URLにパラメーターをつける事が出来れば実現できるかと思っていました。どうすれば実現出来るでしょうか。

以下のようにすると、パラメーターを拾って、callback functionに渡せます:

$items['test/aaa/%'] = array(
  'page callback' => 'test_aaa',
  'page arguments' => array(2),
  ...
);

page arguments のパラメーターの指定の仕方は arg() と同じです。

参照:
http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hoo...

あと、グローバル変数というのは $GLOBALS のことですよね?PHPでできることは全てDrupalでできるので、普通に使えるはずです。以下のような方法で変数の内容を確認してみてはどうでしょう。

print drupal_set_message(print_r($GLOBALS, 1));

または、Develモジュールをインストールしてから
dsm($GLOBALS);

おお、短い! こんな綺麗なやり方があるとは・・・すごいです

jun784's picture

おお、短い!
こんな綺麗なやり方があるとは・・・すごいですね!

ilohas_1020's picture

jun784さん dokumoriさん

お返事が遅くなりました。
ご丁寧な解説ありがとうございました。
実際にやってみたらお二人のやり方を用いて
色々試したところ出来ました。

今後も質問する事があるかと思いますが
その際はよろしくお願い致します。

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: