Drupal

Drupal 8 de "jQuery error - JQuery is not defined " Hatası Nasıl Çözülür ve jQuery Nasıl Tanımlanır.

drupal jquery

Drupal 8'de "jQuery is not defind" gibi bir hataya ne sıklıkla rastlıyoruz? Çoğu zaman karşılaşıyoruz. Bu durumda, hata drupal js davranışında drupal ayar argümanı geçirerek çözülebilir. Kullandığınız temanın theme.libraries.yml dosyasında, aşağıdaki satırı global komut dosyası etiketinize ekleyin.

dependencies:
    - core/jquery
    - core/drupal
    - core/drupalSettings 

İlk adımla işiniz bittiğinde, chache'ı temizleyin. Drupal JS davranışınızı (JS kodunuzu yazdığınız yer) açın ve bu argümanları drupal js davranış dosyanızda tanımlayın.

(function($, Drupal, drupalSettings) {

  Drupal.behaviors.behaviorname = 

           ---  code ----

  };

 })(jQuery , Drupal, drupalSettings);

Bu JQuery hatasını çözmek için basit bir yöntemdir.

Mutlu kodlamalar

Geliştirme Sırasında Drupal 8 Önbelleğini Devre Dışı Bırakmak

disable page cache drupal 8

Drupal 8' in birçok önbelleğe alma düzeyine sahip olduğunu biliyoruz. Bunlardan bazıları Render önbelleğe alma, Dinamik sayfa önbelleği, Twig şablon önbelleği gibi..

Bir modül veya bir tema geliştirirken, her değişiklik için önbelleği temizlemek yerine önbelleği geliştirme aşamasında devre dışı bırakmak daha kullanışlıdır. Geliştirme aşamasında oldukça fazla zamandan tasarruf sağlar. Bunun için basit bir şekilde önbellekleme sürecini etkin bir şekilde kapatmayı anlatıcak bir yazı olucak.

 

Adımlar:

 

1-) sites/example.settings.local.php dosyasını kopyalayıp sites/default/settings.local.php yeniden adlandırın.

2-) settings.local.php dosyanızda, "Disable the render cache"." ile başlayan bölümü bulun.

 

3-) $settings değişkeninindeki "#" işaretini kaldırın. Aşağıdaki örnekte olduğu gibi bırakın.

  Örn: $settings['cache']['bins']['render'] = 'cache.backend.null';

4-) Dynamic page caching: Dinamik sayfa önbelleğe alma, Drupal'ın bir sayfanın tüm oluşturulmuş çıktısını alması ve onu veritabanına (veya başka bir önbellek deposuna; varsayılan olarak ) kaydetmesidir. Sayfalar yalnızca anonim trafiğe ve alışveriş sepetindeki öğeler gibi oturum verilerine sahip olmayan kullanıcılar için önbelleğe alınır.

5-) settings.local.php dosyanızda, Disable Dynamic Page Cache" ile başlayan bölümü bulun.

6-) $settings değişkenindeki "#" işaretini kaldırın. Aşağıdaki örnekte olduğu gibi bırakın.

  Örn: $settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null';

7-) " sites/default" klasöründe settings.php dosyasını açın ve "settings.local.php" ile başlayan bölümü bulun.

8-) "#" işaretini kaldırın. Aşağıdaki örnekte olduğu gibi bırakın.

  Örn:

 

if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {

 include $app_root . '/' . $site_path . '/settings.local.php';

}

9-) sites klasöründeki development.services.yml dosyasını açın ve aşağıdaki satırları ekleyin (twig önbelleğini devre dışı bırakmak için)

parameters:

 twig.config:

   debug: true

   auto_reload: true

   cache: false

 

10-) Son olarak development.services.yml aşağıdaki gibi olmalıdır:

11-) Yukarıdaki adımlardan sonra, Drupal önbelleğini yeniden oluşturmanız gerekir.

drush cache-rebuild

drush cr

 

Şimdi blogdaki adımlar eksiksiz yapıldıktan sonra, Drupal'ın önbellekleme sistemi etkin bir şekilde kapatılmıştır.

Mutlu kodlamalar

Hızlı İpucu: Drupal 8'i Composer ile kurun!

Composer

Drupal 8 ile başlamak için önerilen yaklaşım şimdi composer üzerinden kurulum yapmaktan geçiyor. Bunun için resmi proje şablonu oluşturuldu. Projemizi doğrudan Packagist'te bulunan şablonu kullanarak oluşturacağız.

