Sitenin dilinin id'si ve ismi

Aşağıdaki kod ile sitenin seçilmiş olan diliniz getirir.

<?php
// Get language manager service.
$languageManager = \Drupal::service('language_manager');
//Get the current lanuage code.
$langcode = $languageManager->getCurrentLanguage()->getId();
//Gett the current language name.
$langname = $languageManager->getCurrentLanguage()->getName();

Programatik olarak Node oluşturma

// Node deposu getir.
$nodeStorage = \Drupal::service('entity.manager')->getStorage('node');
// Set node content.
$content = [
    'type' => 'article',
    'title' => 'title',
    'body' => [
        'value' => 'Lorem ipsum dolor sit amet...',
        'format' => 'basic_html'
    ],
    'uid' => $uid
];
// Node oluşturma.
$node = $nodeStorage->create($content);
// Node-u kayıt et.
$node->save();

Check if Entity has a field

// Get entity storage.
$entityName = 'node';
$entityStorage = \Drupal::service('entity.manager')->getStorage($entityName);
// Load the entity by $eid - entity id.
$eid = 1;
$entity = $entityStorage->load($eid);
// Load field type by field name.
$fieldName = 'field_custom';
// Check if the entity has this $fieldName.
if ($entity->hasField($fieldName)) {
    // Do something...
}

Programatik olarak modülün durumunu sorgulama

Aşağıdaki kod ile modülün aktif veya aktif olmadığını test edebilirsiniz.

// Modülün makine ismi.
$moduleName = 'admin_toolbar';
//  $moduleName durumunu test ed'n'z.
$moduleHandler = \Drupal::service('module_handler');
if ($moduleHandler->moduleExists($moduleName)) {
    // aktif ise
}

Programatik olarak kullanıcıyı kullanıcı adı ve şifre ile doğrulama

$uid = \Drupal::service('user.auth')-&gt;authenticate($username, $password);

if ($uid) {
   // Başarıyla doğrulandığı takdirde ...
}

Drupal 8 Sayfa Yönlendirme, drupal_goto

Drupal 8'de drupal_goto fonksiyonu kaldırıldı, onun yerine RedirectResponse sınıfı kullanılmaya başlandı. Aşağıdaki örnekte mevcut sayfanın URL'si alınarak tekrar kendi içinde yönlendirme yapılmaktadır.

$current_path = \Drupal::service('path.current')->getPath();
$response = new RedirectResponse('/beyin-bilimi');
$response->send();
return;

Drupal 8'de Programatik Olarak Webform Submission Yükleme ve Düzenleme

Programatik olarak bir webform girdisini görüntülemek ve düzenlemek için aşağıdaki kodu kullanabilirsiniz.

$webform_submission = \Drupal\webform\entity\WebformSubmission::load($sid);
$data = $webform_submission->getData();
$data['adiniz'] = 'Mustafa';
$webform_submission->setData($data);
$webform_submission->save();      

Dil Değiştiricide ENGLİSH'i değiştirmek

Drupal 8'de Dil Değiştirici - Language Switcher'da yer alan İngilizce dilini (ENGLİSH) arayüzden translate edemiyoruz, orjinal dil olduğu için English olarak yer alıyor. Tema dosyasına aşağıdaki eklemeyi yaparak varsayınlan olarak gelen ENGLİSH metnini EN olarak değiştirebilirsiniz.

function MYTHEME_preprocess_links__language_block(&$variables) {
    $variables['links']['en']['link']['#title'] = 'EN';
}

ldap_user modülünü kaldırmak

Drupal 8'de ldap_user modülünü kaldırmak istediğinizde problem yaşayabiliyorsunuz.  Aşağıdaki gibi bir bağımlılıktan dolayı modül kaldırılamıyor.

There is data for the field ldap_user_ldap_exclude on entity type User

Bu durumu düzeltmek ve modülü kaldırabilmek için aşağıdaki sql'i kullanabilirsiniz.

UPDATE users_field_data SET ldap_user_puid_sid=NULL,ldap_user_puid=NULL,ldap_user_puid_property=NULL,ldap_user_current_dn=NULL,ldap_user_last_checked=NULL,ldap_user_ldap_exclude=NULL;

Drupal 8 Programatik Popup Mesaj Oluşturma

Drupal 8 ile kendinize özel popup mesajı oluşturmak için sisteminizde bootstrap kütüphanesinin ekli olması gerekmektedir.
 

İlk olarak kendimize bir region oluşturalım.

Drupal 8'de Node'u silinirken başka işlemler yapmak (hook_entity_delete)

Drupal 8'de bir node'u silerken farklı işlemler yapmak isterseniz hook_entity_delete hook'unu kullanabilirsiniz. Bu fonksiyon ile gelen entity parametresinden siline node içeriğine erişebilirsiniz.

Drupal 8 Programatik Logo Değiştirme

Drupal 8 'de logoyu programatik olarak değiştirebilmek için logonun bulunduğu block olan " block--system-branding-block.html.twig " dosyasını templates altındaki block klasöründen açıp düzenleme işlemi yapılmalıdır.

