Eğitim

E-ticaret’te Başarılı Olmanın Yolları

E-ticaret’te Başarılı Olmanın Yolları

Teknoloji her geçen gün biraz daha gelişirken, internet üzerinde kurulan sanal mağazalar ile yapılan ticaretler giderek önem kazanıyor ve yaygınlaşıyor. E-ticaret'in büyüyen iç hacmi ve pazar payının devamlı yükselmesi mevcut şirketlerin de dikkatini çekiyor. Ürünlerini internet üzerinden son kullanıcıya sunarak satış yaparak kâr elde etmek her firmanın önemsediği bir ciro arttırma yöntemidir. Firmaların başarılı olması için belirli bazı kuralları bilmesi ve uygulaması gerekir. Böyle bir pastadan kim faydalanmak istemez ki? Tabii ki büyümeyi hedefleyen tüm firmalar ve girişimcilerin faydalanmak isteyeceği bir alan...

Peki internet üzerinden satış yapacak olan firmalar veya girişimciler e-ticarete başlamak isterken nelere dikkat etmeliler?

Öncelikle yaratılacak markanın veya mevcut markanın ilk ve en çok dikkat etmesi gereken kural, kullanıcıya güven vermesidir. Bir marka kullanıcısına güven vermiyorsa her zaman kendi sektöründe gerilemeye mahkumdur. Potansiyel müşteriler hizmetin ve sunulacak ürünün hakkında detaylı bilgi almak ister. Hiç kimse bir sürpriz ile karşılaşmak istemez! Alacakları ürünün bir sigortası olmasını mutlaka isterler. Kullanıcı, güven duyduğu ve inandığı bir siteden (markadan) kayıtsız şartsız her zaman alışverişini gerçekleştirir. Ayrıca site tasarımı da son kullanıcı için açık ve anlaşılır olmalıdır. Tasarımda dikkat edilmesi gereken en can alıcı nokta ise arap saçına dönmemiş menü ve kategorilerin olmasıdır. Alıcı sitede gezinirken kafasının karışmaması gerekir. Ürün sipariş etmek veya satın almak son kullanıcı için gayet basitleştirilmelidir.

Her şey tamamsa işte maddeler halinde mutlaka dikkat edilmesi gereken kurallar bir dizi şekilde aşağıda sıralanmıştır.

E-ticaret sitesi kurulduktan sonra nelere dikkat etmeliyim?

Aşağıdaki maddelerin büyük kısmını gerçekleştirenler, diğer basit e-ticaret sitelerine büyük oranda fark atacaktır. Kazanmak istediği ivmeye müşterisine verdiği güven ile beraber ivmesini yükseltmesi mümkün olacaktır.

