回答:
それでも間接的にURLを経由しますが、これはそれを取得する最も簡単な方法です:menu_get_object。
<?
if ($node = menu_get_object()) {
$nid = $node->nid;
}
?>
ノードがある場合、いずれにしてもメニューシステムによって既にロードされており、これは静的キャッシュからロードされることに注意してください。
$node = menu_get_object()
をコードの元の質問に似たものに置き換え、ページあたり500以上のデータベース要求を節約しました。注意して使用してください!
ノードのIDを取得するには、を呼び出し$node->nid
ます。実際、いつかはSEO対応のURLに切り替える可能性があるため、URLからIDを取得することは最善の解決策ではありません。
このドキュメントから、で$node
定義されているように見えるpage.tpl.php
ので、利用できるはずです。
<?php
// In a template file...
if ($node) {
echo $node->nid;
}
else {
// you are viewing taxonomy, view, etc
}
?>
D7でのもう1つのかなり単純で信頼できるアプローチは、
<?php
if (isset($node->nid) && count($node->nid) > 0){
$nodeid = $node->nid;
}
?>
Zourtneyの提案は、私の場合、未定義のインデックスエラーを引き起こします。