Ana içeriğe geç

Giriş

Kodla oynamadan içeriğiniz için özel alanlar tanımlayın.

🎯 Bu modül ne yapar?

AttributesSets modülü, içeriğiniz (ürünler, sayfalar, formlar vb.) için özel alanlar kullanmanıza olanak tanır; bunları uygulamanıza sabit kodlamadan.

Bunu verileriniz için bir form oluşturucu olarak düşünün - hangi alanlara ihtiyacınız olduğunu tanımlarsınız ve OneEntry geri kalanını halleder.

📖 Basit Açıklama

Bir çevrimiçi mağaza kurduğunuzu hayal edin. Her ürünün ihtiyacı var:

  • İsim (metin).
  • Fiyat (sayı).
  • Resim (görüntü).
  • Açıklama (uzun metin).
  • Kategori (açılır liste).

Bu alanları uygulamanızda sabit kodlamak yerine, Attributes kullanarak OneEntry yönetim panelinde tanımlarsınız. Sonra:

  • İstediğiniz zaman yeni alanlar ekleyebilirsiniz (kod değişikliği yok!).
  • Farklı içerik türleri arasında alanları yeniden kullanabilirsiniz.
  • Yeniden dağıtım yapmadan alan türlerini değiştirebilirsiniz.
  • Tüm içerik yapısını tek bir yerden yönetebilirsiniz.

Gerçek dünya örneği:

Attributes olmadan (sabit kodlanmış):
- Kod: const product = { name, price, image, description }
- "color" alanını eklemek için → Kodu değiştir, yeniden dağıt, bekle.

Attributes ile (dinamik):
- Yönetim paneli: "color" niteliğini ekle.
- Kod otomatik olarak yeni alanı içerir.
- Yeniden dağıtım gerekmez!

✨ Temel Kavramlar

Nedir bir Attribute?

Bir attribute, veri depolayan tek bir alandır.

Örnekler:

  • Ürün adı (dize).
  • Ürün fiyatı (ondalık).
  • Ürün resmi (görüntü).
  • Yayın tarihi (tarih).

Nedir bir Attribute Set?

Bir attribute set, bir yapıyı tanımlayan attribute'ların bir koleksiyonudur.

Örnek: Ürün Attribute Set'i

- name (dize)
- price (ondalık)
- description (metin)
- images (resim grubu)
- category (liste)
- inStock (tam sayı)

Neden Attribute Set'leri Kullanmalısınız?

❌ Attributes Olmadan✅ Attributes ile
Sabit kodlanmış alanlarDinamik alanlar
Kod değişiklikleri gerekliYönetim panelinde düzenleme
Yeniden dağıtım gerekliCanlı güncellemeler
Katı yapıEsnek yapı
Tekrar eden kodYeniden kullanılabilir setler

📋 Bilmeniz Gerekenler

Üç Önemli Terim

TerimNedirÖrnek
MarkerBenzersiz kod tanımlayıcı"product_name"
TypeHangi tür veriyi depolar"string", "integer", "image"
ValueAttribute değeri"Ürün Adı"

Marker'lar hakkında önemli bilgiler:

  • Benzersiz olmalıdır
  • Boşluk olmamalıdır (yerine _ kullanın)
  • Bir sayı ile başlayamaz
  • Tutarlılık için küçük harf kullanın

Örnekler:

  • ✅ İyi: product_name, price_usd, main_image
  • ❌ Kötü: product name, 2nd_price, Product Name

Yeniden Kullanılabilirlik

Attribute set'leri farklı varlıklar arasında yeniden kullanılabilir:

"Temel Bilgiler" Attribute Set'i:
- title (dize)
- description (metin)
- publish_date (tarih)

Kullanıldığı yerler:
- Blog yazıları
- Haber makaleleri
- Ürün sayfaları
- Etkinlik listeleri

Neden bu önemlidir: Bir kez değiştirin, her yerde güncellenir!


📚 Mevcut Veri Türleri