Maddeler açılır menü olarak yazılmıştır. E-ticarette Dikkat Edilmesi Gereken Kurallar
  • 1. E-ticaret Sitenizi Kurarken Dikkat Edilmesi Gerekenler
    • Sık Sorulan Sorular bölümünü geliştirerek her sayfaya link olarak yerleştirin.
    • E-Ticaret ile ilgili genel bilgi ve haberlerin bulunduğu Elektronik Ticaret Bilgi Merkezi kurun.
    • Ürün destek bilgisi için her sayfaya ya da bilgi merkezine link vermeyi ihmal etmeyin.
    • Satıcı ile ilgili bilgiler alıcının güvenini artırır. Ticari isim, şirket profili, çözüm ortakları ile ilgili tanıtıcı bilgileri ve iletişim bilgilerinizi müşterilerinizle paylaşın.
    • Müşteriniz kimden ürün ve hizmet satın aldığı ile ilgili bilgilere sitenizden kolaylıkla ulaşmalıdır. Site tasarımınızı yaparken bunu göz önünde bulundurun.
    • Müşterinize yaptığı alışverişin hangi hukuka tabi olduğunu açıklayın.
    • Sattığınız mal ve sunduğunuz hizmetler ile ilgili sınırlayıcı bilgileri müşteriniz kişisel bilgilerini girmeden, ürün/hizmet seçimini yapmadan önce verin.
    • Satışını yaptığınız tüm mal ve hizmetlerin detaylı açıklamalarını site üzerinde verin.
    • Müşterilerinizin bilgiye en kısa yoldan ulaşmasını sağlamalısınız. Bu nedenle sitenizde mutlaka bir arama fonksiyonu oluşturun.
    • E-ticaret sitenizin ana sayfasına ya da her sayfaya arama ikonunu yerleştirin.
    • Müşterilerinizin şikâyet ve sorunlarını bildirebilecekleri iletişim kanallarını aktif tutun. Sık Sorulan Sorular linklerinin yanı sıra müşteri hizmetlerine bağlı bir telefon numarası ve sizinle temasa geçebilecekleri elektronik posta adresini mutlaka sunun.
    • Müşteri hizmetlerine yönlendirme linklerini her sayfaya yerleştirin.
    • Müşterilerinizin soru ve şikâyetlerini inceleyerek geri bildirim yapmanız çok önemlidir. İletiye en geç bir (1) iş günü içinde yanıt vereceğinizi bildiren bir uyarı mesajı gönderin ve söz verilen sürede yanıtlarınızı iletin.
  • 2. E-ticaret Sitesinde Sipariş Nasıl İşlemelidir
    • Müşterinizin siparişini tamamlamadan önce ürün stok bilgisini görmesini sağlayın.
    • E-ticaret sitenizde bulunan bazı ürünler satılmıyor ya da stoklarda tükenmiş olabilir. Bu yüzden ürünün, internet üzerinden satışının yapıldığını bir ikonla belirtin.
    • Müşterinizin reklamda gördüğü her ürünü alabilmesi önemlidir. Web sitenizde toplu satış ya da indirim yaptığınız ürünleri belirtin.
    • Müşterilerinizi maksimum talep miktarı hakkında bilgilendirin.
    • Müşterinizin son onay tıklamasını yapmadan önce tüm fatura bilgilerini görmesini sağlayın.
    • Satış politikanızı, kabul ettiğiniz ödeme tiplerini ya da sizinle ilişkisi olmayan 3. parti bilgilerini müşterinize verin.
    • Stoklarda olmayan bir sipariş tedarik edildikten sonra müşterilerinize bilgilendirme yapın.
    • Mevcut ürün miktarını, teslimat süresi ya da olabilecek tahmini gecikmeleri müşterilerinize bildirin.
    • Müşterilerinize ürün bilgilerinin yanı sıra, problem ya da soruları için ne yapması gerektiğini, paranın kartından ne zaman çekileceğini, mal izlemek için tek bir sipariş numarası kullanıldığını, iptal, iade ve geri ödeme politikalarını bildirin.
    • Müşterinize siparişinin alındığını ve işleme konulduğunu e-posta, faks ya da web sayfa mesajı ile bildirin.
    • Müşterinizin tüm fatura bilgilerini sorgulamanız gerektiğini sakın unutmayın.
    • Müşterilerinizin siparişleri ile ilgili son durumu web tabanlı bir raporla görmesini ve siparişini takip etmesini sağlayın.
    • Müşterilerinize geçmişe yönelik alışverişlerini görüntüleyebilme olanağı sunun.
    • Ürün tedarik edilemiyorsa gerekli bilgilendirmeyi gecikmeden yapın.
    • Şirket içi politikalarınızda değişiklik olduğu takdirde müşterilerinize bilgilendirme yapın.
  • 3. E-ticaret Sitesinde Ödeme Nasıl İşlemelidir
    • Müşterinizin ödeyeceği toplam fiyatı; istenen tüm ürün bilgileri, miktarı, maliyeti, tahmini taşıma ve diğer olası maliyetler ile birlikte olabildiğince erken gösterin.
    • Müşterilerinize kredi kartı, EFT/Havale gibi ödeme kolaylıkları sunun.
    • Ücreti ne zaman tahsil edeceğinizi son işlem sayfasında belirtin.
    • İşlem esnasında kabul edilen para birim veya birimlerini açıkça belirtin.
    • Online alışveriş işlemi sırasında müşterinizin CVV/CVC2 numaralarını da istemek zorundasınız.
    • Müşterinizi gerçekleştirdiği online alışveriş işlemi ile ilgili dökümleri mutlaka saklaması gerektiği konusunda uyarın.
    Online Alışveriş İşlemi Yapan Alıcıların Saklaması Gereken Bilgiler
    • Kart numarası
    • İşlem için verilen özel bir numara
    • Toplam tutar
    • Tarih ve zaman
    • Satıcı adı
    • Müşteri adı
    • Fatura Adresi
    • Müşteriniz, siparişi ile ilgili herhangi bir problemle karşılaştığında şikâyet ya da bildirimde bulunacağı bir telefon numarası verin.
    • Müşterinizin ödeme bilgisini verdiği sırada işlemin duraksaması ya da bitirilmesi halinde, en kısa sürede müşteri ile temasa geçin.
  • 4. Siparişlerin Teslimatı ve Teslimat Bilgisi
    • Ürün ve hizmetlerin ulaşım ve teslimat bilgilerini sipariş esnasında belirtin.
    • Farklı teslimat türlerini belirtin. Tahmini teslimat tarihini ve belirli tarihlerde yapılmasını talep edebileceğiniz teslimatlar olup olmadığını belirtin.
    • Sipariş esnasında belirttiğiniz tarihte teslim edilmeyen ürünler için müşterinize bilgilendirme yaparak tarih değişikliği ve nedenlerini açıkça belirtin.
    • Ürün teslimatı esnasında ürünü kontrol ederek teslim alma hakkının müşteride olduğunu unutmayın.
    • İade prosedürünü, ürün sipariş esnasında belirtin.
