Kancaların arkasındaki temel kavram nedir?


120

PHP'de orta seviyedeyim. Becerilerimi geliştirmek için Drupal 7 öğrenmeye başladım. Drupal mimari kavramlarını öğrenirken, kancalar ve önyükleme terimleri beni çok şaşırttı. "Pro Drupal development" kitabını ve drupal.org'daki bazı belgeleri okudum, ancak web sayfasını görüntülemek için Drupal'daki kancaların nasıl çalıştığını öğrenmek benim için çok ileri.

Birisi bana hangi kancaların basit kelimelerle olduğunu söyleyebilir mi?

Yanıtlar:


107

Diğer cevaplar harika, doğru, ayrıntılı, ancak sorucunun aradığı kavramın çıplak kemiklerini açıklayan "basit kelimeler" olduklarından emin değilim.

Kanunları, " Duraklatmak için başka bir şey olan var mı? " Herhangi bir modül, buna cevap veren bir işleve sahip olabilir ve kodun bu noktasında kendisine iletilen uygun verilerle tetiklenir.

Güzel ve basit bir örnek, hook_node_delete () 'dir . Herhangi bir modül bir düğüm silindiğinde olayların gerçekleşmesini sağlamak için kullanabilir. Dokümanlar size bu kancanın modülle birlikte çalışacak olan silinmiş düğümün nesnesini geçtiğini ve çağrıldığı zamanın kesin zamanlaması gibi diğer yararlı bilgileri ana hatlarıyla belirtir (örneğin, düğüm verilerinin aslında veritabanından silinmesinden önce olduğu gibi) ve Drupal’ın kodunda kanca olarak adlandırılır (birden fazla yer olabilir).

Hangi kancaların bulunduğunu keşfedebilir ve Drupal api'de "hook_" ile başlayan şeyleri keşfederek onlara hangi verilerin iletildiğini bulabilirsiniz .

Kancalar ad kurallarına göre çalışır: hook_node_deleteörnek olarak kullanarak , düğüm silme işlemi kancanın çağrıldığı noktaya ulaştığında, bunun gibi bir işlevi olan her modül için, kancanın adındaki [modulename]_node_delete()kanca kelimesinin modülün adı ile değiştirildiği (örneğin, my_amazing_module_node_delete()), bu işlevler çağrılır.

Neden? Böylece herhangi bir modül bu kilit noktalarda herhangi bir şey yapabilir: örneğin, silinen düğüme bakabilir ve belirli bir koşulu karşılaması durumunda işler yapabilirsiniz (örneğin, bir yöneticiye e-posta gönderebilir veya uzun bir işlem başlatabilirsiniz).

Bazı kancalar, işlenmeden hemen önce oluşturulan şeyleri değiştirmenize izin verir. Örneğin, hook_menu_alter () , sistemin oluşturduğu geçerli menü öğelerini size iletir . Herhangi bir modül, some_modulename_menu_alter () işlevini tanımlayabilir ve bunlara bakabilir, isteğe bağlı olarak bunları değiştirebilir (bazılarını silebilir, bazılarını ekleyebilir, sıralayabilir ...) ve yeni değiştirilen menüyü geri iletebilir.

Çok basit, gerçekten güçlü ve Drupal'ın modüler bir sistem olarak nasıl çalıştığının kalbinde yer alıyor. Kanca uygulamaları çoğu Drupal modülünün merkezindedir.

Bir Drupal modülünün koduna bakarken, Drupal topluluğu bir kancanın her bir uygulamasının, önünde bunun gibi yorum yapın ("Kanca _..." bitini uygular)

/**
 * Implements hook_some_hook().
 *
 * Some descriptive summary of what this does
 */
