# Ürün Özellikleri

Feeddeki kendi alanlarınızı içerikte kullanma
Kaynak: https://selwise.com/docs/product-enrichment/product-attributes

Ürün beslemenizde Selwise'in standart alanlarına girmeyen kendi alanlarınız varsa (`garanti_suresi`, `mensei`, `kumas_turu`) bunları zenginleştirme bloklarında yer tutucu olarak, katalog koşullarında ise hedefleme ölçütü olarak kullanabilirsiniz.

## Panelde nerede

- **Blok formu**: **Content Blocks → New block**, **Product tokens** kutusunun altındaki **Your own feed fields** (Kendi besleme alanlarınız) listesi. Her alan `${attr.alan_adı}` etiketi olarak görünür.
- **Kural formu**: **Rules** adımı → **Catalogue conditions** → alan seçicisindeki **Custom fields from your feed** (Beslemeden gelen özel alanlar) grubu.
- Kütüphane'de içerik bloğu şablonu yazarken **Dynamic fields** kutusundaki **Custom product attributes** listesi.

## Nasıl yakalanır

Besleme senkronizasyonunda, standart alanlara eşlenmeyen alanlar otomatik olarak ürünün özellik listesine yazılır. Ayrıca bir şey yapmanız gerekmez. Alan, [alan eşleştirmesinde](/docs/product-feeds/field-mapping) bir standart alana eşlediğiniz kaynak alansa özel alan olarak tekrar taşınmaz; aynı değer iki yerde yaşamasın diye.

Hangi alanların taşınabildiğini önceden seçemezsiniz (hangilerinin var olduğunu görmeden karar veremezsiniz), bu yüzden sınırlar tek savunmadır.

## Blokta kullanma

Özel alanlara `attr` öneki ile erişirsiniz:

```html
<ul class="teknik">
  <li>Garanti: ${attr.garanti_suresi}</li>
  <li>Menşei: ${attr.mensei}</li>
  <li>Kumaş: ${attr.kumas_turu}</li>
</ul>
```

`${attr.mensei}` yerine `{{attr.mensei}}` yazımı da aynı işi yapar.

> **Önek zorunludur**
>
> `${garanti_suresi}` çalışmaz, `${attr.garanti_suresi}` yazmalısınız. Bu ayrım bilinçlidir: alan adları sizin beslemenizden gelir ve `price` gibi bir alan adı standart bir alanla çakışabilir. Önek, hangisinin kastedildiğini kesinleştirir.

## Alan adı nasıl sadeleştirilir

Beslemenizdeki ad, yer tutucuda kullanacağınız ada şu kurallarla dönüşür: harfler küçülür, Türkçe harfler ve aksanlar ASCII karşılığına çevrilir (`ı` → `i`, `ü` → `u`), harf ve rakam dışındaki her şey tek alt çizgi olur, baştaki ve sondaki alt çizgiler atılır, en fazla 64 karakter kalır. XML öznitelik işareti (`@_`) ve ad alanı öneki (`g:`) atılır.

| Beslemedeki ad | Yer tutucu |
|---|---|
| `Garanti Süresi` | `${attr.garanti_suresi}` |
| `g:material` | `${attr.material}` |
| `@_size` | `${attr.size}` |
| `Kumaş Türü` | `${attr.kumas_turu}` |

Alan adı hiç harf ya da rakam içermiyorsa o alan atlanır.

## İç içe alanlar

Beslemeniz alanları bir kap içinde gönderiyorsa bir seviye içine bakılır. Şu kap adları tanınır ve içerdeki alanlar kendi adlarıyla gelir: `attributes`, `attribute`, `custom_attributes`, `custom_fields`, `specs`, `specifications`, `properties`, `ozellikler`. Akinon'un `attributes.pre_ent_beden` alanı `${attr.pre_ent_beden}` olur. Tanınmayan bir kabın içindekiler `kap_alan` biçiminde önekle gelir (çünkü `code`, `name` gibi çocuk adları her şeyle çakışırdı). Aynı ad hem üst seviyede hem kap içinde varsa üst seviyedeki kazanır.

## Değer nasıl okunur

Her değer **metin** olarak taşınır: sayı ve evet/hayır değerleri yazıya çevrilir. Boş değerler yakalanmaz. Sadece tek tek değerlerden oluşan bir liste virgülle birleştirilir (`Pamuk, Keten`). İçinde nesne olan liste atlanır. XML'de `<ozellik birim="cm">120</ozellik>` gibi öznitelikli bir öğede öğenin kendi metni (`120`) değerdir.

## Hangi alanlar var

Blok editöründeki liste, son senkronizasyonda görülen alan adlarını gösterir (en fazla 200 ayrı ad). Bu liste beslemenizden çıkarılır ve senkronizasyonla güncellenir.

| Liste | Sebep |
|---|---|
| Hiç alan yok, "No product feed is connected yet" | Kanala besleme bağlı değil |
| "The last feed sync found no fields beyond the standard ones" | Son senkronizasyonda standart alanların dışında alan bulunmadı; beslemenize ekleyip yeniden senkronlayın |
| "The custom fields from your feed could not be loaded" | Liste okunamadı; yeniden deneyin. Yer tutucu yazmaya yine devam edebilirsiniz |

Beslemenizde olmayan bir alan yazarsanız blok o ürün için **boş** render eder; sayfada `${attr.garanti_suresi}` yazısı görünmez.

## Sınırlar

Yakalama sınırsız değildir:

| Sınır | Değer |
|---|---|
| Ürün başına alan sayısı | 40 |
| Alan başına karakter | 500 |
| Ürün başına toplam boyut | yaklaşık 8 KB (8.000 karakter; ad ve değer toplamı) |

Beslemenizde yüzlerce alan varsa sırayla ilk 40'ı alınır, sonrası atlanır. Satırın kendi bedeni ve rengi (`attr.size`, `attr.color`) bu sınırların dışında ayrıca eklenir. Bir blok, yalnızca gerçekten kullandığı alanları indirir: kırk alanlı bir üründe iki alan kullanan blok yalnızca o iki alanı taşır, yani kullanmadığınız alanların sayısı sayfa hızını etkilemez.

## Boş alan yönetimi

Her ürünün her alanı dolu olmaz. Boş bir alan blokta boş bir satır bırakır. CSS ile gizleyebilirsiniz:

```css
.teknik li:empty { display: none; }
```

Ya da bloğu yalnızca o alanı olan ürünlere atayın: kural yazarken **Catalogue conditions** içinde `attr.garanti_suresi` için **is present** koşulu kullanın. Bkz. [Katalog Koşulları](/docs/product-enrichment/catalog-conditions). Blok tasarımcısında bir metin öğesini `attr.` alanına bağladıysanız alan boşken satır kendini gizler.

## Standart alanlar

Ürünün standart alanlarına (ad, fiyat, kategori) önek olmadan erişirsiniz. Tam liste ve örnek çıktılar: [Yer Tutucular](/docs/product-enrichment/placeholders).