Ek bilgiler ve detaylar için lütfen müşteri hizmetleriyle iletişime geçin.

Ubuntu'da LAMP server kurulumu

Ubuntu'da LAMP server kurulumu

Ubuntu 20.04 ve Linux Mint 20'de LAMP Kurulumu

Bu rehberde, Ubuntu 20.04 LTS ve Linux Mint 20 sürümlerinde LAMP (Linux, Apache, MySQL, PHP) sunucusu kurulumunu adım adım anlatacağız.

LAMP Nedir?

LAMP, Linux işletim sistemi üzerinde çalışan Apache web sunucusu, MySQL veritabanı yönetim sistemi ve PHP programlama dili kombinasyonunu ifade eden bir kısaltmadır.

Adım Adım LAMP Kurulumu

1. Adım: LAMP Sunucusunu Kurun

Terminali açın ve aşağıdaki komutu çalıştırarak LAMP sunucusunu kurun:

sudo apt update
sudo apt install apache2 mysql-server php libapache2-mod-php php-mysql

Kurulum sırasında MySQL için bir parola belirlemeniz istenecektir. Bu parolayı bir yere not edin; yerel sunucuda Drupal veya başka bir içerik yönetim sistemi kullanırken gerekli olacaktır.

2. Adım: Apache'nin Çalışıp Çalışmadığını Kontrol Edin

Tarayıcınızı açın ve http://localhost/ adresine gidin. Eğer "It works!" mesajını görüyorsanız, Apache başarılı bir şekilde kurulmuş demektir.

3. Adım: MySQL Güvenli Kurulumu

MySQL sunucusunu güvenli hale getirmek için aşağıdaki komutu çalıştırın:

sudo mysql_secure_installation

Bu komut, root kullanıcısı için bir parola belirlemenizi, anonim kullanıcıları kaldırmanızı, root oturum açmalarını sadece yerel makinelerle sınırlandırmanızı ve test veritabanını kaldırmanızı isteyecektir.

4. Adım: PHP'yi Test Edin

Apache web sunucusunun kök dizininde bir PHP dosyası oluşturarak PHP'nin doğru çalıştığını doğrulayabilirsiniz:

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

Açılan dosyaya aşağıdaki kodu yazın ve kaydedip kapatın:

<?php phpinfo(); ?>

Tarayıcınızdan http://localhost/info.php adresine gidin. PHP'nin bilgilerini içeren bir sayfa görmelisiniz.

5. Adım: phpMyAdmin Kurulumu

phpMyAdmin'i kurmak için terminalden aşağıdaki komutu çalıştırın:

sudo apt install phpmyadmin

Kurulum sırasında web sunucusu olarak Apache'yi seçin ve MySQL için bir yönetici parolası belirleyin.

phpMyAdmin'i Apache yapılandırmasına eklemek için aşağıdaki komutu çalıştırın:

sudo ln -s /usr/share/phpmyadmin /var/www/html

Tarayıcınızdan http://localhost/phpmyadmin adresine gidin ve phpMyAdmin giriş ekranını görmelisiniz.

Servisleri Çalıştırma ve Durdurma

Apache için:

  • Çalıştırmak için: sudo systemctl start apache2
  • Durdurmak için: sudo systemctl stop apache2
  • Yeniden başlatmak için: sudo systemctl restart apache2

MySQL için:

  • Çalıştırmak için: sudo systemctl start mysql
  • Durdurmak için: sudo systemctl stop mysql
  • Yeniden başlatmak için: sudo systemctl restart mysql

Bu adımları takip ederek Ubuntu 20.04 veya Linux Mint 20 üzerinde LAMP sunucunuzu başarıyla kurmuş olacaksınız. Artık PHP destekli web projelerinizi geliştirmeye başlayabilirsiniz.

Drupal'de yinelenen JavaScript olay işleyicilerini önlemek

Drupal javascript

