エイリアシングは、メニュールーター項目の残りの部分を制御できることを意味node/1234
するblogs
わけではありません。
たとえば、エイリアス化されていないノードパスが「node / 1234」の場合、残りの引数を「所有」します。つまり、次のようにPHP567
からアクセスできます。node/1234/567
<?php print arg(2); ?>
/blogs
URL部分を「所有」する場合は、 hook_menuを使用して定義する必要があります。すでにphpに触れているので、モジュールを作成するのが最善の方法だと思います。ただし、そのためにビューまたはパネルモジュールを使用できます。
<?php
function MYMODULE_menu() {
$items = array();
$items['blogs'] = array(
'title' => 'Main Blogs page',
'page callback' => 'MYMODULE_page',
'access arguments' => array('access content'),
'type' => MENU_SUGGESTED_ITEM,
);
$items['blogs/%'] = array(
'page callback' => 'MYMODULE_blog_view',
'page arguments' => array(1),
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function MYMODULE_blog_view($blog_id){
// $node = node_load($blog_id);
// return print_r($node, TRUE);
}
?>
これで、MYMODULE_blog_view関数で、arg(1)からも引数を取得できます。両方のメニュールーター項目を組み合わせて単一ページのコールバックにすることもできますが、別々のルーター項目をお勧めします。
Update(8月8日):node_load($ blog_id)やその他のコメント付きのジャンクを使用した理由は、ノードからのパーツが必要であると想定しているためです(例:ノードID引数を使用してビューを表示するか、特定のものが必要な類似のものが必要です)ノードからのデータ)。ただし、node_load()からロードされたノードをユーザーに表示させないでください。これは、ユーザーが要求するものを神が与えるようなものだからです。
ノードについては、ちょっとした仕掛けを説明しましょう。これをコールバック関数に入れます。
$node = node_load($blog_id);
if ($node && $node->type == 'blog'){
$_GET['q'] = 'node/' . $node->nid;
return menu_execute_active_handler('node/' . $node->nid, FALSE);
}
drupal_not_found(); // important!
これにより、ブログID(URLから)からノードIDが読み込まれ、「ブログ」タイプであるかどうかが確認され、メニューハンドラーが関連するノードIDパスに設定されます。これで、blog / 123にアクセスすると、ブログノードの場合はnode/123のコンテンツが表示されます。しかし、それはリダイレクトではありません。完全にエイリアス化されたURLとしては機能しませんが、役立つ場合があります。
または、ユーザーがnode_access()からノードにアクセスできるかどうかを確認できます。