function my_amazing_module_some_hook() {

API olarak işlev gören bazı modüller kendi kancalarını tanımlar. Örneğin, Görünümler , bir görünüm oluşturma veya görüntüleme sürecinde çeşitli noktalardaki verileri eklemenize, okumanıza ve düzenlemenize izin veren birçok kanca tanımlar. Özel modüllerde oluşturulan kancalar hakkında iki yerden bilgi alabilirsiniz (modülün kuralları takip ettiği varsayılarak):

Önyükleme, diğerleri açıklandığı gibi, temelde önyüklemedir - diğer açık açıklamaları çoğaltmayacağım.


53

Kancalar, çoğunlukla Ziyaretçi ve Gözlemci kalıplarının uygulamalarıdır.

En yaygın kanca uygulamalarından biri , modüllerin bir Drupal sistemi içinde yeni yollar kaydetmelerini sağlayan hook_menu'dur .

function my_module_menu() {
  return array('myawesomefrontpage' => array(
    'page callback' => 'function_that_will_render_frontpage'
  ));
}

Drupal içinde çok sık model bir yaşıyor [DATATYPE]_infokanca ve [DATATYPE]_info_alterkanca. Yeni bir alan türü oluşturmak istiyorsanız, ilgili field_info -hook komutunu uygulayacaksınız ve mevcut olanı değiştirmek istiyorsanız ilgili field_info_alter -hook komutunu uygulayacaksınız.

Düzenleme: Chx'in yorumlarda işaret ettiği gibi, gözlemci modeli Drupal 7'nin hala çoğu durumda olmadığı nesne yönelimlidir. Bununla birlikte, bir wiki sayfası var, Drupal'ın nesne yönelimli bir perspektiften programlama (4 Nisan 2005 tarihinde JonBob tarafından yaratılmıştır). Ziyaretçilerden değil gözlemcilerden bahsettiğini belirtmek ilginçtir.

Drupal 8 ile ilgili not Bu hala oldukça erken ve değişebilir, ancak kancaların bir süredir Drupal'a işlevsellik eklemek için fiili bir standart olmasına rağmen, eklentilerin konseptinin daha görünür hale geleceğini eklemek istiyorum. Drupal 8’de, ve bize Core ile etkileşime girmenin yeni yollarını verecek. İlgili sorun ve belgeler .


2
OOP tasarım modelleriyle bobo edilmeyin. Bu bir değil. Drupal kancaları AOP. Aşağıya bakınız.

@chx, benden daha iyi bildiğini kabul etmeme rağmen :) ve cevabın doğru (ben oy verdim) cevabımın yanlış olduğunu yorumlamıyorum. :) Kabul etmiyorsanız, uygulamalarının her ikisini de nasıl yanlış anladığımı öğrenmek isterim.
Letharion

4
Vikipedi: "Gözlemci modeli, özne olarak adlandırılan bir nesnenin, gözlemciler olarak adlandırılan bağımlılarının bir listesini tuttuğu bir yazılım tasarım desenidır", burada gözlemci tutan nesne yoktur. Ziyaretçi hayranlık uyandırıcıdır ancak aynı genel ilke geçerlidir: OOP olmayan şey OOP modellerine sahip olamaz.

33

Layman'ın ifadesiyle, kancalar, modüllerin birbirleriyle etkileşimde bulunmalarını sağlayan, birbirlerinin yapısını ve verilerini değiştiren, yeni veriler sağlayan vb.

Çoğu durumda, hook_işlev adlarındaki sözcük , modülünüzün adıyla değiştirilir ve bu, modülünüzün başka bir modülün işlemine girmesi için bir yol sağlar. Örneğin, "düğüm" olarak adlandırılan bir drupal çekirdek modül, çeşitli kancaları çağırır. Bunlardan biri, hook_node_updatemevcut bir düğüm her güncellendiğinde çağrılandır. Bu kanca çağrıldığında, modülünüzün (buna diyoruz mymodule) hook_node_updatedenir (bu durumda modülünüzün .module dosyasındaki bir işlev olacak olan bu uygulama) denir mymodule_node_update(Açıkçası bu işlev modülünüzün klasöründeki herhangi bir dosyada olduğu sürece) .module dosyasına da dahil edilmiştir). Bu kanca ayrıca kullanabileceği, değiştirebileceği ve / veya kancayı başlatan fonksiyona geri dönebileceği gerekli parametrelerden (değişkenler) geçirilecektir.

