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ış alanlar | Dinamik alanlar |
| Kod değişiklikleri gerekli | Yönetim panelinde düzenleme |
| Yeniden dağıtım gerekli | Canlı güncellemeler |
| Katı yapı | Esnek yapı |
| Tekrar eden kod | Yeniden kullanılabilir setler |
📋 Bilmeniz Gerekenler
Üç Önemli Terim
| Terim | Nedir | Örnek |
|---|---|---|
| Marker | Benzersiz kod tanımlayıcı | "product_name" |
| Type | Hangi tür veriyi depolar | "string", "integer", "image" |
| Value | Attribute 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ür | En İyi Kullanım | Örnek Kullanım |
|---|---|---|
| string | Kısa metin | Ürün adı, e-posta |
| text | Uzun biçimlendirilmiş metin | Blog yazısı, açıklama |
| textWithHeader | Başlıklı metin | Makale bölümleri |
| integer | Tam sayılar | Miktar, yaş |
| real | Yüksek hassasiyetli ondalıklar | Bilimsel veriler |
| float | Ondalık sayılar | Fiyat, puan |
| date | Sadece tarih | Doğum tarihi, son tarih |
| dateTime | Tarih + saat | Etkinlik başlangıcı, yayın tarihi |
| time | Sadece saat | Açılış saatleri |
| file | Herhangi bir dosya | PDF, belge |
| image | Tek bir resim | Avatar, logo |
| groupOfImages | Birden fazla resim | Fotoğraf galerisi |
| radioButton | Tek seçim | Boyut (S/M/L) |
| list | Açılır liste | Ülke, kategori |
| entity | Diğer içeriğe bağlantı | İlgili ürünler |
| timeInterval | Tarih aralığı | Promosyon süresi |
| json | Özel yapılandırılmış veri | API 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öntem | Ne Yapar | Ne 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:
-
Metin mi?
- Kısa (< 255 karakter)? →
string - Biçimlendirilmiş uzun mu? →
text - Başlık gerektiriyor mu? →
textWithHeader
- Kısa (< 255 karakter)? →
-
Sayı mı?
- Ondalık yok mu? →
integer - Ondalık var mı? →
float - Bilimsel hassasiyet mi? →
real
- Ondalık yok mu? →
-
Seçim mi?
- Bir seçenek mi seçilecek? →
radioButton - Açılır menü mü? →
list
- Bir seçenek mi seçilecek? →
-
Dosya mı?
- Resim mi? →
imageveyagroupOfImages - Belge mi? →
file
- Resim mi? →
-
Tarih mi?
- Sadece tarih mi? →
date - Tarih + saat mi? →
dateTime - Zaman aralığı mı? →
timeInterval
- Sadece tarih mi? →
İç 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:
- Attribute set'inize gidin
- Bir attribute'ya tıklayın
- Doğrulayıcılar ekleyin (gerekli, min/max, regex vb.)
- 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_pricedeğilpp) - İç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
- Ürün Modülü - Ürün verileri için attribute set'lerini kullanır
- Sayfalar Modülü - Sayfa içeriği için attribute set'lerini kullanır
- Bloklar Modülü - Yeniden kullanılabilir bloklar için attribute set'lerini kullanır
- Formlar Modülü - Özel alanlarla formlar oluşturur