URLエイリアス_sitepath/john/video/nature-beauty
_があり、_john = user
_、_video = content type
_および_nature-beauty = node
_があります。ノード_nature-beauty
_のnid
を取得しようとしています。 Nodeタイトルは実際には_"Nature beauty"
_です。URLエイリアスにノードタイトルを設定しました。
以下のコードのどこが間違っているのか誰かに教えてもらえますか?
_ $last_page_visited = $_SERVER['HTTP_REFERER'];
$alias =$last_page_visited;
$path = drupal_lookup_path("source", $alias);
$node = menu_get_object("node", 1, $path);
$nid=$node->nid;
print $nid;
_
_$_SERVER['HTTP_REFERER']
_は完全なURLを返しますが、関数drupal_lookup_path()
は引数としてエイリアスのみを受け取るため、URLを解析してエイリアス_john/video/nature-beauty
_のみを渡すと機能します。
_$url = $_SERVER['HTTP_REFERER'];
$path = preg_replace('/\//','',parse_url($url,PHP_URL_PATH),1);
$org_path = drupal_lookup_path("source", $path);
$node = menu_get_object("node", 1, $org_path);
$nid=$node->nid;
print $nid;
_
global $base_url;
$referrer = substr($_SERVER['HTTP_REFERER'], drupal_strlen($base_url));
$referrer = drupal_get_normal_path($referrer);
$referrer = trim($referrer, '/');
if (arg(0, $referrer) == 'node' && is_numeric(arg(1, $referrer)) {
$nid = arg(1, $referrer);
}
それでおしまい。サイトがサーバールートにない場合、$ base_urlにはサブディレクトリが含まれます: http://example.com/drupalsite 。 drupal_get_normal_pathは、エイリアスをdrupal内部パス、つまりnode/101へのアーティクル/マーベラスに変換します。これは実際にはdrupal_lookup_pathのラッパーであるため、後者の使用はお勧めしません。そして、 nid。
Nidを取得する方法はいくつかありますが、ページの構築方法によって異なります。直接ノードページの場合は、_$_GET["q"]
_またはarg()
関数を使用できます。 menu_get_object()
関数を直接使用して_$nid=$node->nid;
_を取得することもできます。
$_GET["q"]
_は_node/2345
_のように返されます。2345はノードのnidです。arg(1)
はノードnidを返します。コードに問題はありません。 drupal_get_path_alias
の代わりに$_SERVER['HTTP_REFERER'];
を使用して、URLエイリアスを取得します。
$_SERVER['HTTP_REFERER']
を使用する場合は、次のように解析する必要があります。
$path = $_SERVER['HTTP_REFERER'];
$filter = preg_replace('/\//','',parse_url($path,PHP_URL_PATH),1);
$path = drupal_lookup_path("source", $filter);
$node = menu_get_object("node", 1, $path);
$nid=$node->nid;
print $nid;
$path = drupal_get_path_alias($_GET['q']);
$path = explode('/', $path);
echo $nid = $path[1];
または、単にarg(1)がページのノードIDを返します。これを使用すると、任意のノードのnidを取得できます。しかし、それは任意のノードの詳細ページである必要があります