Drupal'ı ilk öğrenmeye başladığımda, şu anki gibi aynı teknedeydim, ilk başta kavramak biraz zor, ama bir kez yakaladığınızda, bu çok basit ve sezgisel. İyi şanslar.


1
Cevabınız için teşekkür ederim. Bana çok yardımcı olun. Eğer Drupal önyükleme kavramını ve önceki cevabını açıkla olarak nasıl kanca basit bir deyişle ön yükleme tedavi ne söyler misin ..
Gill

@Bayasa, lütfen buraya kendi düşüncelerinizi girin. Sadece kendiminkini ekliyorum. Boostrtapping'i bilgisayarınızı başlatırken düşünebilirsiniz. Drupal'da veritabanı, dosyalar ve formlar dahil olmak üzere birçok API vardır. Bunlar bir "platform" dayanmaktadır. Önyükleme sırasında, Drupal bu işlevleri ve diğer ayarları (veritabanı bağlantısı, dosya klasörleri vb.) Tanımlar, böylece sistemin geri kalanı devam edebilir.
AyeshK

32

Çekirdek geliştiricilerden biri bir süre önce "Nesne yönelimli bir perspektiften Drupal programlama" adlı bir makale yazdı . Kancaların ortak tasarım modellerinin çoğunu uygularken nasıl düşünüleceğini açıklamak iyi bir iş çıkarır . Kancaların en iyi açıklaması makaleden gelir:

Drupal'ın kanca sistemi arayüz soyutlamasının temelidir. Kancalar, bir modül üzerinde veya bir modül tarafından gerçekleştirilebilecek işlemleri tanımlar. Bir modül bir kanca uygularsa, belirli bir görevi gerçekleştirmek veya kanca çağrıldığında belirli bir tür bilgi vermek için bir sözleşmeye girer. Çağıran kodun, kancayı çağırarak işe yarar bir iş elde etmek için modül veya kancanın uygulanma şekli hakkında hiçbir şey bilmesine gerek yoktur.


1
Bu makalenin yazarlığını drupal.org/node/19964

@chx, teşekkürler. Şimdi bu cevabı silmeyi düşünüyorum. Ben b / c yayınladım, çok sade OO işini düz C'de yaptım ve gerçek nesneler olmadan OO kavramlarına alıştım. Ancak, işaret / dokumacı ilişkisi konusunda haklısın. Ancak, alıntı bir yönün (“arayüz soyutlama” bölümünü dikkate almaz) kısmını görmezden gelenin doğru bir açıklaması olup olmadığından emin değilim.
mpdonadio

21

Bootstrap, Drupal'ın temelde sırayla tüm çekirdek, tema ve modül kodu üzerinden çalışan bir sayfa oluşturmak için gerçekleştirdiği süreçtir.
Temelde Drupal'ın nasıl öna çıktığını ve CMS olarak işini yapmaya hazır olduğunu anlatıyor.

Akıllıca, bizim modüllerimizde ve temalarımızda herhangi bir yere kanca koymamıza izin veriyor ve önyükleme işlemi doğru noktalarda çalıştırılmalarını sağlıyor.
Örneğin, bir forma özel bir onay kutusu eklemek için 'hook_form_alter' kullanıyorsanız, Drupal'ın önyüklemesi, bu kodu, formunuzu oluşturmadan hemen önce çalıştırdığından emin olacaktır.

Önyükleme ile ilgili bir sorun, yalnızca küçük miktarda veri döndürüyor olsanız bile, tüm işlemin çalışması zaman alır. Servis modülüyle bir API olarak Drupal kullanılırken ve birçok küçük XHTML veya JSON yanıtı döndürüldüğünde, tüm önyükleme başlığının üzerinden geçmek çok performans göstermez. Bazı zeki insanlar Drupal 8 için bununla ilgili akıllıca yollar arıyorlar.