Öncelikle Composer Kurulumu ile ilgili yazımıza göz atabilirsiniz

Bu şablonu temel alan yeni bir proje oluşturmak için aşağıdaki composer komutunu çalıştırabiliriz:

 

composer create-project drupal-composer/drupal-project:8.x-dev projeadi --stability dev --no-interaction

Bu composer komutu, şablonu Packagist'ten alacak ve projemizi yükleme ve hazırlamak için birkaç Drupal'a özgü scripts çalıştıracaktır. Yapılması gereken tek şey, tarayıcımızı /web dizinine (index.php dosyasının bulunduğu yerden) yönlendirmek ve yükleyiciyi her zamanki gibi çalıştırmaktır.

Bu şablon, diğer şeylerin yanı sıra artık Drupal çekirdeğindeki (index.php dosyası veya modüller ve temalar klasörleri) bir parçası sayılmayan bir Drupal yüklemesinin ana klasörlerini içeren bir /web klasörü ile birlikte gelir. Buna ek olarak, Drupal tarafından kullanılan bir autoload.phpdosyası sadece composer vendor/ dizinine işaret eden bir klasörle birlikte gelir. Böylece bütün PHP kütüphaneleri artık tek bir yerden ele alınıyor.

Şablonun composer.json dosyası, en son kararlı Drupal çekirdeği + Drush ve Drupal Console gibi ek yardımcı araçlar gerektirir. Buna ek olarak, Drupal tarafından özel paketleyici havuzunu, Drupal tarafından katkıda bulunan modülleri, temaları ve profilleri (otomatik olarak doğru yere yerleştirilen) yükleyebildiğimiz yerden ekliyor. Drupal tarafından eklenen bir modül eklemek istersek, onu Drupal specific Packagist'te bulmalı ve projemizde Composer ile bunu yapmamız gerekiyor:

'Modul kurulumu için'

composer require drupal/ctools

Bu komut Ctools modülünü doğrudan web/modules/dizinimize ekleyecek ve composer.json dosyasını güncelleyecektir.

 

Proje şablonu ayrıca, .gitignore dosyasıyla birlikte gelir ve Drupal çekirdeğini ve Git'in dışındaki katkıda bulunan tüm paketleri normal vendor/composer.json dosyasına dayanarak, daha küçük bir Git depoyu idame ettirebilir ve projemizi istediğiniz zaman yeniden oluşturabilirsiniz. Drush Make'in yararlarının birçoğu artık compser akışına dahil edilmiştir.

Drupal Drush Kurulumu

/user/local/bin/composeri /usr/bine sembolik bağlantı oluşturuyoruz.

sudo ln -s /usr/local/bin/composer /usr/bin/composer

DRUSH yazılımını github'dan çekiyoruz.

sudo git clone https://github.com/drush-ops/drush.git /usr/local/src/drush

DRUSH dizinine giriyoruz.

cd /usr/local/src/drush

https://github.com/drush-ops/drush/releases adresine girip, indirdiğimiz yazılımı test edelim.(1 mart tarihinde 9.2.1 sürümündeydi.)

sudo git checkout 9.2.1

Herhangi bir dizinden drush çağırabilmek için; /usr/local/srcden /usr/bin altındaki drush a sembolik bağlantı ekliyoruz.

sudo ln -s /usr/local/src/drush/drush /usr/bin/drush

Composer ile yükleyelim.

sudo composer install

Yukarıdaki adımları sorunsuz hallettiyseniz, başarıyla kurdunuz demektir. :)

drush --version

Sonuç

Drupal 8 diğer büyük PHP yazılımlarını geliştirmede çok yol kat etti. Compser yoluyla, ana proje olarak veya daha büyük bir uygulama setinin parçası, olarak tam olarak yönetilebilmesi, topluluk tarafından verilen çabanın kanıtıdır.

Mutlu kodlamalar

Drupal'de Özel Drush Komutları Oluşturma

Drupal'de Özel Drush Komutları Oluşturma

Kendi özel Drush komutlarınızı oluşturmak çok basittir. Bu blog yazısında Drupal 7 ve Drupal 8 için iki misal göstereceğiz

Özel Drush komutları oluşturmak, bilgileri Drupal'a içe aktarmanız veya bilgileri Drupal'dan dışa aktarmanız gerektiğinde çok faydalı olabilir. Özel komutunuzu çalıştırıp bash komut dosyasını crontab'a ilave edeceğiniz ayrı bir bash komut dosyası yaratmanız gerekiyor

