지금까지 Drupal 7에서이 3 가지 기능을 살펴 봤지만 그 차이점이 무엇인지 확실하지 않으며 블록 사전 프로세스 기능에서 노드 ID를 얻는 데 더 적합합니다.
통찰력 좀 주 시겠어요?
지금까지 Drupal 7에서이 3 가지 기능을 살펴 봤지만 그 차이점이 무엇인지 확실하지 않으며 블록 사전 프로세스 기능에서 노드 ID를 얻는 데 더 적합합니다.
통찰력 좀 주 시겠어요?
답변:
나는 그들 사이의 차이점이 무엇인지 확실하지 않습니다.
menu_get_object()
ID가 1 인 노드의 노드 객체를 반환합니다. 표시되는 페이지가 example.com/user/1이면 menu_get_object('user')
ID가 1 인 사용자의 사용자 개체를 반환합니다. node_load
현재 경로의 일부에 해당하는 객체를로드하기 위해 호출 할 함수 이름의 배열 (예 :)drupal_lookup_path("homepage")
리턴 "node/1"
합니다. 경로 별명은 노드 경로뿐만 아니라 모든 내부 경로와 연관 될 수 있습니다.그리고 블록 전처리 기능에서 노드 ID를 얻는 데 더 적합합니다.
현재 표시된 노드의 노드 ID 만 얻으려면 다음 코드를 사용해야합니다.
if (arg(0) == 'node') {
$nid = arg(1);
}
노드 객체를 가져와야 할 경우 다음 코드를 사용할 수 있습니다.
if ($node = menu_get_object()) {
// Use the node object.
}
이러한 스 니펫 중 두 번째는 node / 1 / revisions / 3 / view와 같은 내부 경로에 대한 올바른 노드 오브젝트를 리턴하므로 더 좋습니다.
페이지의 기능 또는 노드와 같은 일부 사전 처리 기능에는 이미가 $variables['node']
있습니다. 즉, 이러한 경우 어떤 함수를 사용할지 걱정하지 않고 사전 처리 함수에서 다음 스 니펫을 사용해야합니다.
if (isset($variables['node'])) {
// Check the node ID or other properties.
}
다른 사전 처리 기능에 대해서는 문서를 확인하여 노드 오브젝트를 포함하는 변수가 있는지 확인하십시오. 예를 들어, 그것은을위한 경우가 template_preprocess_comment()
만드는 $variables['node']
덧글에 대한 전처리 기능을 사용할 수 있습니다.
Drupal Core의 template_preprocess_page 에서 수행되는 방법 :
theme.inc의 2267 행 :
if ($node = menu_get_object()) {
$variables['node'] = $node;
}
template_preprocess_page는 menu_get_object를 사용 합니다 . 그 후 노드가 정의되어 있는지 확인하고 $ node-> nid를 얻는 것입니다.
주의해야 할 사항은 경로 별칭입니다.
drupal_get_normal_path($path)
현재 경로를 얻으려면 시스템 변수를 사용하십시오. $_SERVER["REQUEST_URI"]
(노드 페이지에있는 경우을 호출하면 $node->uri['path']
별칭이 아닌 경로가 반환됩니다. 그런 다음 다시 노드 페이지에 있으면을 사용할 수 있습니다 $node->nid
.)
이것은 노드 / XXXX를 반환합니다
그래서 같은 것을 시도하십시오
$node_path = explode('/', drupal_get_normal_path($path));
$nid = $node_path[1];
arg(1);
그것을하는 나쁜 방법이 아닙니다. arg () 는 내부 경로에서 작동하므로 경로 별칭의 영향을받지 않습니다.
if (arg(0) == 'node' && is_numeric(arg(1)))
다음 arg(1)
거의 99 %의 수익 당신에게 노드 ID를하는 방법 것입니다. 그러나 단독으로 arg(1)
도 많은 다른 ID를 반환 할 수 있습니다.
Drupal 8에서는 라우팅의 내용을 기반으로 URL 인수를 얻을 수 있습니다.
ID 만 얻으려면 :
$nid = \Drupal::routeMatch()->getRawParameter('node');
노드 객체를로드하려는 경우 간단히 다음과 같이 얻을 수 있습니다.
$node = \Drupal::routeMatch()->getParameter('node');
매개 변수 이름을 찾으려면 다음을 사용할 수 있습니다.
$possible_parameters = \Drupal::routeMatch()->getParameters();