Nette Documentation Preview

syntax
İpuçları ve püf noktaları
*************************


Editörler ve IDE'ler
====================

Şablonları Latte'yi destekleyen bir editörde veya IDE'de yazın. Çok daha keyifli olacak.

- PhpStorm: `Settings > Plugins > Marketplace` içinden [Latte eklentisini|https://plugins.jetbrains.com/plugin/24218-latte-support] kurun
- VS Code: [Nette Latte + Neon|https://marketplace.visualstudio.com/items?itemName=Kasik96.latte], [Nette Latte templates|https://marketplace.visualstudio.com/items?itemName=smuuf.latte-lang] ya da en yeni [Nette for VS Code |https://marketplace.visualstudio.com/items?itemName=franken-ui.nette-for-vscode] eklentisini kurun
- NetBeans IDE: Latte için yerel destek kurulumda gelir
- Sublime Text 3: Package Control içinde `Nette` paketini bulup kurun ve `View > Syntax` içinde Latte'yi seçin
- daha eski editörlerde `.latte` dosyaları için Smarty vurgulamasını kullanın

PhpStorm eklentisi çok gelişmiştir ve PHP kodu için mükemmel öneriler sunabilir. En iyi işleyiş için [tipli şablonları|type-system] kullanın.

[* latte-phpstorm-plugin.webp *]

Latte desteğini web kod vurgulayıcısı [Prism.js|https://prismjs.com/#supported-languages] ve [Ace|https://ace.c9.io] editöründe de bulabilirsiniz.


JavaScript veya CSS içinde Latte
================================

Latte, JavaScript veya CSS içinde çok rahat kullanılabilir. Peki Latte'nin JavaScript kodunu ya da CSS stillerini yanlışlıkla Latte etiketi sanmasından nasıl kaçınırsınız?

```latte
<style>
	/* HATA: {color} etiketi olarak yorumlar */
	body {color: blue}
</style>

<script>
	// HATA: {id} etiketi olarak yorumlar
	var obj = {id: 123};
</script>
```

**1. seçenek**

`{`'nin hemen ardından bir harfin geldiği durumlardan kaçının; örneğin önüne bir boşluk, satır sonu veya tırnak ekleyerek:

```latte
<style>
	body {
		color: blue
	}
</style>

<script>
	var obj = {'id': 123};
</script>
```

**2. seçenek**

Bir elemanın içinde Latte etiketlerinin işlenmesini [n:syntax |tags#{syntax}] ile tamamen kapatın:

```latte
<script n:syntax="off">
	var obj = {id: 123};
</script>
```

**3. seçenek**

Elemanın içinde Latte etiket sözdizimini çift küme parantezine geçirin:

```latte
<script n:syntax="double">
	var obj = {id: 123};          // bu JavaScript

	{{if $cond}} alert(); {{/if}} // bu bir Latte etiketi
</script>
```

JavaScript'te [değişkeni tırnak içine almayın |tags#JavaScript'te yazdırma].


Latte'de `use` yan tümcesinin karşılığı
=======================================

Bir sınıfa erişirken isim alanını yazmak zorunda kalmamak için, PHP'de kullanılan `use` yan tümcelerinin Latte'deki karşılığı nedir? PHP örneği:

```php
use Pets\Model\Dog;

if ($dog->status === Dog::StatusHungry) {
	// ...
}
```

**1. seçenek**

`use` yan tümcesi yerine sınıf adını bir değişkende saklayın ve sonra `Dog` yerine `$Dog` kullanın:

```latte
{var $Dog = Pets\Model\Dog::class}

<div>
	{if $dog->status === $Dog::StatusHungry}
		...
	{/if}
</div>
```

**2. seçenek**

`$dog` nesnesi `Pets\Model\Dog`'un bir örneğiyse, `{if $dog->status === $dog::StatusHungry}` kullanılabilir.


Latte'de XML üretme
===================

Latte herhangi bir metin formatını üretebilir (HTML, XML, CSV, iCal vb.), ama gösterilen veriyi doğru kaçırması için ona hangi formatı ürettiğimizi söylememiz gerekir. Bunun için [`{contentType}` |tags#{contentType}] etiketi kullanılır.

```latte
{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
...
```

Sonra örneğin benzer şekilde bir site haritası üretebiliriz:

```latte
{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" >
	<url n:foreach="$urls as $url">
		<loc>{$url->loc}</loc>
		<lastmod>{$url->lastmod->format('Y-m-d')}</lastmod>
		<changefreq>{$url->frequency}</changefreq>
		<priority>{$url->priority}</priority>
	</url>
</urlset>
```


Eklenen bir şablondan veri aktarma
==================================

Eklenen bir şablonda `{var}` veya `{default}` ile oluşturulan değişkenler yalnızca o şablonun içinde vardır ve ekleyen şablonda erişilebilir değildir. Eklenen şablondan ekleyen şablona bir miktar veri geri aktarmak isterseniz, bir seçenek şablona bir nesne aktarmak ve veriyi ona koymaktır.

Ana şablon:

```latte
{* boş bir $vars nesnesi oluştur *}
{var $vars = (object) null}

{include 'included.latte', vars: $vars}

{* artık foo özelliğini içeriyor *}
{$vars->foo}
```

Eklenen şablon `included.latte`:

```latte
{* veriyi foo özelliğine yaz *}
{var $vars->foo = 123}
```

İpuçları ve püf noktaları

Editörler ve IDE'ler

Şablonları Latte'yi destekleyen bir editörde veya IDE'de yazın. Çok daha keyifli olacak.

  • PhpStorm: Settings > Plugins > Marketplace içinden Latte eklentisini kurun
  • VS Code: Nette Latte + Neon, Nette Latte templates ya da en yeni Nette for VS Code eklentisini kurun
  • NetBeans IDE: Latte için yerel destek kurulumda gelir
  • Sublime Text 3: Package Control içinde Nette paketini bulup kurun ve View > Syntax içinde Latte'yi seçin
  • daha eski editörlerde .latte dosyaları için Smarty vurgulamasını kullanın

PhpStorm eklentisi çok gelişmiştir ve PHP kodu için mükemmel öneriler sunabilir. En iyi işleyiş için tipli şablonları kullanın.

Latte desteğini web kod vurgulayıcısı Prism.js ve Ace editöründe de bulabilirsiniz.

JavaScript veya CSS içinde Latte

Latte, JavaScript veya CSS içinde çok rahat kullanılabilir. Peki Latte'nin JavaScript kodunu ya da CSS stillerini yanlışlıkla Latte etiketi sanmasından nasıl kaçınırsınız?

<style>
	/* HATA: {color} etiketi olarak yorumlar */
	body {color: blue}
</style>

<script>
	// HATA: {id} etiketi olarak yorumlar
	var obj = {id: 123};
</script>

1. seçenek

{'nin hemen ardından bir harfin geldiği durumlardan kaçının; örneğin önüne bir boşluk, satır sonu veya tırnak ekleyerek:

<style>
	body {
		color: blue
	}
</style>

<script>
	var obj = {'id': 123};
</script>

2. seçenek

Bir elemanın içinde Latte etiketlerinin işlenmesini n:syntax ile tamamen kapatın:

<script n:syntax="off">
	var obj = {id: 123};
</script>

3. seçenek

Elemanın içinde Latte etiket sözdizimini çift küme parantezine geçirin:

<script n:syntax="double">
	var obj = {id: 123};          // bu JavaScript

	{{if $cond}} alert(); {{/if}} // bu bir Latte etiketi
</script>

JavaScript'te değişkeni tırnak içine almayın.

Latte'de use yan tümcesinin karşılığı

Bir sınıfa erişirken isim alanını yazmak zorunda kalmamak için, PHP'de kullanılan use yan tümcelerinin Latte'deki karşılığı nedir? PHP örneği:

use Pets\Model\Dog;

if ($dog->status === Dog::StatusHungry) {
	// ...
}

1. seçenek

use yan tümcesi yerine sınıf adını bir değişkende saklayın ve sonra Dog yerine $Dog kullanın:

{var $Dog = Pets\Model\Dog::class}

<div>
	{if $dog->status === $Dog::StatusHungry}
		...
	{/if}
</div>

2. seçenek

$dog nesnesi Pets\Model\Dog'un bir örneğiyse, {if $dog->status === $dog::StatusHungry} kullanılabilir.

Latte'de XML üretme

Latte herhangi bir metin formatını üretebilir (HTML, XML, CSV, iCal vb.), ama gösterilen veriyi doğru kaçırması için ona hangi formatı ürettiğimizi söylememiz gerekir. Bunun için {contentType} etiketi kullanılır.

{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
...

Sonra örneğin benzer şekilde bir site haritası üretebiliriz:

{contentType application/xml}
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" >
	<url n:foreach="$urls as $url">
		<loc>{$url->loc}</loc>
		<lastmod>{$url->lastmod->format('Y-m-d')}</lastmod>
		<changefreq>{$url->frequency}</changefreq>
		<priority>{$url->priority}</priority>
	</url>
</urlset>

Eklenen bir şablondan veri aktarma

Eklenen bir şablonda {var} veya {default} ile oluşturulan değişkenler yalnızca o şablonun içinde vardır ve ekleyen şablonda erişilebilir değildir. Eklenen şablondan ekleyen şablona bir miktar veri geri aktarmak isterseniz, bir seçenek şablona bir nesne aktarmak ve veriyi ona koymaktır.

Ana şablon:

{* boş bir $vars nesnesi oluştur *}
{var $vars = (object) null}

{include 'included.latte', vars: $vars}

{* artık foo özelliğini içeriyor *}
{$vars->foo}

Eklenen şablon included.latte:

{* veriyi foo özelliğine yaz *}
{var $vars->foo = 123}