Drupal 8 örneği

Drupal 8 modülü yapısı:

drush_example/
  - drush_example.info.yml
  - drush_example.drush.inc

drush_example.info.yml:,

name: Drush Example command
description: Drupal 8 custom drush command example
type: module
core: 8.x

drush_example.drush.inc

/**
 * Implements hook_drush_command().
 */
function drush_example_drush_command() {

  $commands['my-example-command'] = [
    'description' => 'This is my example command.',
    'aliases' => ['mec'],
    'arguments' => [
       'arg1' => 'My custom argument 1.',
       'arg2' => 'My custom argument 2.',
     ],
     'options' => [
       'opt1' => 'My custom option.',
     ],
     'examples' => [
       'drush mec' => 'Print my example command.',
       'drush mec myargument' => 'Print my example command with an argument "myargument".',
       'drush mec myargument --opt1=myoption' => 'Print my example command with an argument "myargument" and an option "myoption".',
     ],
  ];

  return $commands;
}

/**
 * Drush command logic.
 * drush_[MODULE_NAME]_[COMMAND_NAME]().
 */
function drush_drush_example_my_example_command($arg1 = 'N/A', $arg2 = 'N/A') {
  $opt1 = drush_get_option('opt1', 'N/A');
  $tokens = ['@arg1' => $arg1, '@opt1' => $opt1];
  drush_print(dt('My custom command. Argument: @arg1 Option: @opt1', $tokens));
}

Drupal 7 örneği

D7 örnek modülü için aşağıdaki yapıyı kullanacağız:

drush_example/
  - drush_example.info
  - drush_example.module (empty .module file)
  - drush_example.drush.inc

drush_example.info:

 

name = Drush Example command 
description = Drupal 7 custom drush command example
core = 7.x

drush_example.drush.inc

/**
 * Implements hook_drush_command().
 */
function drush_example_drush_command() {

  $commands['my-example-command'] = array(
    'description' => 'This is my example command.',
    'aliases' => array('mec'),
    'arguments' => array(
       'arg1' => 'My custom argument 1.',
       'arg2' => 'My custom argument 2.',
     ),
     'options' => array(
       'opt1' => 'My custom option.',
     ),
     'examples' => array(
       'drush mec' => 'Print my example command.',
       'drush mec myargument' => 'Print my example command with an argument "myargument".',
       'drush mec myargument --opt1=myoption' => 'Print my example command with an argument "myargument" and an option "myoption".',
     ),
  );

  return $commands;
}

/**
 * Drush command logic.
 * drush_[COMMAND_NAME]().
 */
function drush_my_example_command($arg1 = 'N/A', $arg2 = 'N/A') {
  $opt1 = drush_get_option('opt1', 'N/A');
  $tokens = array('@arg1' => $arg1, '@opt1' => $opt1);
  drush_print(dt('My custom command. Argument: @arg1 Option: @opt1', $tokens));
}

Mutlu kodlamalar

Neden Drupal'i seviyoruz?

we love drupal

Drupal'i bu kadar sevmemizin nedeni nedir?

Aslında Drupal'i niçin sevdiğimiz ile ilgili tonlarca neden yazabilirdim. Fakat Drupal'i öne çıkaran sevmemizi sağlayan ve bizim yoğun olarak kullandığımız özelliklerini anlatmak daha yerinde olur.

Önce Drupal'i tanıyalım;

Drupal Nedir? Drupal açık kaynak kodlu dünyanın en esnek ve güvenilir içerik yönetim sistemidir.

Kimler kullanıyor? Drupal, hayal gücünüz ve bilginiz dahilinde hemen her türlü web sitesi inşasında kullanılabilmektedir. Dünya çabında örnek vermek gerekirse; Sony, Sun Microsystems, MTV, FedEx, Electronic Arts, Warner Bros, Universal Music, Nike, Yahoo, Birleşmiş Milletler, Greenpeace, Ubuntu, Playboy, NASA ve daha birçok tanınmış firma ve kuruluş çeşitli projelerinde Drupal kullanmaktadır.

Drupal temel özellikleri nelerdir?

Esneklik: Drupal o kadar esnek platformdur ki, sahibi olmak istediğiniz sosyal ağ siteleri, kurumsal siteler, podcasting topluluk siteleri, forumlar, intranet uygulamaları, e-ticaret siteleri, bloglar, galeriler, haber bültenleri ve daha niceleri projenizde kullanmak istediğiniz web sayfalarına dönüşebilir.