JavaScript olay işleyicilerinin birden fazla bağlanmasını önleme

Drupal davranışlarında olay dinleyici işlevlerini kullanırsanız, Ajax isteklerini çalıştırdıktan sonra işleyicilerin çoğaltılmasını önlemek için .once () function kullanın. Bu örnekte, bir düğme öğesi tıklatıldığında bir paragraf arasında geçiş yapılır ve hiçbir şey çalıştırmazsanız iyi çalışır. Ajax aynı sayfada istekte bulunur. Ancak bunu yaparsanız, Drupal.behaviors düğmeye yeniden basıp tıklama dinleyicisi birden çok kez eklenecektir. Dolayısıyla paragraf birden çok kez değiştirilecektir.

Drupal.behaviors.magnec_custom = {
    attach: function (context, settings) {
      $('button').click(function() {
        $("p").toggle();
      });
    }
  };

Drupal, paragrafın birden çok kez geçiş yapmasını önlemek için Drupal 7'de beri kendi çekirdeğinde jQuery eklentisini bütünleştirdiği için kodunuzu şu şekilde değiştirin:

Drupal.behaviors.magnec_custom = {
    attach: function (context, settings) {
      $('button').once().click(function() {
        $("p").toggle();
      });
    }
  };

Şimdi, tıklama dinleyicisi öğe düğmesine yalnızca bir kez eklenecek ve JavaScript davranışlarında çoğaltılamayı engelleyeceksiniz. Alternatif çözüm Bu sorunu çözmenin bir başka yolu, öğeye olay dinleyicisi işlevi eklemeden önce unbind işlevini çalıştırmaktır. Örneğin:

Drupal.behaviors.magnec_custom = {
    attach: function (context, settings) {
      $('button').unbind("click");
      $('button').click(function() {
        $("p").toggle();
      });
    }
  };

Başka örnekleriniz varsa, bunları bizimle paylaşabilirsiniz.

Drupal 8'de Özel Bir Blok Nasıl Oluşturulur

Drupal özel modul ile blok oluşturma

Drupal GUI üzerinden

Bu yöntem, programlı olarak bir blok oluşturmaktan oldukça basit ve kolaydır. Ancak, programlı olarak bir blok oluşturmaya göre daha az esnek ve özelleştirilebilirdir./p>

  • Gidin admin -> structure -> block layout -> custom block library. .
  • ' Blok türleri ' sekmesini tıklayın. Burada bir kez, ' Özel blok tipi ekle ' düğmesine tıklayın.
  • Blok etiketi ve açıklamasını girin.
  • Artık, özel bloğunuz için alanlar ekleyebilir, ekran türünü yönetebilir, ekranı yönetebilirsiniz. Bloğu beğeninize göre özelleştirin ve kaydet seçeneğine tıklayın.
  • Şimdi, özel blok kütüphanesine geri dönün ve bloğu kütüphanenize eklemek için mavi ' Özel blok ekle ' düğmesini tıklayın.
  • Bir sonraki adım admin blok düzenine giderek bloğu istediğiniz bölgeye yerleştirmektir

Modül oluştur

Drupal 8'de, oluşturduğunuz her özel modül, tema veya eklenti için meta verileri içeren bir info.yml dosyası oluşturmak gerekir. Benzer şekilde, özel bloğumuz için, 'module / custom' dizininde bir info.yml dosyası oluşturmamız gerekecek. Özel klasör daha önce oluşturulmadıysa, onu oluşturmanız gerekeceğini unutmayın. Özel bir blok oluşturmak için, özel bir modül yapmamız gerekecek.

Şimdi 'custom_block_example.info.yml' gibi bir 'info.yml' dosyası oluşturun. Bu dosyanın içine aşağıdakini girin:

name: özel blok modulü
type: module
description: Açıklamanızı yazın.
core: 8.x
package: Custom
dependencies:
- block

Artık Drupal panonuza gidebilir ve az önce oluşturduğumuz özel modülü etkinleştirebilirsiniz.

Sınıf Oluştur

Şimdi, bloğun mantığını tanımlamak için, modules/custom/custom_block_example/src/Plugin/Block dizini altına yerleştirilecek bir sınıf oluşturmamız gerekiyor .

Sınıf dosyası da ek açıklama içermelidir. Ek açıklama bloğu tanımlamamızı sağlar. Ek açıklama dışında, bu sınıf 4 yöntem içerir:

  • build () - Yenilebilir bir dizi oluşturarak temel bir işaretleme döndürür.
  • blockAccess () - Özel bir kullanıcı erişim mantığı tanımlar.
  • blockForm () - Form API'sini kullanarak özel bir blok yapılandırma formu tanımlar.
  • blockSubmit () - blockForm () yönteminde tanımlanan bir yapılandırmayı kaydetmek için kullanılır.
