Yanıtlar:
Bu bilgiler Drupal 6 ve 7 için geçerlidir. Drupal 8'de yeni yönlendirme sistemi ilehook_menu()
değiştirilmiştir . Aşağıda üç basit adımda uyguluyoruz .hook_menu()
Boş bir modül nasıl oluşturulur? Konusundaki talimatları izleyerek boş bir modül oluşturun . Burada gösterilen kodda, modülün helloworld olarak adlandırıldığı varsayılmaktadır .
Modül dosyasına aşağıdaki kodu ekleyin.
/**
* Implements hook_menu().
*/
function helloworld_menu() {
$items['hello'] = array(
'title' => 'Hello world!',
'page callback' => 'helloworld_page',
'access callback' => TRUE,
);
return $items;
}
/**
* Page callback for /hello.
*/
function helloworld_page() {
return 'Hello world!';
}
Modülü etkinleştirin ve http://example.com/hello adresini ziyaret edin . (Example.com'u sunucunuzun etki alanı adıyla değiştirin.)
"Merhaba dünya!" İletisini görmelisiniz. Bu kadar! Tamamen çalışan bir hook_menu()
uygulamanız var. Aşağıda, ilgili daha gelişmiş konular bulunmaktadır hook_menu()
. Özellikle, yukarıdaki sayfa herkes tarafından görüntülenebileceği için izinleri okumak isteyebilirsiniz.
Sayfa geri aramasına daha fazla veri iletmek istiyorsanız, bunu başarmak için sayfa değişkenlerini kullanabilirsiniz. Sayfa argümanları, sayfa geri aramasına iletilecek bir argüman dizisi olmalıdır. Bir tamsayı argüman olarak kullanılırsa, 0'dan başlayarak her eğik çizgi (/) için bir kez artan, URL'nin bir bölümünü temsil eder. Aşağıdaki örnekte, bu 0'ın 'merhaba' olacağı anlamına gelir.
function helloworld_menu() {
$items['hello'] = array(
'page callback' => 'helloworld_page',
'page arguments' => array(0),
);
return $items;
}
function helloworld_page($argument1) {
return $argument1;
}
İpler sözlü olarak gönderilecektir, bu yüzden tekrar array(0, 'world')
çıkmak için kullanılabilir hello world
.
function helloworld_page($argument1, $argument2) {
return $argument1 . ' ' . $argument2;
}
URL’den rasgele verileri kabul etmek için "Joker karakterler" kullanılabilir.
function helloworld_menu() {
$items['hello/%'] = array(
'page callback' => 'helloworld_page',
'page arguments' => array(1),
);
return $items;
}
function helloworld_page($argument1) {
return $argument1;
}
Merhaba / dünyayı ziyaret etmek $argument1
eşit olacaktır world
.
Genellikle bir URL argümanı, örneğin bir varlığı tanımlayan numara olacaktır. Bu kimliği karşılık gelen nesnesine dönüştüren kodu kopyalamaktan kaçınmak için Drupal, "adlandırılmış" joker karakterleri otomatik olarak yükler. Adlandırılmış bir joker karakter kullanıldığında, Drupal, joker karakterle aynı adı taşıyan bir işlevi kontrol eder _load
. Böyle bir işlev bulunursa, URL'deki değerin değeriyle çağrılır ve yükleyici işlevi tarafından döndürülen her şey, orijinal değer yerine geri arama sayfasına iletilir. Drupal, düğüm yükleme için zaten böyle bir işleve sahip olduğundan node_load()
, düğümleri otomatik olarak yükleyip sayfa geri aramasına geçirebiliriz.
function helloworld_menu() {
$items['hello/%node'] = array(
'page callback' => 'helloworld_page',
'page arguments' => array(1),
);
return $items;
}
function helloworld_page($node) {
return t('Hello node (ID = !nid)', array('!nid' => $node->nid));
}
Bazen birden fazla argümana dayanarak daha fazla otomatik yükleme yapmak gerekebilir. Yalnızca adlandırılmış değişken varsayılan olarak yükleyiciye iletildiğinden, açıkça Drupal'a hangi ek yük değişkenlerinin yükleyiciye iletilmesi gerektiğini söylemesi gerekir. Örneğin, bir düğümün belirli bir revizyonunu yüklemek için, node_load()
bir düğüm kimliğine ve bir revizyon kimliğine geçmek gerekir . Bu, aşağıdaki kod ile gerçekleştirilebilir.
function helloworld_menu() {
$items['hello/%node/revision/%'] = array(
'page callback' => 'helloworld_page',
'page arguments' => array(1),
'load arguments' => array(3),
);
return $items;
}
function helloworld_page($node) {
return t('Hello node (ID = !nid, revision ID = !rid)', array('!nid' => $node->nid, '!rid' => $node->vid));
}
'access callback' => TRUE,
Yukarıdaki basit örneği hiçbir zaman görülebilir kılmak için gereklidir, ancak hiçbir zaman kontrol edemediği için pek ideal değildir. Ziyaret etmeye / merhaba girişmeye çalışan herkese erişim hakkı verilecek. Bir miktar kontrol önlemi sağlamanın en kolay yolu, yukarıdan sayfa geri çağırma gibi bir erişim geri çağrısı sağlamaktır. Aşağıdaki kod, yine de herkese erişime izin verir, ancak mantığın erişim zamanında çağrılan bir işleve nasıl taşınacağını ve böylece daha karmaşık bir mantığa izin verildiğini gösterir.
/**
* Implements hook_menu().
*/
function helloworld_menu() {
$items['hello'] = array(
'page callback' => 'helloworld_page',
'access callback' => 'helloworld_access',
);
return $items;
}
/**
* Access callback for /hello.
*/
function helloworld_access() {
return TRUE;
}
Özel bir işlev kullanmak çoğu zaman gereksiz yere kod kopyalayacağından, bu en iyi yol değildir. Çoğu zaman kullanmak için daha iyi bir yol olacaktır user_access()
. Birlikte, geri arama erişimi, erişim argümanlarını ayarlamak mümkündür. Aşağıdaki kod ile sayfanın erişim kullanıcı profilleri iznine sahip kullanıcılar tarafından görüntülenebilmesini istemek mümkündür .
/**
* Implements hook_menu().
*/
function helloworld_menu() {
$items['hello'] = array(
'page callback' => 'helloworld_page',
'access callback' => 'user_access',
'access arguments' => array('access user profiles'),
);
return $items;
}
Varsayılan olarak geri arama erişimi user_access olduğundan, yukarıdaki koddaki gibi bırakılabilir.
Resmi hook_menu()
belgeler, kanca için en karmaşık kullanım durumları hakkında daha fazla bilgi sağlar.
title
mülk, iade edilen tüm ürünler için gereklidirhook_menu()