Sadelik: Sezgisel kullanıcı arayüzü, modüler ve taksonomi yapısı harika ötesidir. Her türlü kurgularda anlaşılabilinir. Drupal ile çalışmak daha kolay olamazdı!

Yüksek Performans: Drupal, yogun trafik içeren web siteleri için yüksek performans sağlamak üzere yapılandırılabilir. Drupal'in verimli bir şekilde önbellekleme yeteneği vardır. Yük dengeleme için birden çok sunucu üzerinde çalıştırmak için de yapılandırılabilir. Sunucu üzerinde önbellekleme sistemleri kurarak ve projelerinizde bu kuruluma entegre ederek, sorunsuz şekilde yüksek performanslı sitelere sahip olabilirsiniz.

Genişletilebilir ve yapılandırılabilir: Drupal'de 30 binden daha fazla modül vardır. İhtiyaca göre Drupal Api'lerini kullanarak yaratılmaya çalışılan projenin daha fazla özellik kazanması için modul yazılabilir. Genişletilebilir bir mimariye sahiptir. Drupal AJAX, AHAH, JavaScript, Flash, vs.. dahil olmak üzere mevcut web 2.0 teknolojilerinin tam entegrasyonu ile kullanmak için idealdir.

Arama motoru optimize: Sayfaları arama motorlarına daha uygun hale getirmek için Drupal anlamlı linkler oluşturabilir. Drupal, sayfalarını arama motorlarına çekici kılabilmek için ön sayfa içeren bir veritabanından anında oluşturur.

Güvenilir ve kararlı: Drupal web üzerinde güvenli ve kararlı olarak çalışır. Web sitelerinde güvenlik açıklarından yararlanan kullanıcıların spam gönderilerine engel olmada ve web sitesinin kodlarını korumada Drupal çok başarılıdır. Güvenlik ekibi tarafından güvenlik mesajları, güvenlik yamaları, güvenlik ihlalleri tespit edilir. Bu tespitler kolay ve hızlı bir şekilde sitelere aktarılabilir.

Maliyet: Özgür bir yazılım olan Drupal ücretsiz olduğundan tasarım, içerik, düzen ve pazarlama faaliyetlerinde diğer sistemlere göre daha ekonomiktir.

Yaygın olarak pek çok geliştirici tarafından desteklenmektedir: Drupal açık kaynak yazılım GPL lisansı ile dağıtılan ("GNU Genel Kamu Lisansı") ve korunan, kullanıcıları ve geliştiricileri milyonlarca kişilik kullanıcılı topluluğu tarafından geliştirilmiştir ve geliştirilmeye devam edilmektedir. Drupal'in işlevselliğini genişletmek adına güvenlik, performans gibi hayati önem taşıyan fonksiyonlar Drupal topluluğu tarafından düzenli olarak geliştirilmeye devam edilmektedir.

Drupal 8 için Performans Optimizasyonu Kılavuzu

Drupal 8 için Performans Optimizasyonu Kılavuzu

Sayfa yükleme hızı kullanıcı deneyimi ve kullanışlılığı için önemli bir faktördür. Web projelerinizi geliştirirken performansı korumak ve stabil tutmak ana kriter sayılabilicek düzeydedir.. Ayrıca site performansını artırabileceğiniz pek çok yol vardır.

Drupal 8'de, site performansını optimize etmek için belirli araçlar ve modüller bulunur.

Önbellekleme, web sitesinizi optimize etmek için popüler bir tekniktir. Web verilerini (HTML, CSS, Resim) erişilebilir bir yerde depolayan bir işlemdir. Örneğin, kullanıcı bir web sayfasını ilk kez talep ettiğinde okunabilir içeriği veya bilgiyi belleğine depolar ve kullanıcı aynı HTTP sayfasını tekrar talep ettiğinde depolanan verileri alır ve kullanıcılara gösterir. Web sayfasının hızlı bir şekilde yüklenmesini sağlar.

Temelde iki tür önbellekleme vardır: İstemci tarafında önbelleğe alma ve Sunucu tarafında önbelleğe alma. Bu iki önbellekleme yöntemi dışında, sayfalar veritabanında önbelleklenebilir, Drupal öncelikle kendi veritabanında bilgiyi önbelleğe alır.

Drupal 8'in çekirdek önbellekleme teknikleri

