Birlikte ilk özel drupal 8 modülümüzü oluşturalım
Drupal 8 (neredeyse) burada ve bir geliştiriciyseniz, artık Drupal 8 modül geliştirme öğrenmeye başlamanın zamanı geldi. Drupal 8'deki modül geliştirme, Drupal 7'den büyük bir değişime işaret ediyor. Bu, Drupal 8 geliştirme öğrenme sürecinde ilerleyeceğim bir dizi ilk öğreticidir. Bu derste oluşturduğumuz modül, olduğu kadar basittir ve modül yapısına bir fikir edinmenize yardımcı olmayı amaçlamaktadır.
Başlamadan önce, Drupal 7 modül geliştirme ile bazı önemli farklılıklara değineceğiz. Aşağıda, bu öğreticide kullanılacak kavramların listesi verilmiştir:
- Drupal 8 nesneye () yöneliktir ve Drupal 7 öncelikle usule uygundur. Bu, kodunuzun birçoğunun artık basit işlevler yerine sınıflarda olacağı anlamına geliyor. Birçokları için çok zor olacak, ancak kesinlikle modül geliştirme daha esnek olacak ve süreçlerinizde yeteneklerinizi modern programlama uygulamasına geçireceksiniz
- Her sınıfın bir ad alanına ihtiyacı olacaktır. Ad boşluğu, sınıfınızın aynı adlı başka bir sınıfla çakışmamasına dikkat edin. Bir dosya sisteminde bir dizin gibi düşünebilirsiniz. Farklı dizinlerde aynı adı taşıyan iki dosyaya sahip olabilirsiniz.
- Drupal harici kütüphaneleri kullanır ve genişletir
- Drupal 8, .info dosyaları yerine .yml dosyalarını kullanır. .yml dosyaları menü öğelerini, sekmeleri vb. tanımlamak için de kullanılır.
- Bir URL'yi geri arama işlevine eşlemek için hook_menu () kullanmanız gerekmez. Bu artık bir menü sınıfı ve bir rota tarafından halledilir.
- Drupal 8, değiştirilebilir işlevsellik parçaları sağlayan eklentileri kullanır. Eklentiler hakkında daha fazla bilgi için - Joe Shindelar'ın Drupalize.me 'deki açıklamasına göz atın.
- Drupal 8, PHP ek açıklamalarını kullanır. Ek açıklamalar PHP yorumlarını içeriyor ve bir sınıf hakkında hayati bilgiler içeriyor. Drupal 8 eklenti sistemi bunları eklentileri tanımlamak için kullanır ve eklentinizi keşfetmek için Drupal tarafından kullanılırlar.
Not: Bu öğreticide yazılmış olan bir çok kod, generate:module, generate:controller ve generate:plugin: block komutlarını (İpucu için teşekkürler, Jesus Manuel Olivas'a ) Drupal Konsolu tarafından oluşturulabilir; dolayısıyla gerçekte yeni bir özel modül oluşturduğunuzda kendiniz kodlayın. Fakat öğrenme amaçları için önce bunu elden yapmaktan hoşlanırım.
Modülünüzü adlandırın
Drupal 7'de olduğu gibi, ilk iş modülün adını vermektir. Sistem boyunca kullanılacak bir makine adı oluşturmamız gerekiyor. Makine adları, modülünüzdeki işlev ve yöntemlerde kullanılır. Modülünüzün adlandırılması hakkında daha fazla bilgi için, [adlandırma ve Drupal 8 modülünüzün yerleştirilmesi] bölümünü drupal.org'da kontrol edin.
Bu modül First Modülünü first_module adlı bir makine adıyla arayacağım .
Modül klasörünü oluştur
Drupal 7'de, çekirdek modülleri / modules dizininde bulunur ve özel ve katkıda bulunan modüllerinizi, siteler / all / modules dizini veya siteler / sitename / modules dizinine yerleştirmelisiniz. D8'de çekirdek modülleri / core dizinine girersiniz, böylece contrib ve özel modüllerinizi / modules dizinine yerleştirebilirsiniz. Drupal 7 uygulamasıyla sadık kalacağım ve onları siteler / hepsi / modüller halinde koyacağım.
- Tüm sitelerde / sitelerde yeni bir dizin oluştur
- İçinde her şey bir dizin modülleri yaratır
- Tüm dizinin içinde first_module adlı dizini oluşturun
Bir bilgi yaml dosyası oluştur
Drupal'a modülünüzün var olduğunu söylemek için bir info yaml dosyası oluşturmanız gerekir. Bu, Drupal 7'de bir .info dosyası oluşturmakla benzer.
Dosya adı, .info.yml uzantılı modülünüzün makine adı olmalıdır. Bu durumda, ilk_module.info.yml olacaktır.
- First_module.info.yml dosyasını first_module dizininin kök dizininde oluşturun.
name: First Module description: An experimental module to build our first Drupal 8 module package: Custom type: module version: 1.0 core: 8.x
.yml dosyaları hakkında daha fazla bilgi .
.module dosyası oluştur
Drupal 7'de, herhangi bir kod içermese bile .module gereklidir. Drupal 8'de isteğe bağlıdır. Kancaları uygulamak istiyorsanız daha sonra kullanılabilecek bir tane oluşturacağım.
- First_module dizininin kök dizininde first_module.module adlı bir tane oluşturun.
Src dizini oluştur
Denetleyiciler, eklentiler, formlar, şablonlar ve testler için modül dizini içinde bir alt dizin oluşturmamız gerekir. Bu alt dizin kaynağı olarak kısa olan src olarak adlandırılmalıdır. Bu, denetleyici sınıfının otomatik olarak yüklenmesine izin verecek ve bu da sınıf dosyasını açıkça eklemeniz gerekmediği anlamına geliyor.
- Kaynak adı kısa olan
src
adlı first_module modül klasöründe bir klasör oluşturun.
Basit bir denetleyici oluştur
Denetleyiciler, işin çoğunu tipik bir MVC uygulamasında yapar. Modül için temel denetleyiciyi oluşturma adımları şunlardır:
- Controller adlı src içinde bir klasör oluşturun.
- Controller klasörü içinde FirstController.php adlı bir dosya oluşturun.
FirstController.php'de, çalıştığını bildiğimizden basit bir "merhaba dünya" mesajı oluşturacağız.
<?php /** * @file * Contains \Drupal\first_module\Controller\FirstController. */ namespace Drupal\first_module\Controller; use Drupal\Core\Controller\ControllerBase; class FirstController extends ControllerBase { public function content() { return array( '#type' => 'markup', '#markup' => t('Hello world'), ); }
Bir rota dosyası ekle
Yukarıda oluşturduğumuz kumanda birimi bu aşamada hiçbir şey yapmayacaktır. URL'nin yürütülebilmesi için onu URL'den denetleyiciye giden bir rotaya bağlamamız gerekir.
- First_module.routing.yml adlı bir dosya oluşturun
- Aşağıdaki kodu first_module.routing.yml'a ekleyin
first_module.content: path: '/first' defaults: _controller: 'Drupal\first_module\Controller\FirstController::content' _title: 'Hello world' requirements: _permission: 'access content'
Içeriği izle
Henüz yapmadıysanız, modülü etkinleştirin.
Şimdi / ilk giderseniz, denetleyiciden geri gönderilen Merhaba Dünya iletisini görürsünüz.
Menü bağlantısı oluştur
Rota şimdi çalışır ve denetleyiciden içerik döndürür. Ancak, içeriğe erişebilmek için URL'yi bilmeniz gerekir. Bunu daha kullanışlı kılmak için, onu Drupal'ın menü sistemine eklememiz gerekiyor. Bunu yapmak için, bir menü .yml dosyası oluşturmanız gerekir.
- Modül kök dizininde first_module.links.menu.yml oluşturun
- Aşağıdakileri ekleyin:
first_module.admin: title: 'First module settings' description: 'A basic module to return hello world' parent: system.admin_config_development route_name: first_module.content weight: 100
- Önbelleği boşaltın ve ardından yapılandırma -> geliştirme altında menü öğesini görmeniz gerekir.
- Menü maddesini tıkladığınızda ilk önce sizi götürecektir.
Ve işte bu, bir şey getiren bir menü öğesiyle ilk Drupal 8 modülünüz!
Özel bir blok
Şimdiye kadar, bir başlık ve dizeyi görüntüleyen bir özel yolumuz ve menü öğemiz var. Biraz daha heyecan verici bir şey yapalım ve modüle özel bir blok ekleyelim.
Öncelikle, modül için yeni bir eklenti yaratmamız gerekiyor. Eklentiler Drupal 8'de yenidir ve değiştirilebilir işlevsellik parçaları sağlar.
- Başlamak için modülün Plugin adlı src klasöründe yeni bir dizin oluşturun. Burası bu modül için tüm eklentilerinizi depolayabileceğiniz yerdir.
- Ardından Blok adlı bir klasör oluşturun. Blok, bir eklenti türüdür.
- Block klasöründe, HelloBlock.php adlı bir dosya oluşturun.
Bu dosyada, ad alanını ve sınıfı tanımlamamız gerekir. PHPStorm gibi bir IDE kullanırsanız, bu otomatik olarak oluşturulacaktır.
<?php namespace Drupal\first_module\Plugin\Block; class HelloBlock extends BlockBase { }
BlockCase sınıfını genişletmeniz gerekiyor. Bunu yapmak için, aşağıdaki use ifadesini ekleyin:
Drupal \ Core \ Block \ BlockBase kullanın;
Ve daha sonra HelloBlock sınıfını HelloBlock'a geçirirken BlockBase genişletir.
<?php namespace Drupal\first_module\Plugin\Block; use Drupal\Core\Block\BlockBase; class HelloBlock extends BlockBase { }
Blok için kullanmamız gereken Drupal için bir başka yeni kavram, Ek açıklamalar. Drupal'ın blok kodunuzu bulması için, bir Açıklamayı çağıran belirli bir şekilde bir kod yorumlaması uygulamalısınız.
- Aşağıdaki yorumu ekleyin : class HelloBlock, BlockBase'yi genişletir :
/** * Provides a 'Hello' Block * * @Block( * id = "hello_block", * admin_label = @Translation("Hello block"), * ) */
Ardından, dokümanları temel sınıftan devralmamız ve blok içeriğini döndürecek bir yapı yöntemi eklememiz gerekiyor.
class HelloBlock extends BlockBase { /** * {@inheritdoc} */ public function build() { return array( '#markup' => $this->t('Hello, World!'), ); } }
HelloBlock.php'nin tam kodu
<?php /** * @file * Contains \Drupal\first_module\Plugin\Block\HelloBlock. */ namespace Drupal\first_module\Plugin\Block; use Drupal\Core\Block\BlockBase; /** * Provides a 'Hello' Block * * @Block( * id = "hello_block", * admin_label = @Translation("Hello block"), * ) */ class HelloBlock extends BlockBase { /** * {@inheritdoc} */ public function build() { return array( '#markup' => $this->t('Hello, World!'), ); } }
Blok Yeri
Sonra önbelleği temizlemeniz gerekir. Ve sonra bloğu bir bölgeye eklemek için, bloklar admin sayfasına gidin. Blok, yan çubuğun ilk bölgesine eklemek için Yerleştir bloğunu tıklayın.
Mevcut blokların bir listesi ile bir model görüntülenir. Yeni oluşturduğunuz Merhaba bloğu bulmak için merhaba arayın. İşlemler sütunundaki Blok yerleştir düğmesini tıklayın.
Daha sonra bloğun yapılandırma formunu göreceksiniz.
kayıt edin.
Ardından, bloklar düzen sayfasının en altına gidin ve blokları kaydet'i tıklayın. Şimdi bloğu sitenizin sol kenar çubuğunda görmelisiniz.
Dosya yapısına genel bakış
Yukarıdaki adımları tamamladıktan sonra, aşağıdaki gibi bir dosya yapısına sahip olmalısınız:
Özet
Bu öğreticide, temel bir Drupal 8 modülü oluşturdunuz, bir dize döndüren ve özel bir blok oluşturan bir denetleyiciye bir URL eşleştirdiniz. Kavramlar bu aşamada tamamen yabancıysa endişelenmeyin. Sadece pratik yapmaya devam edin ve zamanla her şey netleşecektir. Ve unutmayın, yalnız değilsiniz - Drupal 8'e geçiş, tüm Drupal topluluğunun başlattığı bir yolculuk. Drupal konusunda desteğe ihtiyaçınız olursa ilettişim kurmaktan çekinmeyin.
Mutlu kodlamalar :)