<?php

namespace Drupal\my_block_example\Plugin\Block;

use Drupal\Core\Access\AccessResult;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;

/**
 * Provides a block with a simple text.
 *
 * @Block(
 *   id = "my_block_example_block",
 *   admin_label = @Translation("My block"),
 * )
 */
class MyBlock extends BlockBase {
  /**
   * {@inheritdoc}
   */
  public function build() {
    return [
      '#markup' => $this->t('This is a simple block!'),
    ];
  }

  /**
   * {@inheritdoc}
   */
  protected function blockAccess(AccountInterface $account) {
    return AccessResult::allowedIfHasPermission($account, 'access content');
  }

  /**
   * {@inheritdoc}
   */
  public function blockForm($form, FormStateInterface $form_state) {
    $config = $this->getConfiguration();

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function blockSubmit($form, FormStateInterface $form_state) {
    $this->configuration['my_block_settings'] = $form_state->getValue('my_block_settings');
  }
}

Şimdi sitenize geri dönün ve yeni oluşturduğunuz bloğu görebilmeniz gerekir. Basitçe bloğu seçtiğiniz bir bölgeye atayın ve görünür olması gerekir.

Sonuç

Daha önce de belirtildiği gibi, bloklar bir Drupal sitesinin ayrılmaz bir parçasıdır. Blokları kendi tarzınıza göre kişiselleştirmeyi ve oynamayı öğrenmek çok yararlı bir beceri olabilir.

Drupal sitenizi özelleştirmekle ilgili sorun mu yaşıyorsunuz? Magnec'te bizimle iletişime geçin ve Drupal sitenize bir daha asla takılıp kalmayla ilgili endişelenmeyi unutun.

Drupal'de özel bloklar nasıl oluşturulur ve Twig'de ekran nasıl ayarlanır

Drupal twig custom block

Drupal'de, özel bir modül geliştirirken PHP içinde doğrudan HTML yazmaktan kaçınılmalıdır. Bu örnekte size programlı olarak özel bir blok oluşturmayı, özel bir Twig dosyası oluşturmayı ve istenen değişkenleri bir şablona göstermeyi deneyimleyeceğiz.

Adımları takip edin.

/**
 * Implements hook_theme().
 */
function magnec_custom_theme() {
  return [
    'magnec_custom_block' => [
      'variables' => ['title' => NULL, 'link' => NULL],
      'template' => 'block--magnec-custom',
    ],
  ];
}

Adım bir blok dosyası oluşturmak ve kodu yerleştirmek. Özel modül klasörüne gidin, /src/Plugin/Block dosyasını açın ve örneğin; MagnecCustom.php dosyası oluşturun. Blok ve yönetici etiketiniz için kimliği tanımlayın; böylece Yapı -> Blok yerleşimi bakarak blok alanını kolayca bulabilirsiniz.

Bir sınıf oluşturun ve BlockBase'i genişletin. build() işlevini kullanın ve bir dizi değişken döndürün.

namespace Drupal\magnec_custom\Plugin\Block;

use Drupal\Core\Block\BlockBase;

/**
 * Provides a 'magnec custom' block.
 *
 * @Block(
 *   id = "magnec_custom_block",
 *   admin_label = @Translation("Magnec Custom Block"),
 * )
 */
class MagnecCustom extends BlockBase {
  /**
   * {@inheritdoc}
   */
  public function build() {
    return [
      '#theme' => 'magnec_custom_block',
      '#title' => 'Drupal Webtasarım',
      '#link' => 'http://magnec.com/',
    ];
  }
}

Şimdi önbelleği temizleyin ve Yapı -> Blok yerleşimi seçin. Blokunuzu bulun ve istediğiniz bölüme yerleştirin.

Bir sonraki adım, Twig dosyası oluşturmak ve değişkenleri oluşturmaktır. Temalar klasörünüzde, örneğin kullandığınız temayı açın. templates/block dosyasına gidin ve block--magnec-custom.html.twig dosyasını oluşturun (ilk örnekteki 'template' dizideki ad alanını tanımlamıştık).

Değişkenleri Twig HTML'ye dönüştürün:

{#
/**
 * @file
 * Profile magnec custom block.
 */
#}

  {{ title }}

Hepsi bu kadardı.

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

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

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 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
Abone ol Eğitim