Ancak normal Drupal sayfalarını oluşturmak için önyükleme işlemi harika çalışır, işleri hızlandırmak için Drupals önbellekleme sistemini kullanır ve sitenizin her bölümü üzerinde tam kontrol sağlar. Sitenizi yavaş bulursanız, işleri hızlandırmaya yardımcı olmak için her zaman APC veya MemCached gibi bir şey kullanabilirsiniz.

Umarım cevabım doğruydu ve işleri sizin için basitçe açıklıyor, uzman değilim, ama nasıl çalıştığını düşünüyorum.


15

Bootstrap , Drupal'ın kendisini başlattığı süreçtir; süreç aslında şunları içerir:

  • Hatayı ve özel durum işleyicileri ayarlama
  • İçinde bulunan bazı spec-global değişkenlerin değeri başlatılıyor $_SERVER
  • Bazı değişkenleri başlatmak init_set()
  • Sunulacak sayfanın önbelleğe alınmış sürümünü bulma
  • Veritabanını başlatma
  • Bir sınıf veya arabirim bulunmadığında dosyaları yükleyen işleyicileri ayarlama
  • Drupal değişkenlerini başlatma
  • PHP oturumunu başlatma
  • Dil değişkenini başlatma
  • Etkin modülleri yükleme

Açıkladığım işlemlerin bazıları Drupal 7 veya daha üstü için özel, ancak işlemlerin çoğu Drupal sürümünden bağımsız.

Kanca, bir görev yapılması gerektiğinde Drupal veya üçüncü taraf modüllerden çağrılabilen bir PHP işlevidir. Önceden çağrılacak bir işlevler listesine sahip olmak yerine, liste etkinleştirilmiş modülleri ve uyguladıkları işlevleri denetleyerek derlenir.
Örneğin, Drupal kullanır hook_node_update(); bir düğüm node_save () ile kaydedildiğinde , aşağıdaki kod çalıştırılır.

// Call the node specific callback (if any). This can be
// node_invoke($node, 'insert') or
// node_invoke($node, 'update').
node_invoke($node, $op);

Node_invoke () ne yapar:

  • Tüm etkin modüllerin listesini alma
  • Etkinleştirilmiş modüllerin adı "_node_update" ile biten ve modülün kısa adı ile başlayan bir işleve sahip olup olmadığını kontrol etme
  • Bu fonksiyonu çağırmak, $nodeparametre olarak geçmek

Kancalar kendi verilerini bir veritabanına kaydedebilir veya bir fonksiyondan döndürülen değeri değiştirebilir. Son durum, örneğin, drupal_prepare_form () öğesine$form referans olarak iletilen değeri değiştiren hook_form_alter () ile olan şeydir .

Drupal kancaları genellikle üç işlev kullanılarak başlatılır:

drupal_alter()amacı, verileri kanca olarak referans olarak geçirilen, bunları kanca olarak biçimlendirmek için kullanılan , hook_form_alter () , hook_hook_info_alter () ve hook_tokens_alter () gibi fonksiyonlardır .

Kancaları çağırmak için kullanılan başka fonksiyonlar da vardır node_invoke(), ancak bu fonksiyonlar daha önce listelediğim fonksiyonlardan birini kullanır.


12

Kancalar kesitlidir ve module_invoke_alldokumacıdır (ne yazık ki uygulamada net değiliz ve başka dokuma fonksiyonları da var). Bildiğim kadarıyla, Drupal, PHP işlevleriyle AOP uygulayan tek sistemdir .

Başka açıklamaya bakın AOP Drupal Nasıl çalışır?


Sizce jhodgdon'un makalesi (cevabımda belirtilen) doğru mu?
mpdonadio

2
Bu, Jonbob'un 2005'ten itibaren yazdığı makale yanlış atıfta bulunuyor. Tartışırım, evet.

6

Kancaları görmek isterseniz Drupal aramanıza izin verir, api.drupal.org adresine gidin , arama kutusuna gidin ve 'hook_' yazın. Bu size Drupal tarafından tanımlanan kancaların büyük bir listesini verecektir. '_Alter' için de aynı şeyi yapın ve daha fazlasını görün.