Internal Page Cache: Bu çekirdek modül anonim kullanıcılar içindir. Bir e-ticaret web siteniz varsa ve anonim bir kullanıcı için "Sepete ekle" işlevselliğiniz varsa, bu önbellekleme modülü kullanılarak yapılabilir. Bu işleve ihtiyacınız yoksa kapatın.

Internal Dynamic Page Cache: Bu modül dahili sayfa önbelleğine benzer ve ikisi arasındaki tek fark, hem anonim kullanıcı hem de oturum açmış kullanıcı için önbelleğe almasıdır.

Varsayılan olarak "Internal Dynamic Page Cache" ve "Internal Page Cache" in kurulu ve etkinleştirildiğinden emin olun. Bir örnek için aşağıdaki ekran görüntüsüne bakın.

Görsel kaldırıldı.

Page cache maximum age: Bu ayar, ön belleğe alınmış bir sayfanın maksimum zaman sınırı içindir. Burada ayarladığımız zaman ne olursa olsun, sitemiz tarayıcılara önbellekte saklanan bilgileri/verileri saklayacaklarını söyleyen azami zamandır. Varsayılan olarak, dahili dinamik sayfa önbellek "No caching" dir, ancak gereksinim uyarınca değiştirilebilir.

Görsel kaldırıldı.

CSS ve JavaScript dosyalarını toplamayı seçtiğinizde, "Bant Genişliği İyileştirmesi", sayfanın yüklenmesi için gereken HTTP isteklerinin sayısını azaltmak için paketleri gruplar.

Görsel kaldırıldı.

Drupal harici önbellekleme tekniği:

Drupal'da, harici bir önbellekle CMS etkileşimini denetleyen birkaç teknik var. Aşağıdaki gibi katkıda bulunan modülleri kullanarak yapılabilirsiniz.

  • CSS/JS Aggregation: Drupal kendi toplama yeteneklerine sahiptir; ancak Advanced CSS/JS Aggregation modulu dosya gruplama, önbelleğe alma ve sıkıştırma için daha etkili yaklaşımlar sunarak bunları büyük ölçüde geliştirir.
  • Varnish cache: Varnish, web sunucusundaki yükü azaltırken bir web sitesini hızlandıran bir programdır. Site performansını çeşitli modülleri kullanarak hızlandırabilirsiniz. örn: Varnish purge ve  Advanced Varnish Cache
  • Memcache: Memcache, standart önbelleği veritabanından çıkarıp Drupal uygulama performansını geliştirir. Drupal 8'de iki tür Memcached modülü vardır: Memcache ve Memcache Storage Nasıl yapılacağına blog yazımıza bir göz atarak ögrenebilirsiniz Drupal8'de Veritabanı Yükünü Azaltmak için Memcached Yapılandırma.
  • Redis: Redis, yüksek performanslı depolama ve erişim için optimize edilmiş bir önbellek tekniğidir. Bellek içi veri kümesiyle çalışır. Ayrıntılı bir açıklama için Redis modülüne göz atın.

MySQL yerine MariaDB'yi kullanın

MariaDB, verileri çeşitli web uygulamalarında yapılandırılmış bilgilere dönüştürürebilinir. MariaDB'nin, daha iyi depolama motoru ve performans özellikler açısından çeşitli avantajları vardır. Buna ek olarak, büyük kuruluşlar ve kurumsal kullanıcılar için büyük verileri işleyen TokuDB'yi de destekliyor

MySQL'in veritabanı motorları olan MyISAM ve InnoDB'in MariaDB'de sırasıyla Aria ve XtraDB tarafından değiştirildiğini unutmayın. Aria, disk yoğun operasyonlar söz konusu olduğunda fark yaratan daha iyi önbellekleme imkanı sunar. Geçici tablolar, karmaşık sorguları hızlandırmak için Aria'yı da kullanır. Percona'nın XtraDB, özellikle yüksek yüklü ortamlarda yavaş performans ve istikrar ile tüm InnoDB sorunlarından kurtarabilir.

Apache yerine Nginx kullanın

Apache ve Nginx en yaygın kullanılan iki açık web sunucusudur, ancak Nginx daha hızlıdır ve Apache'den daha az bellek tüketir. Nginx, Apache web servisine göre daha iyi performans gösterir. Aynı zamanda çok az sayıda eşzamanlı kullanıcıyı asgari kaynaklar kullanır.