Attributes, farklı veri türlerini depolayabilir. Her alan için doğru türü seçin.

Hızlı Referans Tablosu

TürEn İyi KullanımÖrnek Kullanım
stringKısa metinÜrün adı, e-posta
textUzun biçimlendirilmiş metinBlog yazısı, açıklama
textWithHeaderBaşlıklı metinMakale bölümleri
integerTam sayılarMiktar, yaş
realYüksek hassasiyetli ondalıklarBilimsel veriler
floatOndalık sayılarFiyat, puan
dateSadece tarihDoğum tarihi, son tarih
dateTimeTarih + saatEtkinlik başlangıcı, yayın tarihi
timeSadece saatAçılış saatleri
fileHerhangi bir dosyaPDF, belge
imageTek bir resimAvatar, logo
groupOfImagesBirden fazla resimFotoğraf galerisi
radioButtonTek seçimBoyut (S/M/L)
listAçılır listeÜlke, kategori
entityDiğer içeriğe bağlantıİlgili ürünler
timeIntervalTarih aralığıPromosyon süresi
jsonÖzel yapılandırılmış veriAPI yanıtı

🔍 Detaylı Veri Türü Açıklamaları

Metin Türleri

Ne zaman neyi kullanmalısınız:

  • string - Tek satır, 255 karakterden az (isim, e-posta, başlık)
  • text - Birden fazla paragraf, biçimlendirmeyi destekler (makaleler, açıklamalar)
  • textWithHeader - Başlık gerektiren metin (blog bölümleri, SSS)

Sayı Türleri

Ne zaman neyi kullanmalısınız:

  • integer - Ondalık gerektirmeyen sayılar (yaş, miktar, görüntüleme)
  • float - Standart ondalık sayılar (fiyat $19.99, puan 4.5)
  • real - Ekstra hassasiyet gerektiren sayılar (bilimsel hesaplamalar)

Tarih/Saat Türleri

Ne zaman neyi kullanmalısınız:

  • date - Sadece gün (doğum günü, son tarih)
  • time - Sadece saat (iş saatleri, randevu saati)
  • dateTime - Her ikisi de gerekli (etkinlik başlangıcı, makale yayınlandı)
  • timeInterval - Tarihler arasındaki dönem (indirim süresi, tatil tarihleri)

Dosya ve Resim Türleri

Ne zaman neyi kullanmalısınız:

  • file - Herhangi bir belge (PDF, DOC, ZIP)
  • image - Tek bir resim (ürün fotoğrafı, avatar)
  • groupOfImages - Birden fazla resim (galeri, ürün resimleri)

Seçim Türleri

Ne zaman neyi kullanmalısınız:

  • radioButton - Yalnızca BİR seçeneği seçin (Evet/Hayır, Boyut S/M/L)
  • list - Seçeneklerle açılır liste (Ülke, Kategori, Durum)

Gelişmiş Türler

  • entity - Diğer sayfalara/ürünlere bağlantı (İlgili Öğeler, Kategoriler)
  • json - Karmaşık veri yapıları depolamak için (API yanıtları, ayarlar)

📖 Veri Türü Örnekleri

Aşağıda her veri türünün yapısına dair teknik örnekler bulunmaktadır.

Tüm veri türü örneklerini görmek için tıklayın

Veri Türleri Referansı

Veri türleri aşağıdaki türlerde olabilir:

  • String: Basit metin, örneğin, "Merhaba, dünya!".

Örnek:

{
"type": "string",
"value": {},
"marker": "string",
"position": 1,
"listTitles": [],
"validators": {
"requiredValidator": {
"strict": true
}
},
"localizeInfos": {
"title": "String"
},
"additionalFields": [
{
"type": "integer",
"value": "10",
"marker": "Extra"
}
]
}

  • Text: Daha uzun metin, genellikle biçimlendirilmiş, örneğin, bir makale veya mektup.

Örnek:

