Posted by ilohas_1020 on November 27, 2010 at 9:28am
お世話になってます。
早速質問をさせて下さい。
drupalのメニューで複数のタブを作成して
メニュータブを押下時に指定したURLに遷移が出来ますが、
このURLにパラメーターを渡すことは可能でしょうか。
押下時のURL
ttp://localhost/drupal6/?q=test/aaa/
↓↓↓
↓↓↓
実現したいURL
ttp://localhost/drupal6/?q=test/aaa/&page=2
よろしくお願い致します。
Comments
ilohas_1020さん、メニューモジュールのメニューで
ilohas_1020さん、メニューモジュールのメニューであれば
サイトの構築 >> メニュー >> 変更したいメニュー >> リンク から
URLを
test/aaa/&page=2
ではなく
test/aaa/?page=2
にすれば引数を渡せますよ!
jun784さん お返事ありがとうございます。早速やってみ
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さん パス、メニューリンク、説明、
ilohas_1020さん
文字列のリンクになっているのは、メニューモジュールを使用したメニューではなく、
オリジナルモジュールでfunction my_menu() でパス、タイトルを指定しているからですね。
なるほど!これはとてもユーザビリティがいいですね!
メニューの項目のリンクはキャッシュに保存されてしまうので、
メニュー項目自体を毎度毎度リフレッシュするのはよくありません。
グローバル変数的な使い方で、最近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!';
}
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さん dokumoriさん お返事が遅くなりま
jun784さん dokumoriさん
お返事が遅くなりました。
ご丁寧な解説ありがとうございました。
実際にやってみたらお二人のやり方を用いて
色々試したところ出来ました。
今後も質問する事があるかと思いますが
その際はよろしくお願い致します。