Diğer özel araçlar ve modüller

  • Gereksiz tüm modülleri web uygulamanızdan devre dışı bırakın.
  • Bir güncelleme varsa, kullandığınız modülleri ve çekirdeği mutlaka güncelleyin.
  • Devel: Sorunları izlemeye yardımcı olduğu için sorgu analizi için Devel modülünü kullanın.
  • CDN (içerik dağıtım ağı): Sitenizde gösterilecek çok miktarda içerik varsa, bir CDN kullanmayı düşünün. Çoğu CDN, görüntü, video, ses klipleri, CSS dosyaları ve JavaScript gibi statik kaynakları barındırmak için kullanılır. Bir CDN sunucusu bir site ziyaretçisine ne kadar yakınsa, içerik o kadar çabuk bilgisayarlarına veya mobil cihazlarına gönderilir. Örneğin: AWS CloudFront, Akamai. Drupal siteleri için kolay İçerik Dağıtım Ağı entegrasyonu sağlar.
  • Image Lazyloader ve Blazy: Bu iki modül yalnızca tarayıcı penceresinde görünen resimleri yükler.
  • CSS sprite: Küçük resimler için CSS sprite'ı kullanın birine birleştirin.
  • gzip sıkıştırma: GZIP, kayıpsız bir sıkıştırma sağlar; yani, sıkıştırmayı açtığınızda orijinal veriyi geri alabiliriz. DEFLATE algoritmasına dayanmaktadır. Nginx için  örneğin;
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule>

Gzip sıkıştırma aracını kullanarak sıkıştırmanın çalışıp çalışmadığını da kontrol edebilirsiniz.

Web hostinginizi değiştirin

Artık Drupal site performansını nasıl geliştireceğinizi biliyorsunuz. Uygulamanızın beklenen performans hedeflerini hala karşılamaması halinde daha hızlı hizmet sağlayan bir ana makine seçmeyi düşünün.

Managed Dedicated Server(s): Yönetilen adanmış sunucu sizin için tüm barındırma ihtiyaçlarınızı halleder. Sadece donanımı almakla kalmazsanız da, her şeyin gerektiği gibi çalışıp çalışmadığından emin olmanız için bir takım uzmanlar edersiniz. Yazılımınızı güncel tutarlar ve herhangi bir sorun varsa sizi uyarırlar. Birden çok yapılandırmayı birden çok sunucuyu dağıtabilirsiniz.

Dedicated Server(s):  Özel bir sunucu düşük gecikme süresi sağlar, bu da çoğu küçük ve orta ölçekli sitelere için hızlı tepki süresi demektir.

Cloud Hosting: Bulut barındırma ölçeklenebilir. Birden fazla sunucunun birbiri ile bağlanmasından oluşan bir servistir. Sunucuların aynı veri merkezi içinde olma zorunluluğu da yoktur, bir network ile birbirlerine bağlı olmaları yeterlidir.

Sonucu kontrol edelim

Masaüstü araçları: ApacheBench (ab), Apache jmeter, The Grinder, EasyQA

Çevrimiçi araçlar: Pingdom, GTMetrix, PageSpeed Insights

Performans optimizasyonu, büyük ölçekli veya küçük ölçekli olsun, her web uygulamasında önemli bir rol oynar. Bu blogda, Drupal uygulamalarının performansını ayarlamak için yapabileceğiniz ana yapılandırma değişikliklerinin bir listesini hazırlamaya çalıştık.

Resim boyutunun, web sitenizin yükleme hızı ve performansı üzerinde büyük bir etkisi olabileceğini unutmayın.

Drupal site performansı ile ilgili bir yardıma ihtiyaç duyarsanız bizimle iletişim kurmaktan çekinmeyin.

Mutlu kodlamalar

Drupal 8'de Veritabanı Yükünü Azaltmak için Memcached Yapılandırma

Drupal8'de Veritabanı Yükünü Azaltmak için Memcached Yapılandırma

Drupal'ın standart önbellek modunu  aktifleştirerek veritabanındaki gereksiz sorguları azaltabilirsiniz. Fakat yogun trafikli bir siteye sahipseniz bazen yeterli olmayabilir. Memcache, standart önbellek bilgilerini, veri tabanını sonuçlarını yeniden önbelleğe alarak Drupal uygulama performansınızı oldukça geliştirebilir.

Drupal'ın varsayılan olarak Memcached'i desteklemediğini ve bunun için sunucuya yüklememiz gerektiğini unutmayın. Memcached'i sunucuya nasıl yükleyeceğinizi ve her sayfanın yüklenmesiyle veritabanındaki yükü azaltmak için Drupal 8 ile nasıl yapılandırılacağını görelim.