block--system-branding-block.html.twig dosyasının default olarak gelen verisi aşağıdaki gibidir.
{% extends "block.html.twig" %}
{#
/**
 * @file
 * Theme override for a branding block.
 *
 * Each branding element variable (logo, name, slogan) is only available if
 * enabled in the block configuration.
 *

Drupal 8 Amazon S3 Metadata Ayarlama

Drupal 8'i amazon ile entegre etmek için S3 File System modülunu kullanabilirsiniz. Bu modül sayesinde Drupal sisteminizde bulunan tüm dosyaların veya istediğiniz file field'ların amazon tarafında barındırılmasını sağlayabilirsiniz.  Tüm dosyaların amazon tarafında barındırılmasını istiyorsanız Drupal tarafından sıkıştırılan js ve css dosyaları da amazon tarafında barındırılacaktır.

Tüm siteyi HTTPS'ye Yönlendirme

Drupal veya başka bir içerik yönetim sisteminde tüm siteye ait HTTP trafiği 301 ile HTTPS'ye yönlendirmek için aşağıdaki kodu kullanabilirsiniz.

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Drupal 8 İçeriğin Dosyalarının Silinme Süresini Ayarlama

Drupal 8 ile gelen, drupal'ı daha da kullanışlı kılan özelliklerden bir tanesi olan dosya ve resim alanlarınıza yüklü bulunan dosyaların içerik silindikten sonra sunucudan silinme süresini ayarlamak için /admin/config/media/file-system adresine gidiniz.   İlgili sayfada Delete orphaned files after bölümünde silinme süresini ayarlayabilirsiniz.

Drupal 8 Block Çıktısı Veren Modül Oluşturma

Drupal 8 için geliştirdiğiniz modülün bazı işlemlerinin sonuçlarını block içerisinde göstermek istiyorsanız öncelikle modülünüzün .info.yml dosyasında block'u zorunlu hale getirmelisiniz. Bunu yapmasanızda modülünuz çalışır ancak block açık olmayan bir Drupal sitelerde modülünüz hata verecek ve sistemi çalışmaz hale getirecektir. 

Drupal 8 Programatik Olarak Resim Oluşturmak

Drupal 8 kullanıcısı iseniz ve  elenizde bulunan public://slider/2017-05/bl_slider1.png şeklinde resim yolunu Drupal resim stillerini kullanarak yeniden boyutlandırmak ve  <img src=''> şeklinde koda dönüştürmek için aşağıdaki fonksiyonu kullanabilirsiniz.

Drupal 8 Theme Suggestions

Drupal 8'de bazı kurallara göre farklı sayfa şablon dosyaları kullanabilirsiniz. Örneğin sisteme giriş yapmamış tüm kullanıcılar için ortak bir sayfa oluşturabilir veya URL'ye göre farklı şablon dosyaları kullanabilirsiniz. Aşağıdaki örnekte login olmamış olan kullanıcılar için page__not_logged_in  ve eğer içerik node ise node type şablon önerileri eklenmiştir. 

Drupal 8 Taxonomy Bilgilerine Programatik Olarak Erişmek

Drupal 8'de bazı durumlarda sınıflandırma terimlerini (taxonomy) programatik olarak yüklemeniz ve bilgilerine erişmeniz gerekebilir. Aşağıdaki kod örnekleri ile taxonomy id'ye göre ilgili terimin değerine veya adına erişebilirsiniz.

$term_id = \Drupal\taxonomy\Entity\Term::load($tid)->get('tid')->value;
$term_name = \Drupal\taxonomy\Entity\Term::load($tid)->get('name')->value;

Drupal 8 Kullanıcı Uid'sini alma

Drupal 8'de kullanıcının uid'sine programatik olarak erişmek için aşağıdaki komutu kullanabilirsiniz.

$account = \Drupal::currentUser();
$uid=$account->uid;

Drupal 8 Programmatically Node Field Düzenleme

Drupal 8 de node'unuzu programmatically(kodla manuel)  olarak güncellemek istiyorsanız bu yazı tam sizlere göre..

Node load ederken Drupal\node\Entity\Node::load  gibi uzunca bir kod yazmak istemiyorsanız öncelikle  use Drupal\node\Entity\Node; kodunu class'ınızın üstüne yapıştırın. 

  $node = Node::load($nid);
    $node->set('field_drupart','value');
    $node->save();

Drupal 8 Modül Oluşturma - Block Oluşturma

modules/block_ismi_klasor/src/Plugin/Block/testBlock.php klasör oluşalım. (büyük harfleri dikkat edelim, aksi durumda çalışmayacaktır ve PHP dosya adı her zaman Block ile bitmelidir.)

testBlock.php dosyasına aşağıdaki kodları ekleyelim. Dosya adı ve dosya içinde tanımlanan PHP sınıfı (class) aynı isme sahip olmalıdır.

Drupal'da settings.php içindeki veritabanı bilgilerine erişmek

Bir Drupal modülü geliştirirken settings.php içinde tanımlanan veritabanı bilgilerine programatik olarak erişmek için aşağıdaki kodu kullanabilirsiniz.

Drupal 7

global $databases;
// Check whether we have a default connection.
$has_connection = !empty($databases['default']['default']);

Drupal 8

use Drupal\Core\Database\Database;
$has_connection = (bool) Database::getConnectionInfo('default');

Drupal 8 Node Title, Field ve Type alanlarına erişim

Drupal 8 bildiğiniz gibi önceki Drupal versiyonlarından tamamen farklı bir altyapı ile geliştirildi. Bu değişim ile birlikte herşeyi en başından öğrenmeniz gerekiyor. Ama Drupal  mantığına sahip geliştiriciler için hayat o kadar da zor değil, çok daha hızlı bir şekilde öğrenebilirsiniz. Hali hazırda bir Drupal geçmişiniz varsa sadece yeni kullanımları - yaklaşımları öğrenmeniz yeterli olacaktır.


Node title, node type ve node içinde yer alan bir field'a (alan) erişmek için aşağıdaki yöntemleri kullanabilirsiniz.