私はカスタムモジュールに取り組んでおり、データベースのエントリを使用してメニュー項目を構築しています。これらはキャッシュされており、データベースは実際には月に1回程度しか更新されません。
このメニューでワイルドカードを使用する際に問題が発生します。
これが機能する私のメニュー構造です:
$dbconn = dbConnect();
$query = "SELECT TOP 3 id, title FROM table";
$q = mssql_query($query, $dbconn);
while($r = mssql_fetch_assoc($q)) {
$title = $r['title'];
$items[$title] = array(
'title' => $r['title'],
'description' => 'Page for ' . $r['title'],
'page callback' => 'programs_page',
'access callback' => TRUE,
'type' => MENU_NORMAL_ITEM,
);
}
mssql_close($dbconn);
しかし、%を配列キーに追加すると、メニュー項目は次のように消えてしまいます。
$items[$title . "/%"];
drupalがこれでつまずくのはなぜでしょうか?$ title変数に。 "/%"を付けても機能しません。
最後のパス要素の後にワイルドカードプレースホルダーを追加する必要はありません。 URLの最後に追加されたものはすべて、引数としてコールバックに自動的に渡されます。
上記の例の場合、誰かが_$title/arbitrary/arguments
_にアクセスすると、「任意」と「引数」が引数としてページコールバックに渡されます。
programs_page('arbitrary', 'arguments');
パスの途中に引数が必要な場合は、 %記号 を使用して引数を指定できます。ページコールバックでは、 ワイルドカードローダー を使用できます。