Drupal

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.

Redis Kurulumu ve Drupal konfigürasyonu

Redis Kurulumu ve Drupal Yapılandırma

İlk aşala Redis'i yükleyin

Terminalinizi açın ve aşağıdaki komut ile Redis'i indirmeye çalışın.
apt-get install redis-server

Yukarıdaki komutu girdikten sonra eğer bulunamadı uyarısı ile karşılarsınız aşağıdaki depoyu sisteminize ekleyerek yeniden kurulum yapmayı deneyin.

add-apt-repository ppa:chris-lea/redis-server
apt-get update
apt-get install redis-server

İndirme ve kurulum tamamlandıktan sonra benchmark testi ile kontrol etmek istiyebilirsiniz.
redis-benchmark -q -n 1000 -c 10 -P 5

Redis'in php kütüphanesini yükleyin

apt-get install php7.3-dev git
git clone https://github.com/phpredis/phpredis.git
cd phpredis
git checkout 
phpize
./configure
make && make install
cd ..
rm -rf phpredis
echo "extension=redis.so" > /etc/php/7.3/mods-available/redis.ini
ln -sf /etc/php/7.3/mods-available/redis.ini /etc/php/7.3/fpm/conf.d/20-redis.ini
ln -sf /etc/php/7.3/mods-available/redis.ini /etc/php/7.3/cli/conf.d/20-redis.ini
service php7.3-fpm restart

Not: Sunucunuzdaki php versiyonuna göre düzenleyin.

Redis modülünü Drupal'a kurun
Drupal'dan Redis modülünü indirin ve sisteminize kurun.

Drupal'ı yapılandırın
Aşağıdaki kodları settings.php yada settings.local.redis.php dosyası oluşturup ekleyebilirsiniz.

$settings['redis.connection']['interface'] = 'PhpRedis';                  // Can be "Predis" in the future
$settings['redis.connection']['host']      = '127.0.0.1';                 // Your Redis instance hostname
$settings['cache_prefix']                  = 'any-text-you-want';         // Optional prefix for cache entries

$settings['cache']['default']              = 'cache.backend.redis';       // The default cache engine for the site
// Always set the fast backend for bootstrap, discover and config, otherwise this gets lost when redis is enabled.
$settings['cache']['bins']['bootstrap']    = 'cache.backend.chainedfast';
$settings['cache']['bins']['discovery']    = 'cache.backend.chainedfast';
$settings['cache']['bins']['config']       = 'cache.backend.chainedfast';

$settings['container_yamls'][] = 'modules/redis/example.services.yml';
$settings['container_yamls'][] = 'modules/redis/redis.services.yml';

//Register our namespace
$class_loader->addPsr4('Drupal\\redis\\', 'modules/redis/src');

Yeniden test edin

redis-cli monitor
Drupal sitenize web tarayıcınızda göz atın ve gezinmeye başlayın. Şimdi CLI pencerenizde görünen ve size her şeyin doğru çalıştığını söyleyen bir sürü şey görmelisiniz. Yanıp sönen metni görmüyorsanız, bir hata yapmışsınızdır veya yapılandırmanız benimkinden farklıdır. Metin görürseniz, redis'den çıkmak için Ctrl+ C kombinasyonunu kullanarak çıkış yapabilirsiniz.

Sonuç

Redis, güçlü özellikleri ve basit kurulumu arasında, sadece üretimde değil, her yerde Drupal önbelleğe alma için memcached'e çekici bir alternatif olabilir. Hala şüpheciyseniz, Redis'i mevcut bir site için memcached ile paralel olarak çalıştırabilirsiniz. Tamamen Redis'e rahatça taşınana kadar ayarlar dosyanızda sadece bazı küçük değişiklikler yaparak ikisi arasında geçiş yapabilirsiniz.

Ubuntu 20.04 Drush Kurulumu

Drush

Drush'ı kurmak, Drupal kurulumlarınızı tanıdık bir yöntem olan komut satırı kullanarak yönetmenin bir yolunu sağlar. Drush, yönetici görevlerini yerine getirmenize izin vererek hayatınızı basitleştirebilir.

Bu eğitimde, Drush'ın bağımlılıklarını kurmak için gerekli olduğundan Composer'ı paket yöneticimiz olarak kullanacağız. Composer en az 1 GB cıvarında bellek kullanır, bu nedenle bu eğiticiye başlamadan önce buna sahip olduğunuzdan emin olun.

1. Adım: Güncelleme

Depoları kontrol ederek sistemimizi güncelleyeceğiz

apt-get update

2. Adım: Zip'i yükleyin

Büyük olasılıkla zip komutuna zaten sahip olacaksınız, ancak devam edip yükleme yapamazsanız diye kontrol edebilirsiniz.

apt-get install zip unzip

3. Adım: Curl'u Yükleyin

apt-get install curl php7-cli git

4. Adım: Composer'ı yükleyin

curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer

Adım 5: Drush'ı yükleyin

Aşağıdaki komutu kullanmak Drush'ın en yeni sürümünü yükleyecektir, şu anda

composer global require drush/drush

Alternatif olarak, gerekli sürümü ekleyerek seçtiğiniz Drush sürümünü yükleyebilirsiniz. Drush 8'in kullanılmasını istiyorsanız…