Memcached'i sunucuya nasıl kuracağımıza göz atalım

Yerel makinenizdeki terminali açın ve sunucuya bağlandıktan sonra aşağıdaki kodları sırası ile çalıştırın:

sudo apt-get update

sudo apt install memcached

sudo apt install php-memcached

Aşağıdaki komutu çalıştırarak Memcache arka plan programının iyi çalıştığından emin olun:

“ps aux | grep memcached” 

Ayrıca, Memcached eklentisinin drupal sitenizin "admin/reports/status/php" sayfasını kontrol ederek veya info.php sayfası oluşturarak PHP7'de düzgün şekilde yapılandırılıp yapılandırılmadığını kontrol edin.

nano /var/www/html/memcache/info.php 

aşağıdaki kodu giriniz <?php phpinfo(); ?> Şimdi Memcached ve php7-fpm servislerini yeniden başlatın.

service memcached restart 
service php7.0-fpm restart 

Web tarayıcısına gidin ve info.php dosyasına veya drupal sitenizin "/admin/reports/status/php" adresine gidin ve "Memcached" araması memcache hakkında bilgiler bulacaksınız.

 

Sunucunuza Memcached yüklendikten sonra, Memcache module ve Memcache Storage module indirin. Daha sonra "drupal web sitenizin "/admin/modules" adresine gidin ve iki modülüde etkinleştirin.

Sunucuya kurduğumuz Memcache modulunu Drupal 8 için yapılandıralım:

Sitenizin settings.php dosyasını açın ve aşağıdaki kodu yapıştırın. Burada, D8 ve Memcached PECL'nin bir entegrasyonunu sağladığı için Drupal 8 için Memcache depolama alanını kullanıyoruz.

$settings['cache']['default'] = 'cache.backend.memcache_storage';

$settings['memcache_storage']['key_prefix'] = '';

$settings['memcache_storage']['memcached_servers'] = ['127.0.0.1:11211' => 'default'];

Debug için aşağıdaki kodu isterseniz settings.php dosyasında ekleyin.

$settings['memcache_storage']['debug'] = TRUE;

Hepsi bu kadardı. Artık memcache ile sunucu yükünü azaltmış olduk. Herhangi bir sorunuz olursa iletişim kurmaktan çekinmeyin. Bu tarz blog yazıları hoşunuza gidiyorsa mail bültenimize abone olabilirsiniz.

Mutlu kodlamalar

Drupal 8' de Register Event Subscriber Nasıl Kullanılır.

Drupal 8' de Register Event Subscriber Nasıl Kullanılır.

Drupal 8'deki olaylar, sistemin farklı bileşenlerinin birbiriyle etkileşim ve iletişim kurmasına olanak tanır. Bir sistem bileşeni olayı uygun bir saatte gönderir; birçok olay Drupal çekirdeği ve Symfony çerçevesi tarafından her istekte gönderilir. Diğer sistem bileşenleri etkinlik abonesi olarak kaydedilebilir; bir olay gönderildiğinde, kayıtlı abone üzerinde her biri tepki vermesine olanak veren bir yöntem ile çağrılır.

Drupal'ın önceki sürümlerinden gelen çengellerin çoğu, Drupal 8'de Olaylar lehine kaldırıldı. Örnek: hook_init() veya hook_boot() şimdi bir olay abonesini kaydederek yapılabilir.

Örnek modül için aşağıdaki yapıyı kullanacağız:

my_event_subscriber/
  - my_event_subscriber.info.yml
  - my_event_subscriber.services.yml
  - src/
    - EventSubscriber/
      - MyEventSubscriber.php

özel modul için standart my_event_subscriber.info.yml dosyası:

name: Register an Event Subscriber
type: module
description: 'Example: How to Register an Event Subscriber in Drupal 8'
core: 8.x
package: Other

Içinde 'event_subscriber' ile etiketlenmiş bir hizmet tanımlayın.

my_event_subscriber.services.yml.

services:
  my_event_subscriber:
    class: '\Drupal\my_event_subscriber\EventSubscriber\MyEventSubscriber'
    tags:
      - { name: 'event_subscriber' }

src/EventSubscriber/MyEventSubscriber.php uygulayan bir sınıf içeriyor

\Symfony\Component\EventDispatcher\EventSubscriberInterface

/**
 * @file
 * Contains \Drupal\my_event_subscriber\EventSubscriber\MyEventSubscriber.
 */