{
"type": "text",
"value": {},
"marker": "text",
"position": 2,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Text"
},
"additionalFields": []
}

  • Text with Header: Bir konu veya kategori belirtmek için kullanılabilecek başlıklı metin.

Örnek:

{
"type": "textWithHeader",
"value": {},
"marker": "text_with_header",
"position": 3,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Text With Header"
},
"additionalFields": []
}

  • Integer: Bir tam sayı, örneğin, 5, 100, -2.

Örnek:

{
"type": "integer",
"value": {},
"marker": "integer",
"position": 4,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Integer"
},
"additionalFields": []
}

  • Real: Float ile aynı, ancak daha yüksek hassasiyetle.

Örnek:

{
"type": "real",
"value": {},
"marker": "real_number",
"position": 5,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Real Number"
},
"additionalFields": []
}

  • Float: Ondalık kısmı olabilen kayan nokta sayıları için bir veri türü, örneğin, 3.14, 1.5, -0.25.

Örnek:

{
"type": "float",
"value": {},
"marker": "float",
"position": 6,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Float"
},
"additionalFields": []
}

  • Date and Time: Tarih ve saat kombinasyonu, örneğin, 2023-10-27 10:00:00.

Örnek:

{
"type": "dateTime",
"value": {},
"marker": "date_time",
"position": 7,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "DateTime"
},
"additionalFields": []
}

  • Date: Bir tarih, örneğin, 2023-10-27.

Örnek:

{
"type": "date",
"value": {},
"marker": "date",
"position": 8,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Date"
},
"additionalFields": []
}

  • Time: Bir saat, örneğin, 10:00:00.

Örnek:

{
"type": "date",
"value": {},
"marker": "date",
"position": 8,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Date"
},
"additionalFields": []
}

  • File: Bilgisayarınızdaki herhangi bir dosya, örneğin, bir belge, resim, müzik.

Örnek:

{
"type": "file",
"value": {},
"marker": "file",
"position": 10,
"listTitles": [],
"validators": {
"checkingFilesValidator": {
"maxUnits": "kb",
"maxValue": "2000",
"minUnits": "kb",
"minValue": 0,
"extensions": []
}
},
"localizeInfos": {
"title": "File"
},
"additionalFields": []
}

  • Image: Bir resim, örneğin, bir fotoğraf, çizim.

Örnek:

{
"type": "image",
"value": {},
"marker": "image",
"position": 11,
"listTitles": [],
"validators": {
"sizeInPixelsValidator": {
"maxX": "500",
"maxY": "500"
}
},
"localizeInfos": {
"title": "Image"
},
"additionalFields": []
}

  • Group of Images: Bir resim koleksiyonu, örneğin, bir fotoğraf albümü.

Örnek:

{
"type": "groupOfImages",
"value": {},
"marker": "image_group",
"position": 12,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Image Group"
},
"additionalFields": []
}

  • Radio Button: Yalnızca bir seçeneğin seçilebileceği bir seçim butonu.

Örnek:

{
"type": "radioButton",
"value": {},
"marker": "radio",
"position": 13,
"listTitles": [
{
"title": "A",
"value": "a",
"extended": {
"type": null,
"value": null
},
"position": 1
},
{
"title": "B",
"value": "b",
"extended": {
"type": null,
"value": null
},
"position": 2
}
],
"validators": {},
"localizeInfos": {
"title": "Radio"
},
"additionalFields": []
}

  • List: Bir öğe listesi, örneğin, bir alışveriş listesi.

Örnek:

{
"type": "list",
"value": {},
"marker": "list",
"position": 14,
"listTitles": [
{
"title": "A",
"value": "a",
"extended": {
"type": null,
"value": null
},
"position": 1
},
{
"title": "B",
"value": "b",
"extended": {
"type": null,
"value": null
},
"position": 2
},
{
"title": "C",
"value": "c",
"extended": {
"type": "string",
"value": "Ek Değer"
},
"position": 3
}
],
"validators": {},
"localizeInfos": {
"title": "List"
},
"additionalFields": []
}

  • Entity: Bir nesneyi temsil eden bir varlık.

