# TypoScript: Genel Ayarlar

TYPO3'ün yapılandırma dili olan TypoScript'in temel kavramları, sözdizimi ve yaygın ayarlarını kapsar.

---

## TypoScript Nedir?

TypoScript, TYPO3'e özgü bir yapılandırma dilidir. Bir programlama dili değil, key-value çiftlerinden oluşan bir yapılandırma sistemidir.

---

## Temel Sözdizimi

```typoscript
# Yorum satırı

# Değer atama
myObject = value

# Nesne oluşturma
myObject = TEXT
myObject.value = Hello World

# İç içe nesne (süslü parantez)
myObject {
    value = Hello World
    wrap = <p>|</p>
}

# Değer kopyalama
newObject < myObject

# Değer temizleme
myObject >

# Çok satırlı değer
myObject (
    Bu çok satırlı
    bir değerdir
)

# Koşullu yapılandırma
[applicationContext == "Development"]
    config.debug = 1
[global]

# Import
@import 'EXT:my_site_package/Configuration/TypoScript/Setup/*.typoscript'
```

---

## PAGE Nesnesi

```typoscript
page = PAGE
page {
    typeNum = 0

    # Meta bilgileri
    meta {
        viewport = width=device-width, initial-scale=1
        robots = index,follow
        author = My Company
        description.field = description
        og:title.field = title
        og:type = website
    }

    # Başlık yapılandırması
    headerData {
        10 = TEXT
        10.value = <link rel="icon" href="/favicon.ico">
    }

    # Fluid Template
    10 = FLUIDTEMPLATE
    10 {
        templateName = Default
        templateRootPaths.10 = EXT:my_site_package/Resources/Private/Templates/Page/
        layoutRootPaths.10 = EXT:my_site_package/Resources/Private/Layouts/
        partialRootPaths.10 = EXT:my_site_package/Resources/Private/Partials/

        variables {
            content < styles.content.get
        }

        dataProcessing {
            10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
            10 {
                levels = 3
                as = mainMenu
            }
        }
    }

    # CSS
    includeCSS {
        styles = EXT:my_site_package/Resources/Public/Css/styles.css
    }

    # JavaScript
    includeJSFooter {
        main = EXT:my_site_package/Resources/Public/JavaScript/main.js
    }
}
```

---

## config Nesnesi

```typoscript
config {
    # Genel
    doctype = html5
    htmlTag_setParams = none
    metaCharset = utf-8
    additionalHeaders.10.header = X-Frame-Options: SAMEORIGIN

    # URL yapısı
    absRefPrefix = /
    tx_realurl_enable = 1

    # Dil
    language = tr
    locale_all = tr_TR.UTF-8
    sys_language_uid = 0

    # Cache
    cache_period = 86400
    sendCacheHeaders = 1

    # Debug (sadece Development)
    contentObjectExceptionHandler = 0

    # Sıkıştırma
    compressCss = 1
    compressJs = 1
    concatenateCss = 1
    concatenateJs = 1

    # Temizlik
    disablePrefixComment = 1
    removeDefaultJS = external
    no_cache = 0
}
```

---

## stdWrap Özellikleri

stdWrap, hemen her TypoScript nesnesinde kullanılabilen güçlü bir veri işleme sistemidir:

```typoscript
# Metin sarmalama
lib.myText = TEXT
lib.myText {
    value = Hello
    wrap = <strong>|</strong>
    required = 1
}

# Alan değeri
lib.pageTitle = TEXT
lib.pageTitle {
    field = title
    htmlSpecialChars = 1
}

# Koşullu görüntüleme
lib.subtitle = TEXT
lib.subtitle {
    field = subtitle
    required = 1
    wrap = <h2>|</h2>
    if.isTrue.field = subtitle
}

# Tarih biçimlendirme
lib.date = TEXT
lib.date {
    field = crdate
    strftime = %d.%m.%Y
}
```

---

## Content Object Türleri

| Nesne | Açıklama |
|-------|----------|
| `TEXT` | Metin çıktısı |
| `IMAGE` | Resim çıktısı |
| `FLUIDTEMPLATE` | Fluid template render |
| `COA` | Content Object Array (birden çok nesne) |
| `CASE` | Koşullu nesne seçimi |
| `FILES` | Dosya koleksiyonu |
| `HMENU` | Hiyerarşik menü |
| `RECORDS` | Kayıt referansları |
| `USER` | PHP fonksiyon çağrısı |
| `LOAD_REGISTER` | Register değişken yükleme |

---

## Koşullar (Conditions)

```typoscript
# Ortam kontrolü
[applicationContext == "Development"]
    config.debug = 1
[END]

# Sayfa kontrolü
[page["uid"] == 1]
    page.10.templateName = Homepage
[END]

# Dil kontrolü
[siteLanguage("languageId") == 1]
    config.language = en
[END]

# Backend kullanıcı kontrolü
[backend.user.isLoggedIn]
    page.10.variables.showDebug = TEXT
    page.10.variables.showDebug.value = 1
[END]

# Tree level kontrolü
[tree.level == 0]
    page.10.templateName = Homepage
[END]

# IP kontrolü
[ip("192.168.1.*")]
    config.debug = 1
[END]
```

---

## DataProcessing

```typoscript
page.10.dataProcessing {
    # Menü
    10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
    10 {
        levels = 3
        as = mainMenu
    }

    # Dil menüsü
    20 = TYPO3\CMS\Frontend\DataProcessing\LanguageMenuProcessor
    20 {
        languages = auto
        as = languageMenu
    }

    # Dosyalar
    30 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
    30 {
        references.fieldName = media
        as = files
    }

    # Veritabanı sorgusu
    40 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
    40 {
        table = tx_news_domain_model_news
        pidInList = 10
        as = news
        orderBy = datetime DESC
        max = 5
    }

    # Site bilgisi
    50 = TYPO3\CMS\Frontend\DataProcessing\SiteProcessor
    50 {
        as = site
    }

    # Sayfa bilgisi
    60 = TYPO3\CMS\Frontend\DataProcessing\SiteLanguageProcessor
    60 {
        as = siteLanguage
    }
}
```

---

## lib Nesneleri (Yeniden Kullanılabilir)

```typoscript
# Logo
lib.logo = IMAGE
lib.logo {
    file = EXT:my_site_package/Resources/Public/Images/logo.svg
    altText = My Site Logo
    titleText = My Site
}

# Telif hakkı metni
lib.copyright = TEXT
lib.copyright {
    data = date:U
    strftime = %Y
    noTrimWrap = |© | Tüm hakları saklıdır.|
}

# Breadcrumb
lib.breadcrumb = HMENU
lib.breadcrumb {
    special = rootline
    special.range = 0|-1
    1 = TMENU
    1 {
        NO.allWrap = <li>|</li>
        CUR = 1
        CUR.allWrap = <li class="active">|</li>
    }
    wrap = <ol class="breadcrumb">|</ol>
}
```

---

## Kaynaklar

- [TypoScript Reference](https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/)
- [TypoScript Syntax](https://docs.typo3.org/m/typo3/reference-coreapi/main/en-us/ApiOverview/TypoScriptSyntax/)