composer global require drush/drush:8

Not: drush ard komutu 8 surumunden sonra kaldırıldı. Benim gibi drush ard kullanmayı seviyorsanız drush 8 kurmakta fayda var.

Adım 6: Yolunuza Sıkıcı Dizin Ekleyin

6. Adımda sürüm kontrolünü gerçekleştirdiğinizde consolda "-bash: drush: command not found" hatasıyla karşılaşıyorsanız .bashrc dosyanızı açın ve aşağıdaki aliası dosyaya ekleyin.
nano .bashrc
Aşağıdaki aliası açtığınız dosyaya ekleyin.

#path for Drush
export PATH="$HOME/.composer/vendor/bin:$PATH"

Drush'ı çalıştır dosyadaki değişiklikleri tanır.

source .bashrc

Adım 7: Drush Kurulumunu Doğrulayın

Aşağıdaki komutu çalıştırarak Drush kurulumunun sürümünü ve diğer yararlı bilgileri doğrulayabilirsiniz.

drush status

Çıktı:

 PHP executable         :  /usr/bin/php                                 
 PHP configuration      :  /etc/php/7.3/cli/php.ini                     
 PHP OS                 :  Linux                                        
 Drush script           :  /root/.composer/vendor/drush/drush/drush.php 
 Drush version          :  8.0.0                                        
 Drush temp directory   :  /tmp                                         
 Drush configuration    :                                               
 Drush alias files      :

Neden En İyi Kuruluşlar Drupal'a Güveniyor?

Neden En İyi Kuruluşlar Drupal'a Güveniyor?

Büyük organizasyonlar söz konusu olduğunda, önemli olan sadece web sitesinin görünümü ve hissi değildir. Daha ziyade, kullanıcılar ve kendileri ve hatta çalışanları arasında değiştirilen veriler hassastır ve bu nedenle, büyük bir takdirle ele alınmalıdır. Sonuç olarak, bu üst düzey kuruluşların çoğu ve Fortune 500 şirketleri, diğer CMS'lerden ziyade Drupal'a güveniyorlar.

Üst düzey bir şirket söz konusu olduğunda, hükümet web sitelerinin ve üniversite web sitelerinin referanslarını atlayamazsınız. Milyonlarca insan bilgi için bu web sitelerine güveniyor ve günlük ihtiyaçların yanı sıra kritik.

Kaç devlet sitesinin Drupal'ı arka uç olarak kullandığını mı merak ediyorsunuz? Sadece Drupal tarafından desteklenen çeşitli hükümet web sitelerini gösteren bu bağlantıya bir cursory göz atın .

Drupal'da yayınlanan önde gelen hükümet web sitelerinden bazıları şunlardır:
• Avustralya Suç Komisyonu
• Avustralya Hukuk Reform Komisyonu
• Kanser Avustralya
• İklim Değişikliği Otoritesi
• Başbakanlık Silahlı Kuvvetler Bölümü Bangladeş
• Bangladeş'in Doğum ve Ölüm Kayıt Projesi
• Belçika Sağlık Bilgi Merkezi
• Belçika Açık Veri Girişimi
• Belçika Başbakanlık İnternet Sitesi
• Brezilya Sağlık Bakanlığı
• Uluslararası Denizcilik Örgütü, Brezilya
• Kanada Başbakanı İnternet Sitesi
• Kanada Kraliyet Atlı Polisi
• Kanada İnsan Hakları Müzesi
• Çin Ulusal Meteoroloji Merkezi
• Danimarka Bilim, Teknoloji ve Yenilik
Bakanlığı • Turizm ve Ticaret Pazarlaması Bölümü, Dubai
• Fransız Hükümeti Resmi Portalı
• Fransız Hükümeti Resmi Web Sitesi
• Fransız Premier Web Sitesi
• Çevre Bakanlığı Web Sitesi, Almanya
• Hindistan Ulusal Portalı
• İçişleri Bakanlığı İşleri, Hindistan
• MyGov
• Hindistan'da Neredeyse Tüm Eyalet Web Siteleri
• ABD'deki başlıca Beyaz Saray web siteleri

Açıkçası, bu sadece buzdağının görünen kısmı.

Benzer şekilde, Drupal'da işletilen uluslararası üne sahip bazı büyük üniversiteler şunlardır:

• Stanford Üniversitesi
• Minnesota Üniversitesi
• MIT
• Oxford Üniversitesi
• UCLA
• Harvard Üniversitesi

Aslında, en iyi 100 uluslararası üniversiteden 71'i Drupal kullanıyor.

İşte Drupal kullanan bazı Fortune 500 şirketleri

• Qualcomm
• Pfizer
• GE
• Xerox
• Tesla
• Kutu
• Verizon
• Pinterest
• Twitter
• Nokia
• eBay
• Timex
• Charles Schwab

Bu nedenle, NASA bile ana web sitesi için Drupal kullanıyor.

Daha büyük web siteleri için Drupal'ın mükemmel özellikleri nelerdir?
Bir kuruluşun web sitesinin oluşturulması ve sürdürülmesi söz konusu olduğunda dikkate alınan birçok faktör vardır. Binlerce insan, çeşitli ihtiyaçlar için günlük olarak web sitelerine erişiyor. Bu nedenle, maksimum insan sayısının gereksinimlerini ve beklentilerini dikkate almaları gerekir.