Örnek:

{
"type": "entity",
"value": {},
"marker": "entity",
"position": 15,
"listTitles": [
{
"title": "Ürünler",
"value": {
"id": 1,
"depth": 0,
"parentId": null,
"position": 1,
"selected": true
}
},
{
"title": "Normal Sayfa",
"value": {
"id": 4,
"depth": 0,
"parentId": null,
"position": 2,
"selected": true
}
},
{
"title": "Hata",
"value": {
"id": 2,
"depth": 0,
"parentId": null,
"position": 3,
"selected": true
}
}
],
"validators": {},
"localizeInfos": {
"title": "Entity"
},
"additionalFields": [
{
"type": "string",
"value": "Test Field",
"marker": "test_field"
}
]
}

  • Time interval: Kullanıcı dostu bir arayüze sahip esnek bir takvim.

Örnek:

{
"time_interval": {
"id": 4,
"type": "timeInterval",
"value": [
{
"values": [
{
"id": "1dc1787d-acc3-4315-a45d-52166c72e577",
"dates": ["2025-11-27T00:00:00.000Z", "2025-11-27T00:00:00.000Z"],
"times": [
[
{
"hours": 19,
"minutes": 18
},
{
"hours": 21,
"minutes": 19
}
]
],
"intervals": [],
"exceptions": [
{
"date": "2025-12-17T17:00:00.000Z",
"externalTimes": [
["2025-12-17T17:25:00.000Z", "2025-12-17T17:27:00.000Z"]
]
}
],
"intervalId": "0da61a19-49cb-40b1-88e6-1fa3c93a1fa6",
"inEveryWeek": true
},
{
"id": "cfa187d3-0284-4e0d-8206-7b353cf47110",
"dates": ["2025-12-18T00:00:00.000Z", "2025-12-18T00:00:00.000Z"],
"times": [
[
{
"hours": 0,
"minutes": 25
},
{
"hours": 0,
"minutes": 27
}
],
[
{
"hours": 19,
"minutes": 18
},
{
"hours": 21,
"minutes": 19
}
]
],
"intervals": [],
"exceptions": [
{
"date": "2025-12-17T17:00:00.000Z",
"externalTimes": [
["2025-12-17T17:25:00.000Z", "2025-12-17T17:27:00.000Z"]
]
}
],
"intervalId": "0da61a19-49cb-40b1-88e6-1fa3c93a1fa6"
},
{
"id": "474de0f7-595f-49a5-aaa7-65617203ae69",
"dates": ["2025-12-25T00:00:00.000Z", "2025-12-25T00:00:00.000Z"],
"times": [],
"external": [
{
"date": "2026-01-15T00:00:00.000Z",
"inEveryMonth": true
}
],
"intervals": [],
"exceptions": [
{
"date": "2025-12-17T17:00:00.000Z",
"externalTimes": [
["2025-12-17T17:25:00.000Z", "2025-12-17T17:27:00.000Z"]
]
}
],
"intervalId": "0da61a19-49cb-40b1-88e6-1fa3c93a1fa6",
"inEveryWeek": true,
"inEveryMonth": true,
"inEveryYears": true
}
],
"intervalId": "0da61a19-49cb-40b1-88e6-1fa3c93a1fa6"
},
{
"values": [
{
"id": "2f80dc18-16da-45cb-82c6-e41e1f6ee084",
"dates": ["2025-12-22T00:00:00.000Z", "2025-12-23T00:00:00.000Z"],
"times": [],
"intervals": [],
"exceptions": [],
"intervalId": "918175fd-cc18-4ca5-9bee-c78c61c9415a",
"inEveryWeek": true,
"inEveryMonth": true
}
],
"intervalId": "918175fd-cc18-4ca5-9bee-c78c61c9415a"
}
],
"isPrice": false,
"original": true,
"intervals": [
{
"id": "0da61a19-49cb-40b1-88e6-1fa3c93a1fa6",
"range": [
"2025-11-26T17:00:00.000Z",
"2025-11-26T17:00:00.000Z"
],
"external": [
{
"date": "2025-12-17T17:00:00.000Z",
"externalTimes": [
["2025-12-17T17:25:00.000Z", "2025-12-17T17:27:00.000Z"]
]
}
],
"intervals": [
{
"id": "01fea594-9933-47ac-af0a-ec0e0884f618",
"end": {
"hours": 21,
"minutes": 19
},
"start": {
"hours": 19,
"minutes": 18
},
"period": null
},
{
"id": "22ba24af-1fae-4422-8c92-0635b684a306",
"end": {
"hours": 0,
"minutes": 29
},
"start": {
"hours": 0,
"minutes": 25
},
"period": 2,
"external": {
"show": false,
"value": 2
}
}
],
"inEveryWeek": true,
"inEveryMonth": true,
"inEveryYears": true
},
{
"id": "918175fd-cc18-4ca5-9bee-c78c61c9415a",
"range": ["2026-01-18T17:00:00.000Z", "2026-01-20T17:00:00.000Z"],
"external": [],
"intervals": [],
"inEveryWeek": true,
"inEveryMonth": true,
"inEveryYears": true
}
],
"isVisible": true,
"identifier": "time_interval",
"localizeInfos": {
"en_US": {
"title": "Time interval"
}
},
"receiveValues": true
}
}

  • JSON: JSON formatında bazı veriler.

