Nette Documentation Preview

syntax
İpuçları ve Püf Noktaları
*************************


Editörler ve IDE .[#toc-editors-and-ide]
========================================

Şablonları Latte desteği olan bir editör veya IDE'de yazın. Çok daha keyifli olacaktır.

- NetBeans IDE yerleşik desteğe sahiptir
- PhpStorm: [Latte eklentisini |https://plugins.jetbrains.com/plugin/7457-latte] şuraya yükleyin `Settings > Plugins > Marketplace`
- VS Code: [Nette Latte + Neon |https://marketplace.visualstudio.com/items?itemName=Kasik96.latte] veya [Nette Latte şablonları |https://marketplace.visualstudio.com/items?itemName=smuuf.latte-lang] eklentisi için markerplace'te arama yapın
- Sublime Text 3: Paket Kontrolünde `Nette` paketini bulun ve yükleyin ve Latte'yi seçin `View > Syntax`
- eski düzenleyicilerde .latte dosyaları için Smarty vurgulamasını kullanın

PhpStorm eklentisi çok gelişmiştir ve PHP kodunu mükemmel bir şekilde önerebilir. En iyi şekilde çalışmak için, [yazılan şablonları |type-system] kullanın.

[* latte-phpstorm-plugin.webp *]

Latte desteği, web kod vurgulayıcı [Prism.js |https://prismjs.com/#supported-languages] ve editör [Ace'de |https://ace.c9.io] de bulunabilir.


JavaScript veya CSS İçinde Latte .[#toc-latte-inside-javascript-or-css]
=======================================================================

Latte, JavaScript veya CSS içinde çok rahat bir şekilde kullanılabilir. Ancak Latte'nin yanlışlıkla JavaScript kodunu veya CSS stilini bir Latte etiketi olarak görmesi nasıl önlenir?

```latte
<style>
	/* ERROR: interprets as tag {color} */
	body {color: blue}
</style>

<script>
	// ERROR: interprets as tag {id}
	var obj = {id: 123};
</script>
```

**Seçenek 1**

Aralarına boşluk, satır sonu veya tırnak işareti koyarak bir harfin `{` harfinden hemen sonra geldiği durumlardan kaçının:

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

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

**Seçenek 2**

[n:syntax |tags#syntax] kullanarak bir öğenin içindeki Latte etiketlerinin işlenmesini tamamen kapatın:

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

**Opsiyon 3**

Latte etiketi sözdizimini öğe içinde çift küme parantezi olarak değiştirin:

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

	{{if $cond}} alert(); {{/if}} // this is Latte tag
</script>
```

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


`use` Maddesinin Değiştirilmesi .[#toc-replacement-for-use-clause]
==================================================================

Bir sınıfa erişirken isim alanı yazmak zorunda kalmamak için PHP'de kullanılan `use` cümleleri nasıl değiştirilir? PHP örneği:

```php
use Pets\Model\Dog;

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

**Seçenek 1**

`use` cümlesi yerine sınıf adını bir değişkende saklayın ve ardından `Dog` yerine `$Dog` kullanın:

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

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

**Seçenek 2**

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


Latte'de XML Oluşturma .[#toc-generating-xml-in-latte]
======================================================

Latte herhangi bir metin formatı (HTML, XML, CSV, iCal, vb.) oluşturabilir, ancak görüntülenen verilerden düzgün bir şekilde kaçmak için hangi formatı oluşturduğumuzu ona söylemeliyiz. Bu [`{contentType}` |tags#contentType] etiketi bunun için kullanılır.

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

Ardından, örneğin, benzer şekilde bir site haritası oluşturabiliriz:

```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>
```


Dahil Edilen Bir Şablondan Veri Geçirme .[#toc-passing-data-from-an-included-template]
======================================================================================

Dahil edilen şablonda `{var}` veya `{default}` ile oluşturduğumuz değişkenler sadece dahil edilen şablonda bulunur ve dahil eden şablonda kullanılamaz.
Dahil edilen şablondan dahil edilen şablona bazı verileri geri aktarmak istiyorsak, seçeneklerden biri şablona bir nesne aktarmak ve verileri ona ayarlamaktır.

Ana şablon:

```latte
{* creates an empty object $vars *}
{var $vars = (object) null}

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

{* now contains property foo *}
{$vars->foo}
```

Dahil edilen şablon `included.latte`:

```latte
{* write data to the property foo *}
{var $vars->foo = 123}
```

İpuçları ve Püf Noktaları

Editörler ve IDE

Şablonları Latte desteği olan bir editör veya IDE'de yazın. Çok daha keyifli olacaktır.

  • NetBeans IDE yerleşik desteğe sahiptir
  • PhpStorm: Latte eklentisini şuraya yükleyin Settings > Plugins > Marketplace
  • VS Code: Nette Latte + Neon veya Nette Latte şablonları eklentisi için markerplace'te arama yapın
  • Sublime Text 3: Paket Kontrolünde Nette paketini bulun ve yükleyin ve Latte'yi seçin View > Syntax
  • eski düzenleyicilerde .latte dosyaları için Smarty vurgulamasını kullanın

PhpStorm eklentisi çok gelişmiştir ve PHP kodunu mükemmel bir şekilde önerebilir. En iyi şekilde çalışmak için, yazılan şablonları kullanın.

Latte desteği, web kod vurgulayıcı Prism.js ve editör Ace'de de bulunabilir.

JavaScript veya CSS İçinde Latte

Latte, JavaScript veya CSS içinde çok rahat bir şekilde kullanılabilir. Ancak Latte'nin yanlışlıkla JavaScript kodunu veya CSS stilini bir Latte etiketi olarak görmesi nasıl önlenir?

<style>
	/* ERROR: interprets as tag {color} */
	body {color: blue}
</style>

<script>
	// ERROR: interprets as tag {id}
	var obj = {id: 123};
</script>

Seçenek 1

Aralarına boşluk, satır sonu veya tırnak işareti koyarak bir harfin { harfinden hemen sonra geldiği durumlardan kaçının:

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

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

Seçenek 2

n:syntax kullanarak bir öğenin içindeki Latte etiketlerinin işlenmesini tamamen kapatın:

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

Opsiyon 3

Latte etiketi sözdizimini öğe içinde çift küme parantezi olarak değiştirin:

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

	{{if $cond}} alert(); {{/if}} // this is Latte tag
</script>

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

use Maddesinin Değiştirilmesi

Bir sınıfa erişirken isim alanı yazmak zorunda kalmamak için PHP'de kullanılan use cümleleri nasıl değiştirilir? PHP örneği:

use Pets\Model\Dog;

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

Seçenek 1

use cümlesi yerine sınıf adını bir değişkende saklayın ve ardından Dog yerine $Dog kullanın:

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

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

Seçenek 2

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

Latte'de XML Oluşturma

Latte herhangi bir metin formatı (HTML, XML, CSV, iCal, vb.) oluşturabilir, ancak görüntülenen verilerden düzgün bir şekilde kaçmak için hangi formatı oluşturduğumuzu ona söylemeliyiz. Bu {contentType} etiketi bunun için kullanılır.

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

Ardından, örneğin, benzer şekilde bir site haritası oluşturabiliriz:

{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>

Dahil Edilen Bir Şablondan Veri Geçirme

Dahil edilen şablonda {var} veya {default} ile oluşturduğumuz değişkenler sadece dahil edilen şablonda bulunur ve dahil eden şablonda kullanılamaz. Dahil edilen şablondan dahil edilen şablona bazı verileri geri aktarmak istiyorsak, seçeneklerden biri şablona bir nesne aktarmak ve verileri ona ayarlamaktır.

Ana şablon:

{* creates an empty object $vars *}
{var $vars = (object) null}

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

{* now contains property foo *}
{$vars->foo}

Dahil edilen şablon included.latte:

{* write data to the property foo *}
{var $vars->foo = 123}