Düğüm API Kancalar sayfa düğüm işlemleri sırasında çağrılan tüm kanca kronolojik listesini sunmaktadır. Düğüm modülünü ve birbirlerine kanca veren Varlık ve Saha sistemlerini çağırma kancalarında görebilirsiniz.

Örneğin, aşağı kaydırıp aşağıdaki bölüme bakarsanız node_load(): Düğüm modülü size bir hook_load () verir ve ardından kontrolü bazı alanları yükleyen varlık sistemine geçirir. Listelenmemiş bir sürü alan kancası var ve daha sonra hook_entity_load()kontrol sistemi çağırılan Node'a geri dönmeden önce varlık sistemi çağrıldığında biter hook_node_load().

Bu, kodunuza söz konusu düğüme yüklendiğinde, parça parça hareket etme şansı verir. Bu kancaları ve neden ve ne zaman çağırıldıklarını öğrenmek Drupal kodlama macerasının bir parçasıdır. :-)

Diğer sistemlerde de kancalar vardır. Bu şekilde hook_init()ve hook_boot(). Bu, sorunuzun önyükleme bölümüne gider. hook_boot()Önbellekleme sistemi yüklenmeden önce Drupal tarafından çağrılır. Eğer Drupal başlamadan önce modülünüzün bir şey yapması gerekiyorsa ve önbelleğe bakılmaksızın kodunuzun çalışmasını istiyorsanız, uygularsınız hook_boot(). Aksi takdirde, yalnızca önbelleğe alınmamış sayfaları önemsiyorsanız uygularsınız hook_init().

Bu size, Drupal'ın tam önyükleme yapmadan önce, yükleme işleminde erken bir şey uygulama seçeneği sunarken, süreçte hangi noktaya müdahale etmek istediğiniz konusunda bir miktar esneklik sağlar.

Devam etmeden önce Drupal'ın belirli bir noktaya açıldığından emin olmanız gerekiyorsa, arayabilirsiniz drupal_bootstrap(). Bu belgelere tıkladığınızda, hiçbir şeyden her şeye kadar mevcut olan önyükleme seviyelerini görebilirsiniz.

Ve son olarak, Örnekler projesinde verilen herhangi bir alt sistem için kapsamlı olarak belgelenmiş bir kod görebilirsiniz .


OP, Drupal tarafından kullanılan bir kanca listesi değil, bir kanca tanımı istiyor.
kiamlaluno

6

Kancalar php işlevleridir, adlandırma kurallarına dayanan yapı taşları "yourmodulename_hookname", geliştiricilerin modüller yaratmalarını kolaylaştırmak içindir .

Modüller gerçek anlaşma çünkü Drupal sisteminizde hem CORE hem de özel işlevleri etkinleştiriyorlar. Böylece modüller kancalardan yapılır ve Drupal kurulumunuzda bir modül etkinleştirildiğinde, kanca fonksiyonları, module.inc işlevi module_invoke_all ($ hook) veya module_invoke sayesinde diğer modüllerden çağrılabilir .

Bu nedenle, kancaların ne olduğunu doğru bir şekilde anlamak için, ellerinizi gerçekten kirletmeli ve modül geliştirmeyi denemelisiniz. Bu amaçla, Drupal'ın Geliştiricilere Örneklerinden bazılarını indirip deneyerek başlamak için modül oluşturma işlemine de aşina olmalısınız .

Yukarıda belirtilen geliştiriciler için faydalı Drupal'ın örneklerinden bazıları:

block_example modülünde hook_block_view () uygulaması örneği

/**
 * @file examples/block_example/block_example.module line 127
 *
 * Implements hook_block_view().
 *
 * This hook generates the contents of the blocks themselves.
 */