Örnek:

{
"type": "json",
"value": {},
"marker": "json",
"position": 17,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Json"
},
"additionalFields": []
}

İçerik doldurma arayüzü, her attribute alanı için seçilen veri türüne karşılık gelecektir.


💡 Önemli Notlar

Validator'lar

Veri kalitesini sağlamak için attribute'lar için validator'lar ekleyebilirsiniz:

  • Gerekli alanlar.
  • Metin için min/max uzunluk.
  • Yüklemeler için dosya boyutu sınırları.
  • Resimler için piksel boyutları.
  • Tarih aralıkları.

Daha fazla bilgi: Ayrıntılı yapılandırma için "Validator'lar" bölümüne bakın.

Paylaşılan Attribute Set'leri

⚠️ Önemli: Bir attribute set'i birden fazla varlık tarafından kullanılıyorsa, değişiklik yaparken dikkatli olun:

Bir attribute silmek:

  • Set'in kullanıldığı her yerden kaldırır.
  • O alandaki tüm içeriği siler.
  • Geri alınamaz!

Bir attribute eklemek:

  • Set'in kullanıldığı her yere eklenir.
  • Mevcut içerik değişmez.
  • Yeni alan mevcut öğeler için boş olacaktır.

Örnek:

"Ürün Bilgisi" kullanılan yerler:
- Fiziksel Ürünler.
- Dijital Ürünler.
- Hizmetler.

"weight" attribute'unu sil → ÜÇÜNDEN DE KALDIRILDI! ⚠️

📊 Hızlı Referans Tablosu - Yaygın Yöntemler

YöntemNe YaparNe Zaman Kullanılır
getAttributes()Tüm attribute set nesnelerini alır.
getAttributesByMarker()Attribute set'ten veri ile marker'a göre tüm attribute'ları alır.
getAttributeSetByMarker()Marker'a göre tek bir attribute set nesnesini alır.
getSingleAttributeByMarkerSet()Attribute set'ten veri ile bir attribute alır.

❓ Sıkça Sorulan Sorular (SSS)

string ile text arasındaki fark nedir?

  • string - Kısa metin, tek satır (maks ~255 karakter). İsimler, başlıklar, e-postalar için kullanın.
  • text - Uzun metin, birden fazla paragraf, biçimlendirme ve HTML destekler. Açıklamalar, makaleler için kullanın.