Büyük kuruluşların CTO'larının Drupal'a gitmesinin en büyük nedenlerinden biri, 24 × 7 katkıda bulunan binlerce geliştiricinin çok başarılı bir açık kaynak projesi olması.

Açık kaynaklı bir proje olmasına rağmen, Drupal çok sağlam bir destek tabanına sahip en güvenli platformlardan biridir. Çok geniş bir kullanıcı tabanına sahip olduğundan, bu büyük organizasyonlara mükemmel destek sağlayan birçok önde gelen web geliştirme şirketi Drupal ile ulusal ve uluslararası çok büyük kuruluşlar için prestijli web sitesi projeleri gerçekleştirmiştir.

Büyük kuruluşlar için bütçe de çok ciddi bir husustur. Küçük projeler bile kuruluşun büyüklüğü nedeniyle önemli giderlere dönüşebilir ve bu nedenle her aşamada harcamalarının kontrollu tutmaları gerekir.

Drupal için lisans ücreti yoktur. Kurumsal pazarda, yazılım lisansları büyük bir finansal baskı olabilir. Drupal kullanımı lisans ücreti faktörünü derhal ortadan kaldırır.

Çok çeşitli Drupal servis sağlayıcıları mevcuttur. Yetkinlik düzeyi ajanstan ajansa farklılık gösterse de büyük ölçekli Drupal destekli web sitelerini yönetmek için destek ekipleri oluşturmak, diğer tescilli kurumsal düzey web sitesi yönetim çözümlerine kıyasla çok daha kolaydır.

Çeşitli hükümetler erişilebilirlik özelliklerinin web sitelerine dahil edilmesini zorunlu hale getirmiştir. İşletmeler, web sitelerini farklı ihtiyaçlara sahip kişiler için erişilebilir hale getirmezlerse lisanslarını kaybedebilirler. Drupal, endüstrinin en iyileri arasında bulunan dahili erişilebilirlik özellikleri ile birlikte gelir.

Drupal kullanıldığında kuruluş verileri ne kadar güvenli?

Verilerin güvenliği ve emniyeti, daha büyük kuruluşlar ve işletmeler arasındaki en önemli hususlardan biridir ve bu bağlamda Drupal, kategorisindeki en iyi güvenlik özelliklerinden birini sunmaktadır.

Drupal, güçlü güvenlik özellikleri ve sağlam içerik yönetimi için büyük işletmeler, sivil toplum kuruluşları, tanınmış markalar, üniversiteler ve devlet kurumları tarafından özel olarak kullanılmaktadır.

Drupal CMS tasarımı, Açık Web Uygulaması Güvenlik Projesi'nin (OWASP) tüm güvenlik standartlarını karşılamaktadır . Yazılımın güvenliğini artırmak için çalışan kar amacı gütmeyen bir vakıftır. Tıpkı W3C'nin web tasarımcıları ve çevrimiçi erişilebilirlik uzmanları arasında bir ölçüt olması gibi, yazılım şirketleri ve içerik yönetim sistemleri de en son güvenlik gereksinimlerine uymak için OWASP yönergelerini kullanıyor. Drupal geliştirme ekibi tüm dünyaya yayıldı, güvenlik özelliklerini sürekli olarak en katı standartlara göre test etti.

Drupal, parola şifrelemeyi kullanıma hazır kullanır. Parolalar şifreli olarak tuzlanır ve veritabanında saklandıklarında tekrar tekrar karma hale getirilir. Minimum veya maksimum uzunluk, şifrelerin karmaşıklığı, son kullanma tarihi, SSL ve 2 faktörlü kimlik doğrulama gibi çeşitli şifre tanımlama standartlarını destekler. Ayrıca LDAP, Shibboleth, OpenID ve SAML gibi tekli oturum açma sistemleri kullanır.

Giriş kontrolu
Kurumsal düzeydeki her web sitesinin birden fazla kullanıcısı vardır. Tipik bir web sitesinde yüzlerce yazar, çok sayıda yönetici ve bazen de binlerce veri giriş operatörü vardır. Drupal, yöneticilere ayrıntılı kullanıcı erişim kontrolü sağlar. Yöneticiler kolayca kullanıcı rolleri oluşturabilir ve çeşitli düzeylerde izinler atayabilir. Örneğin, bir yazar içerik oluşturabilir ve güncelleyebilir ancak yayınlayamaz. Web sitesinin farklı bölümleri erişim sağlanarak veya erişim reddedilerek kontrol edilebilir.

Veritabanı Şifrelemesi
Drupal, üst düzey veritabanı şifrelemesi için kolayca yapılandırılabilir. Saha çapında ve ayrıntı düzeyinde uygulanabilir. Belki de tüm veritabanını şifrelemenize gerek yoktur, sadece gizli kullanıcı verileri gibi bazı bölümleri şifrelemeniz gerekebilir. Drupal ile birlikte gelen şifreleme sistemi, PCI ve HIPPA dahil olmak üzere en katı gizlilik yasalarına ve sözleşmelerine uyar. Ayrıca, site dışı şifreleme anahtarı yönetimi ile birlikte gelir, böylece tek bir kullanıcı makinesinin güvenliği ihlal edilmiş olsa bile, web sitesi verileri güvende kalır.

