web-dev-qa-db-ja.com

drupal 7のURLエイリアスからnidを取得する方法は?

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;
_
2
D-pak

_$_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;
_
4
wolverine
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。

0
gease

Nidを取得する方法はいくつかありますが、ページの構築方法によって異なります。直接ノードページの場合は、_$_GET["q"]_またはarg()関数を使用できます。 menu_get_object()関数を直接使用して_$nid=$node->nid;_を取得することもできます。

  • _$_GET["q"]_は_node/2345_のように返されます。2345はノードのnidです。
  • arg(1)はノードnidを返します。
0
Pushpinder Rana

コードに問題はありません。 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;
0
Krishna Mohan
$path = drupal_get_path_alias($_GET['q']); 
$path = explode('/', $path);
echo $nid = $path[1];

または、単にarg(1)がページのノードIDを返します。これを使用すると、任意のノードのnidを取得できます。しかし、それは任意のノードの詳細ページである必要があります

0
TBI Infotech