Ne zaman integer yerine float kullanmalıyım?

  • integer - Sadece tam sayılar: 1, 2, 100, -5. Miktarlar, sayımlar, yaşlar için kullanın.
  • float - Ondalık sayılar: 19.99, 4.5, -0.25. Fiyatlar, puanlar, ölçümler için kullanın.
  • real - Float gibi ama daha yüksek hassasiyet. Bilimsel hesaplamalar için kullanın.

En iyi uygulama: İçerik eklemeden önce attribute türlerinizi planlayın.


Bir attribute'u silersem ne olur?

  • Bir attribute set'inde kullanılıyorsa, bir attribute'u silemezsiniz.

Aynı attribute'u farklı attribute set'lerinde yeniden kullanabilir miyim?

Hayır, her attribute bir attribute set'ine aittir. Ancak:

  • Farklı marker'larla benzer attribute'lar oluşturabilirsiniz.
  • Tüm attribute set'lerini birden fazla varlıkta yeniden kullanabilirsiniz.

"Marker" nedir ve neden önemlidir?

Marker, kodda kullandığınız teknik tanımlayıcıdır:

// Kodunuzda:
product.attributeValues.product_name // ← "product_name" marker'dır

// VS yönetimde görünen isim:
"Ürün Adı" // ← Bu sadece insanlar içindir

Marker'lar için kurallar:

  • Benzersiz olmalıdır
  • Boşluk olmamalıdır (yerine _ kullanın)
  • Sayılarla başlayamaz
  • Küçük harf kullanın
  • Açıklayıcı isimler seçin

Verim için hangi türü kullanacağımı nasıl bilirim?

Kendinize sorun:

  1. Metin mi?

    • Kısa (< 255 karakter)? → string
    • Biçimlendirilmiş uzun mu? → text
    • Başlık gerektiriyor mu? → textWithHeader
  2. Sayı mı?

    • Ondalık yok mu? → integer
    • Ondalık var mı? → float
    • Bilimsel hassasiyet mi? → real
  3. Seçim mi?

    • Bir seçenek mi seçilecek? → radioButton
    • Açılır menü mü? → list
  4. Dosya mı?

    • Resim mi? → image veya groupOfImages
    • Belge mi? → file
  5. Tarih mi?

    • Sadece tarih mi? → date
    • Tarih + saat mi? → dateTime
    • Zaman aralığı mı? → timeInterval

İç içe attribute'lar (attribute içinde attribute) olabilir mi?

Doğrudan değil, ancak şunları kullanabilirsiniz:

  • entity türü ile diğer içeriklere bağlantı
  • json türü ile yapılandırılmış veri depolamak
  • İlgili alanları düzenlemek için birden fazla attribute set'i

Doğrulama kurallarını nasıl eklerim?

OneEntry yönetim panelinde:

  1. Attribute set'inize gidin
  2. Bir attribute'ya tıklayın
  3. Doğrulayıcılar ekleyin (gerekli, min/max, regex vb.)
  4. Değişiklikleri kaydedin

Yaygın doğrulayıcılar:

  • Gerekli alan
  • Min/max uzunluk
  • E-posta formatı
  • URL formatı
  • Dosya boyutu sınırları
  • Resim boyutları

🎓 En İyi Uygulamalar

  • Açıklayıcı marker'lar kullanın (product_price değil pp)
  • İçerik eklemeden önce attribute türlerini planlayın
  • Mümkünse attribute set'lerini yeniden kullanın
  • Veri kalitesini sağlamak için doğrulayıcılar ekleyin
  • Her attribute'un ne için olduğunu belgeleyin

Modülün kullanıcı arayüzü hakkında daha fazla bilgi https://doc.oneentry.cloud/docs/attributes/introduction

AttributesSets modülünün tanımı


const { AttributesSets } = defineOneEntry(
"your-project-url", {
"token": "your-app-token"
}
);


🔗 İlgili Belgeler