Diğer Drupal Korumaları

• Brute Force Detection
• XSS, CSRF ve diğer zararlı veri giriş denemelerinin önlenmesi.
• DoS saldırılarının azaltılması
• OWASP tarafından belirlenen ilk 10 riske dikkat etme

Her kuruluş benzersiz ve son derece bireysel veri güvenliği ihtiyaçları olsa da, bunlar en iyi organizasyonları ve üniversiteleri Drupal'ı birincil web sitesi yönetim yazılımı olarak benimsemeye teşvik eden daha geniş güvenlik özellikleridir.

Bu, Algılama Sistemindeki Drupal Geliştirme ekibinin, son derece güvenilir Drupal CMS tarafından desteklenen, onlar için kritik web siteleri uygulamak için uluslararası prestijli müşterilerle sürekli çalışmasının bir nedenidir .

Drupal 8 için Sunucu Kurulumu (lemp) Nasıl Yapılmalıdır?

drupal lemp

Bu yazıda Drupal 8'in Nginx, PHP-FPM, MySQL ve phpMyAdmin ile nasıl kurulacağını öğreneceksiniz.

SSH'ye erişmek için Windows için Putty kullanabilirsiniz. Linux kullananlar bilirler termina ile sunucuya bağlanabilirsiniz.

Sunucunuzu koruyun

example_user öğesini istediğiniz kullanıcı adıyla değiştirerek kullanıcıyı oluşturun. Daha sonra kullanıcıya bir şifre atamanız istenecektir:
adduser example_user

Root kullanıcı ile SSH üzerinden girişlere izin vermeyin. Tüm SSH bağlantılarının root olmayan kullanıcılar tarafından yapılmasını gerekir. Sınırlı bir kullanıcı hesabı bağlandığında, yönetici ayrıcalıklarına sudo kullanarak veya su - kullanarak bir kök kabuğuna geçerek root kullanıcı yetkilerine erişilebilir.

sudo nano /etc/ssh/sshd_config
# Authentication: ...

PermitRootLogin no

Linux sisteminizi güncelleyin (Debian, Ubuntu vs)

sudo apt-get update

Nginx ve PHP-FPM'i kurun

Nginx'i aşağıdaki apt komutuyla yükleyin:

sudo apt-get install nginx -y

Ardından, Drupal çekirdeği için gerekli olan php-gd uzantılı php7.2-fpm'yi kurun:

sudo apt-get install php7.2-fpm php7.2-cli php7.2-gd php7.2-mysql php7.2-xml -y

Nginx ve PHP-FPM'i yapılandırın

Bu adımda, Nginx'i PHP sayfaları için HTTP istekleri sunmak üzere php-fpm kullanacak şekilde yapılandıracağız. Php-fpm "/etc/php/7.2/fpm" dizinine gidin ve "php.ini" dosyasını düzenleyin:

sudo nano /etc/php/7.2/fpm/php.ini

cgi.fix_pathinfo satırını açın ve değeri "0" olarak değiştirin

Nano komutunu kullanırken, bu satırı bulmak için CTRL + W tuşlarını kullanabilirsiniz. Bir kez değiştiğinde değişiklikleri kaydetmek için CTRL + O tuşlarına basın ve nano editörden çıkmak için CTRL + X tuşlarına basın.

Şimdi varsayılan Nginx sanal ana bilgisayar yapılandırmasını değiştirmeliyiz. "Default" dosyasını düzenleyin ve php-fpm direktifini etkinleştirin.

sudo nano /etc/nginx/sites-available/default
location ~ \.php$ bölümunu aşağıdaki gibi ayarlayın.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
# With php7.2-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php7.2-fpm:
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}

CTRL + O ve CTRL + X

Ardından Nginx yapılandırmasını geçerli olduğundan emin olmak için "nginx -t" komutuyla test edin:

nginx -t

Hata yoksa, nginx ve php-fpm servisini yeniden başlatın:

systemctl restart nginx
systemctl restart php7.2-fpm

PHP Bilgi dosyası (İsteğe bağlı)

Daha sonra, "/var /www /html" dizininde yeni php bilgi dosyası oluşturarak php-fpm dosyasının nginx ile düzgün çalıştığını test edin.

cd /var/www/html/
echo "<? php phpinfo(); ?>" > info.php

Bir web tarayıcısında sunucu IP'sindeki info.php dosyasını ziyaret edin. Sonuç, aşağıdaki ekran görüntüsüne benzer olmalıdır.

VirtualHost'u Drupal İçin Yapılandırın

Drupal 8'i "/srv/www/magnec.com" dizinine yükleyeceğiz. Lütfen yüklemenizdeki etki alanı adımı, bu Drupal yüklemesini kullanmak istediğiniz web sitesinin etki alanı adıyla değiştirin. Öyleyse dizini oluşturalım:

sudo mkdir -p /srv/www/magnec.com/{public_html,logs}
sudo usermod -a -G www-data admin
sudo chown -R www-data:www-data /srv/www
sudo chmod -R 775 /srv/www
sudo nano /etc/nginx/sites-available/magnec.com

Drupal 8 için Nginx yapılandırmasını yapıştırın:

server {
    server_name magnec.com;
    root /srv/www/magnec.com/public_html; ## <-- Your only path $
    access_log /srv/www/magnec.com/logs/access.log;
    error_log /srv/www/magnec.com/logs/error.log;

    listen 80;
    listen [::]:80;


    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Very rarely should these ever be accessed outside of your lan
    location ~* \.(txt|log)$ {
        allow 192.168.0.0/16;
        deny all;
    }

    location ~ \..*/.*\.php$ {
        return 403;
    }

    location ~ ^/sites/.*/private/ {
        return 403;
    }

    # Block access to "hidden" files and directories whose names begin with a
    # period. This includes directories used by version control systems such
    # as Subversion or Git to store control files.
    location ~ (^|/)\. {
        return 403;
    }

    location / {
        # try_files $uri @rewrite; # For Drupal <= 6
        try_files $uri /index.php?$query_string; # For Drupal >= 7
    }

    location @rewrite {
        rewrite ^/(.*)$ /index.php?q=$1;
    }

    # In Drupal 8, we must also match new paths where the '.php' appears in the middle,
    # such as update.php/selection. The rule we use is strict, and only allows this pattern
    # with the update.php front controller.  This allows legacy path aliases in the form of
    # blog/index.php/legacy-path to continue to route to Drupal nodes. If you do not have
    # any paths like that, then you might prefer to use a laxer rule, such as:
    #   location ~ \.php(/|$) {
    # The laxer rule will continue to work if Drupal uses this new URL pattern with front
    # controllers other than update.php in a future release.
    location ~ '\.php$|^/update.php' {
        fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
        #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
        include fastcgi_params;
        include snippets/fastcgi-php.conf;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_intercept_errors on;
        fastcgi_pass unix:/run/php/php7.2-fpm.sock;
    }

    # Fighting with Styles? This little gem is amazing.
    # location ~ ^/sites/.*/files/imagecache/ { # For Drupal <= 6
    location ~ ^/sites/.*/files/styles/ { # For Drpal >= 7
        try_files $uri @rewrite;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }
}

CTRL + O ve CTRL + X

Drupal sanal ana bilgisayar dosyası oluşturuldu, şimdi "sites-enabled" dizinindeki dosyaya bir link oluşturarak onu aktive etmemiz gerekiyor:

ln -s /etc/nginx/sites-available/magnec.com /etc/nginx/sites-enabled/

Nginx yapılandırmasını test edin ve hata yoksa Nginx'i yeniden başlatın:

nginx -t
systemctl restart nginx

MySQL'i yükleyin

sudo apt-get install mysql-server
​sudo mysql_secure_installation

PhpMyAdmin'i yükleyin

sudo apt-get install phpmyadmin

Kurulum sizden otomatik yapılandırma istediğinde ESC'ye basın, çünkü Nginx için seçenek yoktur.

sudo ln -s /usr/share/phpmyadmin/ /srv/www/magnec.com/public_html/phpmyadmin

Drupal'ı Kurun ve Yapılandırın

Daha önce yarattığımız dizine girin ve Drupal'ı wget ile indirin. En yeni Drupal 8.6.13 yi kullanıyorum. 21 Mart 2019 tarihinden itibaren yayımlanan sürümde, Drupal 8 indirme sayfasını ziyaret ederek ve son sayıları yazarak en son sürümü indirdiğinizden emin olun.