namespace Drupal\my_event_subscriber\EventSubscriber;

use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Event Subscriber MyEventSubscriber.
 */
class MyEventSubscriber implements EventSubscriberInterface {

  /**
   * Code that should be triggered on event specified 
   */
  public function onRespond(FilterResponseEvent $event) {
    // The RESPONSE event occurs once a response was created for replying to a request.
    // For example you could override or add extra HTTP headers in here
    $response = $event->getResponse();
    $response->headers->set('X-Custom-Header', 'MyValue');
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    // For this example I am using KernelEvents constants (see below a full list).
    $events[KernelEvents::RESPONSE][] = ['onRespond'];
    return $events;
  }

}

KernelEvents sabitler listesi aşağıdadır:

KernelEvents::CONTROLLER; // The CONTROLLER event occurs once a controller was found for handling a request.
KernelEvents::EXCEPTION; // The EXCEPTION event occurs when an uncaught exception appears.
KernelEvents::FINISH_REQUEST; //The FINISH_REQUEST event occurs when a response was generated for a request.
KernelEvents::REQUEST; // The REQUEST event occurs at the very beginning of request dispatching.
KernelEvents::RESPONSE; // The RESPONSE event occurs once a response was created for replying to a request.
KernelEvents::TERMINATE; // The TERMINATE event occurs once a response was sent.
KernelEvents::VIEW; // The VIEW event occurs when the return value of a controller is not a Response instance.

Daha Fazlası için Drupal sayfası

Bir etkinlik nasıl gönderilir?

$dispatcher = \Drupal::service('event_dispatcher');
$dispatcher->dispatch($Event_Name, $Optional_Event_Object);

Kullanışlı bağlantılar

Drupal 8.2.x: HttpKernel component event constants

Drupal 8.2.x: class EventDispatcher

Drupal 8.2.x: Events

Drupal'da Önbellek API'si Nasıl Kullanılır?

Drupal'da Önbellek API'si nasıl kullanılır?

Yogun trafiğe sahip drupal projelerinizde modul geliştirken, üçüncü parti API'lerinden veya veri tabanından bilgi toplamak istediğinizde ağır hesaplamalar yapmanız gerekmez. Bunun yerine bir kere çalıştırın ve önbelleğe alın. Bizzat karışık SQL sorguları ve üçüncü parti entegrasyonları çalıştırmak gerektiğinde önbelleğe alma özelliğini kullanarak daha hızlı açılan web sayfaları oluşturabilirsiniz.

Drupal 8 için aşağıdaki kod yapısını kullanın;

public function custom_example_cache() {
  $data = &drupal_static(__FUNCTION__); //` __METHOD__` ile değiştirilebilir
  $cid = 'custom_example:' . \Drupal::languageManager()->getCurrentLanguage()->getId();

  if ($cache = \Drupal::cache()->get($cid)) {
    $data = $cache->data;
  }
  else {
    // Burası, yalnızca çalışacak kodunuzu ekleyeceğiniz yerdir    
    // yeni bir önbellek oluştururken.
    $data = custom_complicated_calculation();
    \Drupal::cache()->set($cid, $data);
  }
  return $data;
}

Drupal 7 için aşağıdaki kod yapısını kullanın;

function custom_example_cache() {
  $data = &drupal_static(__FUNCTION__);
  if (empty($data)) {
    if ($cache = cache_get('custom_example')) {
      $data = $cache->data;
    }
    else {
      // Burası, yalnızca çalışacak kodunuzu ekleyeceğiniz yerdir
      // yeni bir önbellek üretirken.
      $data = custom_complicated_calculation();
      cache_set('custom_example', $data, 'cache');
    }
  }
  return $data;
}

Yardımcı Linkler

  1. Drupal 8 API: Cache API
  2. Drupal 8 API: function drupal_static
  3. Drupal 7 API: function cache_set
  4. Drupal 7 API: function cache_get
  5. Drupal 7 API: function drupal_static

Drupal 8 ile Özel Modul Geliştirme (Oluşturma)

Drupal 8 ile Özel Modul Geliştirme (Oluşturma)

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.

Görsel kaldırıldı.

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.

Görsel kaldırıldı.

Daha sonra  bloğun yapılandırma formunu göreceksiniz.

kayıt edin.

Görsel kaldırıldı.

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.

Görsel kaldırıldı.

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:

Görsel kaldırıldı.

Ö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 :)

Abone ol Drupal