function block_example_block_view($delta = '') {
  //The $delta parameter tells us which block is being requested.
  switch ($delta) {
    case 'example_configurable_text':
      // The subject is displayed at the top of the block. Note that it
      // should be passed through t() for translation. The title configured
      // for the block using Drupal UI supercedes this one.
      $block['subject'] = t('Title of first block (example_configurable_text)');

Bu kanca, web sitenizde özel bloklar görüntülemek için Drupal'ın blok oluşturma işlemine erişmenizi sağlar. Block.module, tüm modüllerin hook_block görünümünü tanımlamasını sağlayan bir _block_render_block işlevine sahip olduğu için mümkündür (son satırdaki module_invoke dikkat edin):

/**
 * @file modules/block/block.module, line 838
 *
 * Render the content and subject for a set of blocks.
 *
 * @param $region_blocks
 *   An array of block objects such as returned for one region by _block_load_blocks().
 *
 * @return
 *   An array of visible blocks as expected by drupal_render().
 */
function _block_render_blocks($region_blocks) {
  ...
  foreach ($region_blocks as $key => $block) {
    ...
    $array = module_invoke($block->module, 'block_view', $block->delta);

render_example modülünde hook_menu () uygulaması örneği

/**
 * @file examples/render_example/render_example.module line 22
 * 
 * Implements hook_menu().
 */
function render_example_menu() {
  ...
  $items['examples/render_example/arrays'] = array(
    'title' => 'Render array examples',
    'page callback' => 'render_example_arrays',
    'access callback' => TRUE,
  );

Bu kanca, Drupal'ın url yönlendirme sistemine bağlanır ve modülünüz tarafından kullanılan ilişkili render geri çağırmalarıyla url kalıplarını tanımlar. System.module'den çağrılır .

Önyükleme hakkında, temel olarak, yalnızca her sayfa isteğinde yürütüldüğünü bilmeniz gerekir. Bu yığın akışı cevabını okumanızı gerçekten tavsiye ediyorum , önyükleme ve kancaların birbirleriyle nasıl bağlantılı olduklarını açıklıyor.

Web sayfasının gösterimi ile ilgili olarak, Drupal'ın web sitesi html ekranı çoğunlukla render dizileri ve temalarla sağlanır.


3

Her yerde bir modül module_implements çağırır () http://api.drupal.org/api/drupal/includes%21module.inc/function/module_implements/7 Drupal kendi ağırlığına dayalı olarak doğru sırayla doğru adlı tüm işlevleri tetiklenir. Bunlara hook işlevleri denir, çünkü module_implements kullanan modüllerin belgelerinde hook_menu gibi şeyler görürsünüz (menü, menü öğelerini döndürmek için tasarlanmış tüm işlevleri çağırdığında). "Kanca" kelimesi sadece onu uygulayan modülün ismiyle değiştirilmelidir ve gerisini Drupal yapar.

Ayrıca, daha önce başka bir kanca tarafından kaydedilmiş olan şeyleri değiştirmenize izin vermek amacıyla, doğru şekilde adlandırılmış tüm değiştirme işlevlerini ateşleyen bir drupal_alter () işlevi de vardır.

Genelde değiştirmeler referanslarla argümanları iletir, böylece nesneyi doğrudan düzenleyebilirsiniz, oysa "normal" kancalar genellikle yeni şeyler döndürmenizi sağlar.

Buradaki fikir, Drupal'a gerekli tüm kanca fonksiyonlarını çağırmasını ve işlenmeye geri döndüklerini geri almalarını isteyerek herhangi bir modülün (kendiniz dahil) kolayca genişletilebilmesidir. Kanca işlevlerini çağıran modülün, kancayı uygulayan modüller hakkında hiçbir şey bilmesine gerek yoktur ve kancayı uygulayan modüllerin kancayı çağıran modül hakkında hiçbir şey bilmesi gerekmez. Her iki modülün de bilmesi gereken tek şey, iade edilen veya değiştirilen verinin yapısıdır.

Uygulamada kancalar en sık kullanılanlar:

  • Kullanıcı oturum açtığında hook_user_login adı verilen gibi olaylara yanıt verin
  • hook_menu gibi sistemi genişletmek için kullanılabilecek yeni bir şey kaydedin.
  • tema / render html veya derleme / onaylama / form gönderme

1

Yukarıda çok fazla cevabınız var ancak kancaların arkasındaki en temel konsepti anlamak için çok daha basit bir şekilde cevap vermek istiyorum. Kancalar aslında farklı şeyleri yönetmek için drupal çekirdeğin içindeki işlevlerde yerleşiktir ve çekirdekte farklı işler yapar, kendi işlevlerinizi farklı kancalar çağırarak işlevlerinizi eklemek için kendi işlevlerinizi drupal çekirdeğin yerleşik işlevleriyle senkronize edebilirsiniz.

Umarım puan alırsın!


1

Bana göre bu tamamen kanca ve çekirdeğe gelince module_implements işlevidir (D7). Anlamanızın çok önemli olduğunu düşündüğüm şeylerden biri, bir şeyi değiştirmek için bir kanca yazarak, uğraştığınız veri yapılarına ne olacağı konusunda hiçbir son söz sahibi olmadığınızdır. Kancanız, menüler, menu_links, bloklar, düğümler, kullanıcılar veya herhangi bir varlık ya da oluşturma elemanı olsun, aynı veri yapılarına etki eden, aynı zamanda, aynı zamanda, aynı zamanda, aynı zamanda, aynı zamanda, aynı zamanda, aynı zamanda, aynı zamanda, herhangi bir varlık ya da oluşturma elemanı da olan fonksiyonların sırasına girer.

Bu yüzden, kancalarınızın gerçekten beklenen bir şekilde kullanıldığını görmek için (kancanızın) nerede durduğunu bilmeniz veya bilmeniz gerekir. Bu, mondülünüzün ağırlığına göre belirlenir. Drupal çekirdeği, artan ağırlık sırasına göre uygun şekilde adlandırılmış kancaları çağırır ve verilere ne olursa olsun olur.

Kancaları daha önce bir etkisi olmayan, sadece modülün ağırlığımın çok hafif ve alt sıralı kancaların yaptığım şeyi yapmadan ya da tamamen göz ardı ederek yaptıklarını etkili bir şekilde çözdüklerini saatlerce öğrendikten sonra yazdım.

İyi yazılmış bir kanca, "elleçleme" ya da "son" olmaya "zorlama" dır, ancak veri yapılarını, kancanın geri kalan kısmında beklendiği gibi sürdürdüğünden emin olarak "başkalarına güzel bir şekilde yerleştirir".

Ve kancaların "Çizgisinden" bahsederken. Yıllar boyunca Drupal işleri için google'da bulundum, bu görüntü ön işleme ve süreç kancası olasılıkları listesinin iyi bir temsili gibi görünüyor.
görüntü tanımını buraya girin


1

Kancalar, çok daha basit bir şekilde, geliştiricinin mevcut kodu değiştirmeden var olan işlevselliği gereksinimlere göre değiştirmesine yardımcı olur. Daha fazla php Özet fonksiyonu gibi.

Örnek: Otobüs bileti rezervasyonu için bir modül oluşturdunuz. Bilet bir kez rezerve edildiyse, kodunuza göre alma konumu düzenlenebilir değildir; bu proje için sizin gereksiniminizdir. Kullanıcının alma yerini değiştirebilmesi haricinde, arkadaşınızın da benzer gereksinim için aynı modüle ihtiyacı olduğunu varsayalım. Bir şekilde modülünüzü kullanmak zorunda ve sizden kod değişikliği yapmasını istemiyorsunuz. Yani modülünüzde değişiklik yapmadan değişikliklerini uygulayabileceği bir arayüz (bizim durumumuzda kanca).

Drupal-7'den drupal'da modüllerin yanı sıra temalar için de kancalarımız var. Kanca çalışmaları denetlemek bilirsen drupal.org olan kancalar bu özel kanca çek oluşturmak için linki


0

Kancalar. Modüllerin Drupal çekirdeği ile etkileşime girmesine izin verin. Drupal'ın modül sistemi "kanca" kavramına dayanmaktadır. Kanca, foo_bar () adında bir PHP işlevidir; burada "foo", modülün adıdır (bu nedenle dosya adı foo.module'dir) ve "bar", kancanın adıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.