cd /srv/www/magnec.com
sudo wget https://ftp.drupal.org/files/projects/drupal-8.8.1.tar.gz
sudo tar -xvzf drupal-8.8.1.tar.gz
sudo cp drupal-8.8.1/* public_html/ -R
sudo chown www-data:www-data public_html -R

Şimdi web tarayıcısında Drupal sitenizi ziyaret edin, aşağıdaki ekranı görmelisiniz

Drupal 8 karşılama ekranı

Şimdi, veritabanına bağlanmanın ve Drupal 8 web sitenizi kurmanın tam zamanı!

Takıldığınız bir yer olduğunda mail atmaktan aramaktan çekinmeyin! Mutlu Kodlamalar

Hizmetlerimizden birine ihtiyacınız olduğunda her zaman yanınızda olucağız.

Composer ile Drupal 8.8.0 Beta sürümüne güncelleme

drupal composer

Drupal 8.8.0 Beta Test Programı katılımcıları olarak, Drupal 8.7'deki sitelerimizden birini güncellemek için attığımız adımların belgelenmesinin faydalı olacağını düşündük. en son 8.8.0 beta.

Her site farklıdır, bu nedenle kilometreniz değişebilir, ancak size biraz zaman kazandırabilir.

Drupal 8.8, bir dizi yeni özellik eklenmiş büyük bir sürümdür ve Drupal 9.0 sürümüne giden yolu açmak için API'ler kullanımdan kaldırılmıştır. Neyse ki, yükseltme işlemi bizim durumumuzda oldukça basitti.

PathAuto'yu Yükselt
İlk adım The Path Alias ​​çekirdek alt sistemi "path_alias" modülüne taşındı Bu, bazı sınıfların farklı ad alanlarına taşındığı anlamına geliyordu. İşleri daha pürüzsüz hale getirmek için pathauto modülünün en son sürümünü yükledik ve önbellekleri temizledik.

composer require drupal/pathauto:^1.6@beta
drush cr

Core Dev Composer Paketi
Drupal çekirdeği ile test etmek için aynı geliştirici araçlarını kullanıyoruz ve yeni çekirdek besteci paketlerine geçmek istiyoruz, bu yüzden önce eskisini kaldırıyoruz.

composer remove --dev webflo/drupal-core-require-dev

Yamaları Güncelle
Bazen çekirdeği cweagans / besteci yamaları kullanarak düzeltmemiz gerekir . Bu site durumunda, ckeditor_stylesheets önbellek bozma işleminden bir yama kullanıyoruz : Drupal 8.8.x için yeniden yuvarlanması gereken system.css_js_query_string kullanın. Yamayı yeniden yuvarladık, ardından ekstra / yamalar bölümündeki bağlantıyı güncelledik .

Drupal Çekirdeğini ve Arkadaşlarını Güncelleyin
İlk denememizde, besteci bazı symfony paketleri ( symfony / finder , symfony / dosya sistemi ve symfony / debug ) ile bir sürüm çakışması nedeniyle yüklenemedi . Bunlar geçici bağımlılıklardır (açıkça belirtmiyoruz). Çözümümüz, Drupal çekirdeğinin uyumlu olduğu sürümlerle (geçici olarak) açıkça talep etmek ve daha sonra bunları kaldırmaktı.

İlk önce yeni Drupal çekirdeği ve bağımlılıkları gerekir:

composer require --update-with-dependencies \
  drupal/core:^8.8@beta \
  symfony/finder:^3.4 \
  symfony/filesystem:^3.4

İkincisi, yeni core-dev paketi ve bağımlılıkları gerektirir:

  composer require --dev --update-with-dependencies \
  drupal/core-dev:^8.8@beta \
  symfony/debug:^3.4

Son olarak, gerekli geçici bağımlılıkları kaldırın:

composer remove -n \
  symfony/finder \
  symfony/filesystem \
  symfony/debug

Veritabanını Güncelle ve Yapılandırmayı Dışa Aktar
Şimdi kodumuz güncellendi, veritabanı şemasını güncellememiz ve ardından yapılandırmamızı yeniden dışa aktarmamız gerekiyor. Biz kullanmak drush_cmi_tools sizin komutlar, örneğin sadece farklı olabilir, böylece drush yapılandırma ihracatı yerine drush cexy .

drush updb
drush cr
drush cexy

settings.php
Ayrıca, senkronizasyon dizini $ config_directories değil, $ ayarlarında tanımlandığından, settings.php dosyamızı şimdi güncellememiz gerekiyor .

Bu, aşağıdakilerden yapılan önemsiz bir değişikliktir:

$config_directories['sync'] = 'foo/bar';

için:

$settings['config_sync_directory'] = 'foo/bar';

Ayrıca geçici dosyalar dizinini config'ten ayarlara taşımalıyız.

$config['system.file']['path']['temporary'] = 'foo/bar';

için:

$settings['file_temp_path'] = 'foo/bar';

Son dokunuşlar
Emin bizim kod Drupal 9 uyumlu hale getirmek için, biz mükemmel kullanılarak API'ları kullanan herhangi bir özel kod kontrol PHPStan ve Matt Glaman' ler mglaman / phpstan drupal . (Alternatif olarak Drupal Kontrolü kullanabilirsiniz .)

"Nette / bootstrap": "> = 3" ile uyumsuz olan eski bir sürümü kullanıyorduk, bu yüzden bunu çatışma bölümünden kaldırmak ve bir kez daha kaldır / gerektirir dansı yapmak gerekiyordu.

 
 composer remove --dev \
  phpstan/phpstan-deprecation-rules \
  mglaman/phpstan-drupal

composer require --dev --update-with-dependencies \
  phpstan/phpstan-deprecation-rules:^0.11.2 \
  mglaman/phpstan-drupal:^0.11.12

Ve bu kadar! Composer bağımlılıkları çözüldükten sonra tamamen çokta zor değil. Beta'yı test ederken, bu sorunların bazıları gelecekteki betalarda ve RC'lerde ele alınabilir.

Umarım bunu faydalı bulmuşsundur! Daha iyi bir çözümünüz var mı? Bize bildirin!

Güncelleme: Ek ayar değişiklikleri eklendi.

Mutlu kodlamalar

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.

En İyi Drupal 8 Güvenlik Modülleri

Drupal güvenlik modulleri

İnternet bazen tehlikeli bir yer olabilir. Çok sayıda bilgisayar korsanı ve potansiyel olarak kötü uygulamalardan hızlıca kâr elde etmek isteyen insanlar ile doludur. Böyle bir ortamda, Drupal sitenizi olabildiğince güvenli hale getirmek giderek önem kazanmaktadır. Neyse ki, Drupal oldukça güvenli bir CMS olarak bilinir. Bununla birlikte, hiçbir şekilde mükemmel değildir ve çeşitli modüller için esnekliği ve desteği sayesinde, onu daha güvenli hale getirmek için kurabileceğiniz birkaç modül vardır. Bu nedenle, Drupal sitenize indirebileceğiniz ve kurabileceğiniz en iyi güvenlik modüllerinden bazılarına mümkün olduğu kadar kusursuz olmasını sağlayalım.

Login Security
Sitenize giriş sayfası, evinizin kapısı gibidir. O zaman güçlendirmek için ilk şey giriş işlemi olacaktır. Bu amaç için mükemmel bir modül Login Güvenlik Modülüdür. Hesabın otomatik olarak engellenmesini engelleyerek sınırlı sayıda giriş yapma denemesi yapmanıza olanak tanır. Buna ek olarak, sitenizde potansiyel bir kaba kuvvet saldırısı olması durumunda IP adreslerini engellemenin yanı sıra size e-posta yoluyla uyarılar göndermenizi sağlar.

Captcha Modülü
Hızlı soru: Spam gönderenleri uzak tutmanın en kolay ve en yaygın kullanılan yöntemi nedir? Elbette Captcha. Captcha modülü ile birkaç dakika içinde captcha'yı Drupal sitenize entegre edebilir ve sinir bozucu spam gönderenleri ve botları uzak tutabilirsiniz.

Security Kit
Sitenizi kusursuz kılmak için yolculuğunuzda en iyi arkadaşınız olacak bir modül olan Security Kit, siteniz için hacklenme şansınızı en aza indirmek için çeşitli seçenekleri yapılandırmanıza, düzenlemenize olanak tanıyan hepsi bir arada bir modüldür. Bunun da ötesinde, sitenizi olabildiğince kötü amaçlı saldırılara karşı dayanıklı kılmak için http başlıkları ayarlamak vb. Gibi yararlı talimatlar da sunar. Drupal sitelerinin korunmasına olanak veren çok değerli bir modül.

Password Policy
Siteniz için bir şifre politikası oluşturmak, yalnızca botları uzak tutmakla kalmayıp, aynı zamanda kullanıcıların yalnızca 'şifre123' türünü değil, güçlü bir şifre korumasını sağlamaya yardımcı olduğu için iyi bir fikirdir. Güçlü bir şifre, sitenizdeki ihlalleri önlemeye yardımcı olur ve bu da işlem sırasında çok daha güvenli olmasını sağlar. Parola ilkesi modülü, yalnızca kullanıcı tarafından parolaları kabul edilmeden önce karşılanması gereken bir dizi kısıtlama tanımlamanız için seçenekler sağlayarak bunu yapmanızı sağlar. Drupal 8 sürümü şu anda alfa aşamasındayken mükemmel bir şekilde çalışıyor, bu nedenle devam edin ve sitenizde etkinleştirin.

Session Limit
Adından da anlaşılacağı gibi, bu modül kullanıcı başına izin verilen maksimum oturum sayısını yapılandırmanıza izin verir. Oturum sayısı, bir kullanıcının oturum açtığı tarayıcı sayısıdır. Bu modülü kullanarak, kullanıcının yeni bir oturum açmadan önce başka bir oturumdan çıkmasını istemek gibi diğer seçenekleri de yapılandırabilirsiniz.

Sonuç
Bu modülleri kullanarak, Drupal sitenizin çok daha güvenli kalmasını sağlayabilirsiniz. Bir Drupal sitesinde güvenliğini sağlamak için uygulanabilecek ek teknikler olsa da, başlamak için bu modüller işi güzelce yapacaktır. Unutulmaması gereken bir başka şey, Drupal 8 ile kullanıma hazır birçok güvenlik önlemi uygulanmış olmasıdır, bu nedenle şu anda Drupal 7'den daha küçük bir miktar ek güvenlik modülü kullanmaktadır.

Siteniz için güvenlik önlemleri oluşturma konusunda kafanız mı karıştı? Sitenizin yeterince güvenli olup olmadığı konusunda endişeli misiniz? Bize ulaşın ve geniş Drupal deneyimimizin size bu konuda yardımcı olmasına izin verin!

Mutlu kodlamalar

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!

BigPipe Nedir ve Gelecekte Drupal Performans için Ne Anlama Geliyor?

Drupal Big pipe

 

Drupal'ın kurucusu ve lider geliştiricisi Dries Buytaert'in yakın zamanda yayınladığı bir blog yazısında, " ayrıştırma hareketi " nin çeşitli yönleri, çeşitli yaklaşımların artıları ve eksileri ve bunun Drupal'in gelecekteki tasarım mimarisi ile nasıl bir ilişkisi olduğu tartışıldı . Kendi deyimiyle "dekuplaj terimi, geleneksel olarak hizmet odaklı mimarlık kavramı yerine, arka uç ile bir veya daha fazla ön uç arasındaki bir ayrılığı ifade eder."

Son birkaç yıl içinde, kullanıcıların web sitelerinin altta yatan negatif durumlarda ötürü ve tüketicilerin İnternet'ten beklediği içerikle nasıl bağlantılı olduklarına dair kayda değer kayma nedeniyle, son derece büyük bir oranda geliştiricilerin dikkatini çeken ilginç bir konu. Yani, eğer bir şansınız varsa, bu blogu okumanızı ve Drupal'ın bu paradigmaya uyup uymadığını bir anlam kazanmanızı tavsiye ederim.

 

Peki, BigPipe nedir?

BigPipe , Facebook.com tarafından tasarlanan ve Facebook.com'un sayfa oluşturma verimliliğini önemli ölçüde artıran bir tarayıcı oluşturma sistemidir .

Tüm sistemi BigPipe olarak adlandırırız ve web sayfalarımızı Pagelets olarak adlandırılan mantıksal içerik bloklarına ayırmamıza ve bu Pagelet'lerin üretimini ve render edilmesini sağlar. Örneğin ana sayfaya baktığınızda, haber beslemesini bir Pagelet, başka bir öneri kutusu ve bir başka reklam olarak düşünün. BigPipe, sayfalarımızın TTL'lerini düşürmekle kalmaz, aynı zamanda kısmi içeriği görmenin daha hızlı bir şekilde tamamlanmasından daha hızlı hissedebildiğinden, kullanıcılar için daha hızlı görünmelerini sağlar.

TTL, "yüklenme zamanı" anlamına gelir ve bu işin ve Dries adreslerinin blog yayınının bazı adreslerini yürüten önemli metriktir. Yükleme süresi web sitesi kullanılabilirliği ve kullanıcı memnuniyeti için kritik öneme sahiptir, çünkü genellikle ziyaretçilerin ilgilerini çekmeden önce sadece birkaç saniyeniz vardır . Web sitenizin yüklenmesi 5-6 saniye sürüyorsa, büyük olasılıkla gelen ziyaretçileri kaybedebilirsiniz. Bu nedenle, TTL'yi mümkün olan en küçük süreye indiren mimari veya tasarım desenlerindeki her türlü değişiklik siteniz için önemli ölçüde elzem bir durumdur.

Drupal Zaten Önbellekleme Sistemlerine Sahip, Peki Neden BigPipe?

Ancak, yüksek oranda kişiselleştirilmiş içerik, her zaman benzersiz bir görüntüleyiciye özgü olduğundan ve performans önleme konusunda sınırlı geri dönüşlere sahip olduğundan, her zaman daha "pahalı" bir içerik türü olarak kalacaktır. Ek olarak, bu daha pahalı içerik parçaları, diğer daha az pahalı (önbelleklenmiş) içerik bileşenlerinin oluşturulmasını potansiyel olarak tutabilir, hatta bir saniyelik bir kesimde yapılabilse bile, bunların oluşumunu geciktirebilir.

Drupal 8, bu sorunu çözmek için BigPipe'ı entegre ederek ve Dries'e göre "BigPipe, hem temel hem de katkıda bulunan modüller için çekirdeğine  entegre eden tek CMS'dir."

İstemci tarafı dinamik içerik değişimi için bir yaklaşım olan BigPipe ile sayfalarımızın ilerlemesini, sayfanın iskeletinin ilk önce nereye yüklendiğini, daha sonra "geçen hafta en çok dinlediğim şarkılar" veya "şu anda çalmakta" gibi pahalı bileşenleri oluşturabiliyoruz. Daha sonra tarayıcıya gönderilir ve yer tutucuları doldurulur. Bu bileşen güdümlü yaklaşım, her iki dünyanın da en iyisini sunar: İlk etkileşime geçme süresi ve tema katmanından yararlanan tam Drupal sayfaların hızlı parça yüklemesi ile engellenmeyen kullanıcı arayüzleri.

Bunun performans açısından neye benzediğini görmek için, Aşağıdaki BigPipe ile ve BigPipe olmadan Drupal 8 de sayfa yüklerini gösteren bu kısa videoya göz atın.

Drupal 8'in Geleceği Parlak mı?

Bu videodan görebileceğiniz gibi, BigPipe sistemini Drupal 8 sayfasının içine yerleştirmek, yüklenme çok daha hızlı bir sürede sonuçlanıyor. Bu tür bir yanıt verme, daha yüksek düzeyde kullanıcı etkileşimi sağlamak için kritik öneme sahiptir ve sadece ziyaretçilerin web sitesinden ayrılmasının engellenmesine yardımcı olmakla kalmaz, aynı zamanda web sitesinin uzak ve yavaş içerikli bir mağazadan ziyade bir uygulama gibi daha fazla olmasını sağlar.

Bu tür bir sistem, çalışmasını sağlamak için geliştiricilerin daha fazla çalışmasını gerektirecek mi? Dries'e göre, modül geliştiricilerinin etiket, içerik ve yaş gibi özellikler biçiminde bazı " önbelleğe alınabilirlik meta verileri " sağlamaları gerekecek , ancak Drupal 8'in Dinamik Sayfa Önbellek modülü işin büyük kısmını yapmalıdır. Dolayısıyla, iyileştirilmiş oluşturma sistemi göründüğü kadar iyi çalışıyorsa ve önbelleğe alınmış meta verileri belgelendiği şekilde uygulanması kolaysa, Drupal 8 bir CMS platformu olarak gerçekten parlamak için büyük bir şansa sahip olur.

Abone ol Drupal