Ana içeriğe geç

Giriş

İçeriğiniz için özel alanlar tanımlayın, kodla uğraşmadan.

🎯 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 kod olarak eklemeden.

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 (fotoğraf)
  • Açıklama (uzun metin)
  • Kategori (açılır liste)

Bu alanları uygulamanızda sabit kod olarak eklemek yerine, Attributes kullanarak OneEntry yönetim panelinde tanımlarsınız. Sonra şunları yapabilirsiniz:

  • ✅ Yeni alanlar ekleyin (kod değişikliği yok!)
  • ✅ Farklı içerik türlerinde alanları yeniden kullanın
  • ✅ Alan türlerini yeniden dağıtmadan değiştirin
  • ✅ Tüm içerik yapısını tek bir yerden yönetin

Gerçek dünya örneği:

Attributes olmadan (sabit kod):
- 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 saklayan tek bir alandır.

Örnekler:

  • Ürün adı (dize)
  • Ürün fiyatı (ondalık)
  • Ürün resmi (resim)
  • 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 OlmadanAttributes ile
❌ Sabit kodlanmış alanlar✅ Dinamik alanlar
❌ Kod değişiklikleri gerekli✅ Yönetim panelinde düzenle
❌ Yeniden dağıtım gerekli✅ Canlı güncellemeler
❌ Katı yapı✅ Esnek yapı
❌ Tekrar eden kod✅ Yeniden kullanılabilir setler

📋 Bilmeniz Gerekenler

Üç Önemli Terim

TerimNedirÖrnek
MarkerBenzersiz kod tanımlayıcı"product_name"
TypeHangi tür veriyi saklar"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 saklayabilir. 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 formatlı metinBlog yazısı, açıklama
textWithHeaderBaşlıklı metinMakale bölümleri
integerTam sayılarMiktar, yaş
realYüksek hassasiyetli ondalıkBilimsel 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 resimAvatar, logo
groupOfImagesBirden fazla resimFotoğraf galerisi
radioButtonTek seçimBeden (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ınlanma tarihi)
  • 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 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 - Sadece BİR seçeneği seçin (Evet/Hayır, Beden 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 Ürünler, Kategoriler)
  • json - Karmaşık veri yapıları saklamak 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: Sadece 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": "Ekstra 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:

{
"type": "timeInterval",
"value": {},
"marker": "time_interval",
"position": 16,
"listTitles": [],
"validators": {},
"localizeInfos": {
"title": "Time Interval"
},
"additionalFields": []
}

  • 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:

  • Zorunlu 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'yu silmek:

  • ❌ Setin kullanıldığı her yerden kaldırır
  • ❌ O alandaki tüm içeriği siler
  • ⚠️ Geri alınamaz!

Bir attribute eklemek:

  • ✅ Setin 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'yu sil → ÜÇÜ 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 setten 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 setten veri ile bir attribute alır.

❓ Sıkça Sorulan Sorular (SSS)

string ve 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'yu silersem ne olur?

  • Bir attribute setinde kullanılıyorsa, bir attribute'yu silemezsiniz.

Aynı attribute'yu farklı attribute setlerinde yeniden kullanabilir miyim?

Hayır, her attribute bir attribute setine aittir. Ancak şunları yapabilirsiniz:

  • Farklı marker'larla benzer attribute'lar oluşturun
  • Birden fazla varlık arasında tüm attribute setlerini yeniden kullanın

"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

// 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çiliyor? → 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ı kurun
  • json türü ile yapılandırılmış verileri saklayın
  • İlgili alanları düzenlemek için birden fazla attribute seti kullanın

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 (zorunlu, min/max, regex vb.)
  4. Değişiklikleri kaydedin

Yaygın doğrulayıcılar:

  • Zorunlu 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 setlerini yeniden kullanın
  • Veri kalitesini sağlamak için doğrulayıcılar ekleyin
  • Her attribute'nin 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