Ana içeriğe atla

Custom Entity Oluşturma

Gökhan Mertcan
Gökhan Mertcan
10 dakika okuma süresi
drupal

Drupal, modüler yapısı sayesinde esnek bir içerik yönetim sistemi sunar ve bu yapı, özel ihtiyaçlara uygun içerik türleri ve entiteler oluşturmayı oldukça kolaylaştırır. Bu yazıda, bir custom modül oluşturarak kodla custom entity oluşturma adımlarını inceleyeceğiz.

1. Giriş

Drupal'ın Entity API'si, içerik türleri, kullanıcılar, taksonomiler gibi farklı veri yapılarıyla çalışmayı kolaylaştırır. Ancak bazı projelerde, önceden tanımlı içerik türlerinden ve entitelerden farklı yapılar gerekebilir. Bu durumda, custom entity oluşturmak için kendi modülünüzü yazmanız gerekir.

2. Modül Yapısının Oluşturulması

Öncelikle, bir modül oluşturmak için gerekli dosya yapısını hazırlayalım. Aşağıdaki adımları izleyerek modülünüzü kurabilirsiniz:

a. Modül Klasörünü Oluşturma

Modülünüzü modules/custom dizinine yerleştirin ve aşağıdaki gibi bir klasör yapısı oluşturun:

modules/custom/my_custom_entity/
 ├── my_custom_entity.info.yml
 ├── my_custom_entity.module
 ├── src/
     └── Entity/
         └── MyCustomEntity.php
 └── config/
     └── install/
         └── my_custom_entity.schema.yml

 

b. .info.yml Dosyası

my_custom_entity.info.yml dosyasında modülünüzün temel bilgilerini belirtin:

name: 'My Custom Entity'
type: module
description: 'Provides a custom entity example.'
core_version_requirement: ^9 || ^10
package: Custom
dependencies:
 - drupal:node

3. Custom Entity Tanımlaması

Custom entity’yi tanımlamak için src/Entity/MyCustomEntity.php dosyasını oluşturalım. Bu dosyada, Drupal'ın ContentEntityBase sınıfını kullanarak custom entity sınıfını tanımlayacağız:

namespace Drupal\my_custom_entity\Entity;
use Drupal\Core\Entity\ContentEntityBase;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;
/**
* Defines the MyCustomEntity entity.
*
* @ContentEntityType(
*   id = "my_custom_entity",
*   label = @Translation("My Custom Entity"),
*   base_table = "my_custom_entity",
*   entity_keys = {
*     "id" = "id",
*     "label" = "name",
*   },
*   handlers = {
*     "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
*     "list_builder" = "Drupal\my_custom_entity\MyCustomEntityListBuilder",
*   },
*   links = {
*     "canonical" = "/my-custom-entity/{my_custom_entity}",
*   }
* )
*/
class MyCustomEntity extends ContentEntityBase {
 /**
  * {@inheritdoc}
  */
 public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
   $fields = parent::baseFieldDefinitions($entity_type);
   // Add a 'name' field.
   $fields['name'] = BaseFieldDefinition::create('string')
     ->setLabel(t('Name'))
     ->setRequired(TRUE)
     ->setSettings([
       'max_length' => 255,
     ]);
   return $fields;
 }
}

Bu sınıfta, custom entity'nizin base_table, handlers ve fields gibi özelliklerini tanımladık. Ayrıca, baseFieldDefinitions() yöntemiyle bu entity'ye ait alanları belirledik.

4. Entity Şeması Tanımlaması

Custom entity’nizin veritabanı yapısını belirlemek için my_custom_entity.schema.yml dosyasını config altına ekleyin:

my_custom_entity:
 type: entity
 label: 'My Custom Entity'
 mapping:
   id:
     type: int
     unsigned: true
     not null: true
     description: 'The primary identifier for the entity.'
   name:
     type: varchar
     length: 255
     not null: true
     description: 'The name of the custom entity.'

Bu dosya, veritabanında entity'nize ait tablo ve alanların yapısını oluşturur.

5. Custom Entity Listeleme ve Görüntüleme

Entity'nizi listelemek ve görüntülemek için Drupal'ın list_builder ve view_builder sınıflarını kullanabilirsiniz. Örneğin, basit bir listeleme sınıfı oluşturun:

namespace Drupal\my_custom_entity;
use Drupal\Core\Entity\EntityListBuilder;
class MyCustomEntityListBuilder extends EntityListBuilder {
 /**
  * {@inheritdoc}
  */
 public function buildHeader() {
   $header['name'] = $this->t('Name');
   return $header + parent::buildHeader();
 }
 /**
  * {@inheritdoc}
  */
 public function buildRow($entity) {
   $row['name'] = $entity->toLink($entity->label());
   return $row + parent::buildRow($entity);
 }
}

Bu sınıf, custom entity'nizi Drupal yönetici arayüzünde listelemek için kullanılır.

6. Modülünüzü Aktifleştirin

Yukarıdaki tüm adımları tamamladıktan sonra, Drupal yönetim paneline gidip modülünüzü etkinleştirin. Veritabanında gerekli tabloların oluşturulması ve yapılandırmaların uygulanması için drush veya arayüz üzerinden modülü aktif edebilirsiniz.

  • drush en my_custom_entity
  •  drush cr

7. Sonuç

Bu yazıda, Drupal ile nasıl custom modül oluşturarak kendi entity’nizi tanımlayabileceğinizi gösterdik. Custom entity’ler, Drupal projelerinde esneklik ve özelleştirme gerektiren durumlarda oldukça kullanışlıdır. Kodla bu yapıyı oluşturmak, gelecekteki projelerinizde size önemli bir avantaj sağlayacaktır.

Sonraki Adımlar:

  • Custom entity’ye özel form yapısı eklemek
  • Custom entity için izin ve erişim kontrolü ayarlamak

Drupal'ın Entity API'si ve modül geliştirme dökümantasyonuna göz atarak daha karmaşık ihtiyaçlara uygun çözümler oluşturabilirsiniz.

Ofislerimiz

Drupart Locations

Ofislerimiz

Drupart AR-GE

GOSB Teknopark Hi-Tech Bina 3.Kat B3 Gebze - KOCAELİ

+90 262 678 8872

+90 216 706 12 58 

[email protected]

Londra

151 West Green Road, London, England

+44 203 815 6478

[email protected]

Newark

112 Capitol Trail Suite, A437 Newark DE, 19711

+1 (740) 666 6255

[email protected]

Wiesbaden

Hinterbergstraße 27
65207 Wiesbaden
Deutschland

+49 (0) 6151 – 492 70 23

[email protected]