Şimdiye kadar Drupal 7'de bu 3 fonksiyonla karşılaştım, ancak aralarındaki farkın ne olduğundan ve düğüm kimliğini blok ön işleme fonksiyonunda almak için daha uygun olduğundan emin değilim.
Bana bir fikir verebilir misin?
Şimdiye kadar Drupal 7'de bu 3 fonksiyonla karşılaştım, ancak aralarındaki farkın ne olduğundan ve düğüm kimliğini blok ön işleme fonksiyonunda almak için daha uygun olduğundan emin değilim.
Bana bir fikir verebilir misin?
Yanıtlar:
Aralarındaki farkın ne olduğundan emin değilim.
menu_get_object()
, kimliği 1 olan düğüm için düğüm nesnesini döndürür; Gösterilen sayfa example.com/user/1 ise, menu_get_object('user')
kimliği 1 olan kullanıcı için kullanıcı nesnesini döndürecektir. node_load
geçerli yolun bir kısmına karşılık gelen bir nesneyi yüklemek için çağrılacak bir işlev isimleri dizisi (benzeri )drupal_lookup_path("homepage")
geri dönecektir "node/1"
. Yol takma adları, yalnızca düğüm yollarıyla değil, herhangi bir iç yolla ilişkilendirilebilir.ve bir blok ön işleme fonksiyonunda düğüm kimliğinin elde edilmesi için daha uygundur.
Tüm almak istediğiniz şu anda gösterilen düğümün düğüm kimliği ise, aşağıdaki kodu kullanmanız yeterlidir:
if (arg(0) == 'node') {
$nid = arg(1);
}
Düğüm nesnesini almanız gerekirse, aşağıdaki kodu kullanabilirsiniz:
if ($node = menu_get_object()) {
// Use the node object.
}
Bu parçacıklardan ikincisi daha iyidir çünkü node / 1 / revisions / 3 / view gibi dahili yollar için doğru node nesnesini döndürür.
Sayfa veya düğüm gibi bazı önişleme işlevlerinin zaten bir a'ya sahip olduğunu unutmayın $variables['node']
. Bunun anlamı, bu durumlarda, sadece önişleme işlevinizde, hangi işlevi kullanacağınız konusunda endişelenmeden aşağıdaki pasajı kullanmanız gerektiğidir.
if (isset($variables['node'])) {
// Check the node ID or other properties.
}
Diğer ön işleme işlevleri için, düğüm nesnesini içeren herhangi bir değişken olup olmadığını görmek için belgelere bakın. Örneğin, bunun için böyledir template_preprocess_comment()
yapan $variables['node']
yorumlar için önişlem fonksiyonları için kullanılabilir.
Drupal Core'un template_preprocess_page sayfasında nasıl yapılır :
Theme.inc ve sonrasında 2267 Satırı :
if ($node = menu_get_object()) {
$variables['node'] = $node;
}
template_preprocess_page menu_get_object öğesini kullanır . Bundan sonra, sadece düğümün tanımlanıp tanımlanmadığını kontrol etmek ve $ node-> nid almaktır.
Dikkat etmeniz gereken tek şey yol takma adıdır.
drupal_get_normal_path($path)
Geçerli yolu almak için sistem değişkenini kullanın. $_SERVER["REQUEST_URI"]
(Çağırabileceğiniz düğüm sayfasındaysanız $node->uri['path']
, bu bir takma ad olmayan yolu döndürür. Sonra yine düğüm sayfasındaysanız, sadece kullanabilirsiniz $node->nid
.)
bu, düğüm / XXXX döndürür
öyleyse bir şey dene
$node_path = explode('/', drupal_get_normal_path($path));
$nid = $node_path[1];
arg(1);
Bunu yapmanın kötü bir yolu değil. arg () dahili yolda çalışır, bu nedenle yolun diğer adından etkilenmez.
menu_get_object
(sadece sarılıdır, menu_get_item
böylece eşit derecede iyidir).
if (arg(0) == 'node' && is_numeric(arg(1)))
o arg(1)
zaman neredeyse% 99'u size bir düğüm kimliği döndürür. Ama bir tek kişi arg(1)
size birçok başka kimlik de verebilir.
Drupal 8’de, rotadakilere göre url argümanları alabilirsiniz.
Kimliği tek başına almak için:
$nid = \Drupal::routeMatch()->getRawParameter('node');
Düğüm nesnesini yüklemeyi planlıyorsanız, onu şu şekilde elde edebilirsiniz:
$node = \Drupal::routeMatch()->getParameter('node');
Parametre adlarını bulmak için kullanabilirsiniz:
$possible_parameters = \Drupal::routeMatch()->getParameters();