web-dev-qa-db-ja.com

動的に生成されたメニューのワイルドカード

私はカスタムモジュールに取り組んでおり、データベースのエントリを使用してメニュー項目を構築しています。これらはキャッシュされており、データベースは実際には月に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変数に。 "/%"を付けても機能しません。

1
oranges13

最後のパス要素の後にワイルドカードプレースホルダーを追加する必要はありません。 URLの最後に追加されたものはすべて、引数としてコールバックに自動的に渡されます。

上記の例の場合、誰かが_$title/arbitrary/arguments_にアクセスすると、「任意」と「引数」が引数としてページコールバックに渡されます。

programs_page('arbitrary', 'arguments');

パスの途中に引数が必要な場合は、 %記号 を使用して引数を指定できます。ページコールバックでは、 ワイルドカードローダー を使用できます。

2
cam8001