37
Smarty [Template Engine] Saygılarımla Onur YERLIKAYA,

Smarty Manual

Embed Size (px)

DESCRIPTION

Smarty adlı kitabım

Citation preview

Page 1: Smarty Manual

Smarty [Template Engine]

Saygılarımla Onur YERLIKAYA,

Page 2: Smarty Manual

Smarty:Template Engine

Onur Yerlikaya <[email protected]>

10 Ocak 2006 ~ Salı

http://witkey.org

Merhaba arkadaşlar,

Smarty ile aklınıza takılan problemleri ileri düzeyde her ne kadar olmasa da çözebilmeniz için bu manuel kitabı hazırladım , Umarım size faydalı olur.Burada anlatırken öğrendim çoğu şeyi Türkiyede kimse istemese de bildikleri şeyleri paylaşmayı ben seviyorum. Bu kitabın benden habersiz kopyalanmaması ve yayınlanmaması için :

Creative Commons Attribution-NonCommercial-NoDerivs 2.5 lisansı ile bu kitap korunmaktadır.

Belki bu lisansı gören arkadaşlar yanlış anlayacak ama üzgünüm , Emeğe saygı duymayan bir çok insan var. Zend * Certificated PHP Developer ve Mysql developer olmayı istiyorum herşeyin hayırlısı ve her istediğinizin olması dileğiyle..

Bu kitabı okuyan herkese teşekkürlerimi sunarım.Saygılarımla,Onur YERLIKAYA

* Zend is a trademark of Zend Technologies Ltd.

Page 3: Smarty Manual

İçindekiler

İçindekiler

I. Başlangıç

1. Smarty nedir ?

2. Kurulum

• Gereksinimleri

• Temel Kurulum

• Extend Kurulum

II. Designerlar için Smarty

3. Söz dizimi

• Yorumlar

• Değişkenler

• Fonksiyonlar

• Özellikler

• Çift tırnak içine veri eklenmesi

• Matematik

• Smarty Tagları

4. Değişkenler

• PHP değişkenleri

• Config değişkenleri

• {$smarty} değişkenleri

5. Değişken Düzenleyiciler

• capitalize

• cat

• count_characters

Page 4: Smarty Manual

İçindekiler

• count_paragraphs

• count_sentences

• count_words

• date_format

• default

• escape

• indent

• lower

• nl2br

• regex_replace

• replace

• spacify

• string_format

• strip

• strip_tags

• truncate

• upper

• wordwrap

6. Nitelenenleri birleştirmek

7. Yapı Fonksiyonları

• {capture}

• {config_load}

• {foreach},{foreachelse}

• {if},{elseif},{else}

Page 5: Smarty Manual

İçindekiler• {include}

• {include_php}

• {insert}

• {ldelim},{rdelim}

• {literal}

• {php}

• {section},{sectionelse}

• {strip}

8. Custom Fonksiyonları

• {assign}

• {counter}

• {cycle}

• {debug}

• {fetch}

• {html_checkboxes}

• {html_image}

• {html_options}

• {html_radios}

• {html_select_date}

• {html_select_time}

• {html_table}

• {mailto}

• {math}

• {textformat}

Page 6: Smarty Manual

İçindekiler

9. Konfigürasyon dosyaları

10. Hata Konsolu

III. Programcılar için Smarty

11. Değişmeyenler

• SMARTY_DIR

• SMARTY_CORE_DIR

12. Smarty Sınıf değişkenleri

• $template_dir

• $compile_dir

• $config_dir

• $plugins_dir

• $debugging

• $debug_tpl

• $debugging_ctrl

• $autoload_filters

• $compile_check

• $force_compile

• $caching

• $cache_dir

• $cache_lifetime

• $cache_handler_func

• $cache_modified_check

• $config_overwrite

Page 7: Smarty Manual

İçindekiler

• $config_booleanize

• $config_read_hidden

• $config_fix_newlines

• $default_template_handler_func

• $php_handling

• $security

• $secure_dir

• $security_settings

• $trusted_dir

• $left_delimiter

• $right_delimiter

• $compiler_class

• $request_vars_order

• $request_use_auto_globals

• $error_reporting

• $compile_id

• $use_sub_dirs

• $default_modifiers

• $default_resource_type

Page 8: Smarty Manual

İçindekiler

13. Smarty Sınıf Metodları

• append()

• assign()

• clear_all_assign()

• clear_all_cache()

• clear_assign()

• clear_cache()

• clear_compiled_tpl()

• clear_config()

• config_load()

• display()

• fetch()

• get_config_vars()

• get_registered_object()

• get_template_vars()

• is_cached()

• load_filter()

Page 9: Smarty Manual

Smarty Manual

Smarty Nedir ?

Smarty PHP için bir Template motorudur. İşlemleri iki kısma ayırır Design & Program.

Belirli taglar arasında yazılır , bunu kendinizde belirleyebilirsiniz standart olarak “{” “}”

kullanılır. Smarty'le yapabilecekleri onu kullanarak daha iyi anlayacağınızı düşünüyorum.

Gereksinimleri ?

PHP 4.0.6 veya daha yüksek sürümleri.

Temel Kurulum

Öncelikle http://smarty.php.net adresine giderek download sayfasındaki şu andaki son

sürümü olan |[ Smarty 2.6.11 14 Aralık 2005 ] | indirmeniz.

Extract Here diyerek paketimizi açıyoruz, ardından “Smarty-2.6.11” adında bir dizin oluşuyor ve “libs” adlı dizinini biz kullanacağız burada Smarty'e ait sınıf dosyaları mevcut olmaktadır. Bizde Templatemiz için bu sınıfları kullanacağız.

Libs dizini ve içeriği ;

Şimdi Bir Dizin oluşturalım “Smarty” adında ve bu dizin altına bir “index.php” atalım bu dizinin altına bir “gorunum” dizini acalım gorunum dizini altına da “template – compile – config – cache” adında birkaç dizin oluşturalım.Template dizini altına “index.tpl” adında bir dosya oluşturalım ve config dizini altına da “smarty.conf” adında dosyalarımızı oluşturalım.

Page 10: Smarty Manual

Smarty Manual

Sol taraftaki panelden de görüldüğü gibi require ile Smarty Sınıf dosyamızı alarak Smarty'i başlattık.

Eğer server bize aitse ve serverımıza kurmak istiyorsak Smarty'i öncelikle php.iniyi açarak

include_path = “Smartydizini” yazıyoruz ardından kaydedıyoruz ve Apache'yi (( Eğer

başka bir web sunucusunu kullanıyorsanız onu )) restartlıyoruz.

Page 11: Smarty Manual

Smarty Manual

Ben libs klasörünü C:\Libs dizini altına yükledim ve ardından php dosyamda şu işlemi yaptım.Ve dizinimize göre çağırdım ve herhangi bir problemle karşılaşmadım.Her zaman yazılan e-booklarda genelde doğrular anlatılır yanlışlara pek değinilmez.

Warning: main(Smarty.class.php): failed to open stream: No such file or directory in c:\appserv\www\smarty\index.php on line 5

Fatal error: main(): Failed opening required 'Smarty.class.php' (include_path='Smarty dizini') in c:\appserv\www\smarty\index.php on line 5

Eğer bu yukarıda gördüğünüz hatayı alıyorsanız yüklediğiniz dizin adını doğru vermemiş

veya işlemleri yanlış yapmışsınız demektir. Tekrar bütün işlemlerinizi kontrol ederek

tekrar deneyin .

<?php

// Smarty Manual - Witkey

define('SMARTY_DIR', '/usr/local/lib/php/Smarty/'); require(SMARTY_DIR . 'Smarty.class.php'); // Smarty'i başlattık. $smarty = new Smarty; ?>

Define deyimini kullanarak SMARTY_DIR 'a atayacağınız dizini belirleyebilirsiniz.

Şimdi dosya izinlerine bir bakalım ?

Cache ve Compile adlı dizinlerimizin CHMOD ayarı 770 olmalıdır.

Merhaba Dünya yazdıralım isterseniz ekrana öncelikle eğer programla uğraşan kişi ilk başta Merhaba dünya yazdırmazsa sanki bütün hevesi gidiyor ama Merhaba dünya hani doğan bir bebek gibi 0(sıfır)'dan öğrenmek bazı şeyleri daha da güzel oluyor.

İndex.tpl dosyamızı açalım o zaman ve içine ;

<p align=center>{$yazi}</p>

yazalım ve kaydedip kapatalım.

Page 12: Smarty Manual

Smarty Manual

Şimdi index.php adlı dosyamızı açalım ((Smarty dizinimizde bulunan ~ Libs değil Smarty))

yukarıdaki kodları girelim ;

$smarty->template_dir >> Template dosyalarımızı sakladığımız dizin adı.

$smarty->compile_dir >> Smarty'in temayı çalıştıracağı dizin adı.

$smarty->cache_dir >> Smarty'in cache yapacağı dizin adı.

$smarty->config_dir >> Smarty için oluşturduğumuz konfigürasyon dosyalarını sakladığımız dizinin adı.

$smarty->assign('tplDosyasinaGonderilecekDegisken','gelenVeri');

$smarty->display('index.tpl'); Bu verilerin islemlerin hangi TPL dosyası üzerinde göstereceğini belirler.

TPL dosyamızda :: {$yazi} bu yazi degiskenini nereden aldı ? Neden “{”“}” tagları arasına yazdık ? Gibi kafada oluşan sorunlarımızı yanıtlayalım..

Smarty { } kod tagları arasına yazılır. PHP'nin <? ?> tagları arasına yazılması ile eş değerdir. $yazi degiskenini oluşturduğumuz php dosyasında assign fonksiyonunu kullanarak aldık.

Şimdi de Extend Kurulumu nasıl yapacağız ona gözatalım ?..

Page 13: Smarty Manual

Smarty Manual

Smarty.php adını verdiğim dosya

<?php

// Smarty Manual - Witkey

require('libs/Smarty.class.php');

// Bu dosya otomatik olarak bütün

// Smarty Kütüphanesini yükleyecektir.

// $id = smarty.php

class Smarty_Witkey extends Smarty {

function Smarty_Witkey()

{

$this->Smarty();

$this->template_dir = 'gorunum/template';

$this->compile_dir = 'gorunum/compile';

$this->config_dir = 'gorunum/config';

$this->cache_dir = 'gorunum/cache';

$this->caching = true;

$this->assign('gidicek_data', 'gelen_data');

}

}

?>

Page 14: Smarty Manual

Smarty Manual

Söz dizimi ?

>> Yorum Satırı

{* Smarty yorumları tpl dosyasında buraya yazılır *}

>> Değişkenler

{$foo} <-- basit bir değişkeni gösterir.

{$foo[4]} <-- 0 indexli dizide 5.ci elementi gösterir.

{$foo.bar} <-- dizideki keyi bar'a eşit olan ile aynı işlemi yapar : PHP $foo['bar']

{$foo.$bar} <-- dizideki keyi değişkene eşit olan ile aynı işlemi yapar:PHP $foo[$bar]

{$foo->bar} <-- bar nesnesinin özelliklerini gösterir.

{$foo->bar()} <-- display the return value of object method "bar"

{#foo#} <-- konfigürasyon dosyasında foo şeklinde ayarlanmış bilgiyi gösterir.

{$smarty.config.foo} <-- {#foo#} ile aynı işlemi yapar.

{$foo[bar]} <-- sadece loop döngüsü içerisinde geçerlidir.bakınız {section}

Diğer kombinasyonlar

{$foo.bar.baz}

{$foo.$bar.$baz}

{$foo[4].baz}

{$foo[4].$baz}

{$foo.bar.baz[4]}

{$foo->bar($baz,2,$bar)} <-- geçiş parametreleri

{"foo"} <-- sabit değer

Page 15: Smarty Manual

Smarty Manual

>> Fonksiyonlar

{config_load file="smarty.conf"}

{include file="header.tpl"}

{if $ozel_isim} Hoşgeldin, <font color="{#fontRengi#}">{$ad}!</font>

{else}

Hoşgeldin, {$ad}!

{/if}

{include file="footer.tpl"}

>> Özellikler

{include file="header.tpl"}

{include file=$gerekliDosya}

{include file=#gerekliDosya#}

{html_select_date display_days=yes}

Page 16: Smarty Manual

Smarty Manual

>>Çift tırnak içine veri eklenmesi ;

Yazılış Örnekleri;

{func var="test $foo test"} <-- $foo degiskenini gosterir.

{func var="test $foo_bar test"} <-- $foo_bar degiskenini gosterir.

{func var="test $foo[0] test"} <-- $foo dizisindeki ilk elemanı gösterir.

{func var="test $foo[bar] test"} <-- $foo dizisindeki key'i bar olan elemanı gösterir.

{func var="test $foo.bar test"} <-- $foo'yu gösterir. $foo.bar'ı değil.

{func var="test `$foo.bar` test"} <-- $foo.bar 'ı gösterir.

{func var="test `$foo.bar` test"|escape} <-- Tırnak işaretsiz düzenlenir.

Pratik ;

{include file="subdir/$tpl_name.tpl"} <-- $tpl_name etiketi ile birlikte tpl dosyasını alır.

{cycle values="one,two,`$smarty.config.myval`"} <-- ` karakteri olmalı

>> Matematik İşlemleri

{$foo+1}

{$foo*$bar}

{* komplexli örnekler :)) *}

{$foo->bar-$bar[1]*$baz->foo->bar()-3*7}

{if ($foo+$bar.test%$baz*134232+10+$b+10)}

{$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"}

{assign var="foo" value="`$foo+$bar`"}

Page 17: Smarty Manual

Smarty Manual

>> Smarty Tagları

$smarty->left_delimiter = '<!--{';

$smarty->right_delimiter = '}-->';

yukarıda verilen örnekteki gibi de "<!--{" kısmı veya "}-->" kısımlarını kendı zevkınıze veya ıstegınıze gore değiştirebilirsiniz ama standartlar her zaman iyidir . Benim önerim sadece

"{" "}" tagları arasında yazmak olacaktır.

>> Değişkenler

Smarty bir çok değişken farklılıklarını barındırır.Hemen örneklere geçelim.

{$ad}

{$dizi[row].Telefon}

<body bgcolor="{#arkaPlan#}">

>> Associative diziler

Dizileri kullanırken smarty ile birlikte . (Dot) sembolunu kullanırız

Örnek ;

index.php

$smarty->assign("veri",array('kim'=>array ('ad'=>'Onur','soyad'=>'YERLIKAYA')));

index.tpl

{$veri.kim.ad} {* Ekran cıktısı Onur olur *}

{$veri.kim.soyad} {* Ekran çıktısı YERLIKAYA *}

Page 18: Smarty Manual

Smarty Manual

>> Objeler

Objelerde $veri->email şeklinde kullanılır.

>> Konfigürasyon dosyalarının kullanımı

Konfigürasyon dosyası nedir ? Nasıl kullanırız ?

Konfigürasyon dosyaları işinizi kolaylaştırmaya yarar.Config->dir şeklinde belirlediğiniz dizin içerisine yollanır.Kullanımı daha ıyı anlayabılmek için bir örnek yazıyorum.

Smarty.conf dosyamız;

ArkaPlan = "#E7E7E7"border = "1"Baslik = "Smarty Manual"tabloArkaPlan ="#bbbbbb"satirArkaPlan = "#ccccccc"

Index.tpl dosyamız;

{config_load file="smarty.conf"}<title>{#Baslik#}</title><body bgcolor={#ArkaPlan#}><table border="{#border#}" bgcolor="{#tabloArkaPlan#}"><tr bgcolor="{#satirArkaPlan#}">

<td>Örnek</td></tr></table>

>> {$smarty}.değişkenleri

Şimdi de smarty in sahip olduğu özelliklere bir gözatalım.

{$smarty.get.degisken} : bu fonksiyon $_GET ile aynı işlemi yapmaktadır. Form bilgilerini get metoduyla alır ve ekrana yazdırır.

{$smarty.post.degisken}: bu fonksiyon $_POST ile aynı işlemi yapmaktadır.Form bilgilerini post metoduyla alır ve ekrana yazdırır.

Page 19: Smarty Manual

Smarty Manual

{$smarty.cookies.cerezadi} : bu fonksiyon da $_COOKIE metodu ile aynı işlemi yapar. Cerezadi şeklinde belirtilen cookiyeyi ekrana yazdırır.

{$smarty.server.PHP_SELF} : bu fonksiyonda $_SERVER fonksiyonu ile aynı işlemi yapar ve gelen veriyi ekrana yazdırır.

{$smarty.env.PATH} : bu fonksiyonda get_env ile aynı işlemi yapar gelen veriyi ekrana yazdırır.

{$smarty.session.sessionadi} : $_SESSION ile aynı işlemi yapar gelen veriyi ekrana yazdırır.

{$smarty.now} = Şu andaki tarihi gösterir.{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"} : Bu da tarih ve saat formatını düzenlemenizi saglar. Fakat date_format: tan sonra gelen %Y-%m-%d %H:%M:%S lerin önünde ve de sonundaki tırnak işaretlerini koymayı unutmayın.

{$smarty.const._HOSGELDIN} : _HOSGELDIN seklınde ekrana yazdırır. Kullanım amacı genelde dil dosyaları olan projeler icindir. Define deyimi ile bu tanımlamalar değiştirildiği için,genelde de bu amaçla kullanılır.

{$smarty.capture} : Bu fonksiyon {capture} {/capture} ile birlikte anlatılacaktır.

{$smarty.config.ArkaPlan} : {#ArkaPlan#} ile aynı işlemi yapar.

{$smarty.section} {$smarty.foreach} : Bu fonksiyonlar {section} {/section} ve {foreach} {/foreach} fonksiyonları ile birlikte anlatılacaktır.

{$smarty.template} : Hangi template dosyası üzerinde çalıştığımızı ekrana yazdırır.

{$smarty.version} : Smarty'in hangi versiyonunda çalıştığımızı ekrana yazdırır.

Şimdi vakit kaybetmeden diğer konuya geçelim (:

>> Değişken düzenleyiciler

Bu değişkenler nedir ? Bu gelen veriyi düzenlememizi sağlar. Bütün karakterleri küçültme büyültme vb. Gibi..

Capitalize >>

Index.php$smarty->assign('ornek', 'next x-men film, x3, delayed.');

Index.tpl<b>Normal:</b><br>{$ornek}<br><b>False:</b><br>{$ornek|capitalize}<br><b>True :</b><br>{$ornek|capitalize:true}<br>

Page 20: Smarty Manual

Smarty Manual

count_characters >>Index.php$smarty->assign('ornek', 'Ben Istanbulda Oturuyorum.');

Index.tpl{$ornek|count_characters}{$ornek|count_characters:true}

Default olarak boşlukları saymaz ama boşlukları saymasını da istersek true olarak kullanıyoruz.

cat >>Index.php$smarty->assign('ornek', 'Bugün günlerden');

Index.tpl{$ornek|cat:" Pazar."}

Cat fonksiyonu da aldıgımız veriye ek yapmamızı sağlar. Bu örneğin ekran görüntüsü Bugün günlerden Pazar. Olacaktır.

count_paragraps >>

Index.php$smarty->assign('ornek', 'Bugün günlerden Pazar.

Ve arkadaşlarla beraber cafeye gittik.Ondan sonra ayrıldık herkes evine gitti.');

Index.tpl{$ornek|count_paragraphs"}

Bu fonksiyon da paragrafları sayar ama bence bu fonksiyona işinizi bırakmayın derım :) problemler yaşayabılırsınız. Bu örneğin ekran çıktısı 2 olacaktır.

count_sentences>>

Index.php$smarty->assign('ornek', 'Bugün günlerden Pazar.

Ve arkadaşlarla beraber cafeye gittik.Ondan sonra ayrıldık herkes evine gitti.');

Index.tpl{$ornek|count_sentences"}

Bu fonksiyonu da önerdiğimi söyleyemem açıkcası, Bu örneğin ekran çıktısı 3 olacaktır.

Page 21: Smarty Manual

Smarty Manual

count_words >>Index.php$smarty->assign('ornek', 'Bugün günlerden Pazar.

Ve arkadaşlarla beraber cafeye gittik.Ondan sonra ayrıldık herkes evine gitti.');

Index.tpl{$ornek|count_words"}

Bu örneğin ekran çıktısı 14 olacaktır.

date_format >>

{$smarty.now|date_format}

Ekran Görüntüsü :

Jan 7, 2006 gibi olacaktır.

{$smarty.now|date_format}<br>

{$smarty.now|date_format:"%A, %B %e, %Y"}<br>

{$smarty.now|date_format:"%H:%M:%S"}<br>

Ekran Görüntüsü :

Jan 7, 2006

Saturday, January 7, 2006

11:08:20 şeklinde olacaktır.

Ifadelerin onune % işaretı konulmak zorundadır.

Default >>

{$ornek|default:"Eğer veri boşsa varsayılan değer ben oldum"}

Escape >>

index.php'yi hiç değiştirmeden index.tpl'ye kodları yazarak inceleyiniz.

Page 22: Smarty Manual

Smarty Manual

{$ornek}<br>

{$ornek|escape}<br>

{$ornek|escape:"html"} {* & " ' < > karakterlerini ayıklar*}<br>

{$ornek|escape:"htmlall"} {* Bütün html girdilerini ayıklar *}<br>

{$ornek|escape:"url"}<br>

{$ornek|escape:"quotes"}<br>

<a href="mailto:{$ornek|escape:"hex"}">{$ornek|escape:"hexentity"}</a> <br>

indent >>Index.php$smarty->assign('ornek', 'Bugün günlerden Pazar.

Ve arkadaşlarla beraber cafeye gittik.Ondan sonra ayrıldık herkes evine gitti.');

Index.tpl{$ornek|indent}<br>

{$ornek|indent:10}<br>

{$ornek|indent:1:"\t"}<br>

Sonuç :

Bugün günlerden Pazar.

Ve arkadaşlarla beraber cafeye gittik.

Ondan sonra ayrıldık herkes evine gitti.<br>

Bugün günlerden Pazar.

Ve arkadaşlarla beraber cafeye gittik.

Ondan sonra ayrıldık herkes evine gitti.<br>

Bugün günlerden Pazar.

Ve arkadaşlarla beraber cafeye gittik.

Ondan sonra ayrıldık herkes evine gitti.<br>

Page 23: Smarty Manual

Smarty Manual

lower >>

Bu fonksiyon gelen yazıyı tamamen küçültmemize yarar.

{$ornek|lower}

nl2br >>

Bu fonksiyonda verilen \n "linebreak" ları <br/> ye çevirecektir.

Index.php$smarty->assign('ornek', 'Bugün günlerden Pazar. \n

Ve arkadaşlarla beraber cafeye gittik.\n Ondan sonra ayrıldık herkes evine gitti.');

Index.tpl{$ornek|nl2br"}

regex_replace>>

{$ornek|regex_replace:"/[\n\r]/":""}

replace>>

replace smarty ile daha da rahat kullanılabılmesı saglanmış.

{$ornek|replace:"kaldırılacak_veri","yerine_gecicek veri"}

spacify>>

{$ornek|spacify:"~"} Spacify karakterlerin arasına verdiğimiz karakteri ekler.Default olarak boşluk işlemi yapar.

string_format >>

$smarty->assign('sayi', 23.5787446); {$sayi|string_format:"%.2f"}<br> {$sayi|string_format:"%d"}<br/>

strip_tags >>

{$ornek|strip_tags} default olarak true değerini döndürür.

{$ornek|strip_tags:false}

Page 24: Smarty Manual

Smarty Manual

truncate>>

Index.php$smarty->assign('ornek', 'Bugün günlerden Pazar. \n

Ve arkadaşlarla beraber cafeye gittik.\n Ondan sonra ayrıldık herkes evine gitti.');

Index.tpl{$ornek|truncate}

{$ornek|truncate:25}

{$ornek|truncate:25:">>":true}

Ekran Çıktısı :

Bugün günlerden Pazar. Ve arkadaşlarla beraber cafeye gittik. Ondan...

Bugün günlerden Pazar....

Bugün günlerden Pazar. >>

Upper >>

{$ornek|upper} bütün gelen veriyi büyülterek ekrana yazdırır.

Wordwrap>>

Index.php$smarty->assign('ornek', 'Bugün günlerden Pazar. \n

Ve arkadaşlarla beraber cafeye gittik.');

Index.tpl{$ornek|wordwrap:20}<br />

{$ornek|wordwrap:30:"<br />\n"}

Karışık örnek , Ortaya da ateşli bir salata :)

{$ornek} {$ornek|upper|spacify} {$ornek|lower|spacify|truncate} {$ornek|lower|truncate:25|spacify} {$ornek|lower|spacify|truncate:25:". . ."}

Page 25: Smarty Manual

Smarty Manual

capture>>

{* Eğer içerik boş ise başka işlemler yapsın :) *}{capture name=banner}{include file="banner.tpl"}{/capture}{if $smarty.capture.banner ne ""} <tr> <td> {$smarty.capture.banner} </td> </tr>{/if}

Bu işlemde capture ile başta adlandırdığımız veri dosyasında eğer hiçbir şey yoksa ki bunu ne ile gösterdik bunun geniş açıklamasını ileriki kısımlarda yapacağız. Başka bir içerik gösteriyoruz.

config_load>>

{config_load file="smarty.conf" section="Panel"}

<html><title>{#sayfaBasligi#}</title><body bgcolor="{#arkaPlan#}"><table border="{#borderBoyutu#}" bgcolor="{#tabloArkaPlanRengi#}"> <tr bgcolor="{#satirArkaPlanRengi#}"> <td>Onur</td> <td>YERLIKAYA</td> </tr></table></body></html>

Smarty.conf gibi oluşturduğumuz konfigürasyon dosyalarının ıcerıgını config_load fonxionu ile daha rahat gösterebiliriz. Section kısmı ile de oluşturduğumuz panelde görüntülenmesini sağlarız.

Birer kahve alalım isterseniz :)) Sıkıldığınızı duyar gibiyim sizi bilmem ama bana baya eğlenceli geldi :)

Page 26: Smarty Manual

Smarty Manual

Foreach>>

Sıra geldik döngüsel işlere bunlar bizim bir çok işimizi kolaylaştırmaktadır :)

Şimdi öncelikle bu konu için bir tablo oluşturalım.

Özellik Tür Gerekli Varsayılan Açıklama

from array Evet - Diziyi döndürür

item string Evet - Varsayılan elementi belirler

key string Hayır - Varsayılan anahtarı belirler.

name string Hayır - Foreach döngüsünün adını belirler

Hemen ardına ufak bir örneğimizi daha ekleyelim :

Index.php-----------------$smarty->assign('dongu',array(array("telefon"=>"000 00 00","email"=>"[email protected]","satir"=>"1"),array("telefon"=>"111 11 11","email"=>"[email protected]","satir"=>"2")));

Index.tpl-----------------{foreach name=otomasyon item=veri from=$dongu}{* yukarıki kısımda gelen verileri "veri" degiskenine atadık *}{foreach key=anahtar item=element from=$veri}{$anahtar} : {$element}<br>{/foreach}{/foreach}

Ekran Çıktısı:-----------------telefon : 000 00 00email : [email protected] : 1telefon : 111 11 11email : [email protected] : 2

Include>>

{include file="header.tpl" title="Ana Menu" table_bgcolor="#c0c0c0"}

{* HTML kodlarınızı buraya yazın :)) *}

{include file="footer.tpl" logo="http://php.net/logo.gif"}

Yukarıdaki örnekteki gibi include deyimini kullanırız :)

Page 27: Smarty Manual

Smarty Manual

Include_php>>PHP dosyalarını çağırmak istediğimizde bu fonksiyonu kullanırız, Şu an kullanım yeri olarak en uygun yeri dil dosyalarını almakta olsa gerek { Tabiki bu örnek olarak söyledim :) }{include_php file="smarty.php"}

Insert>>Bu fonksiyonuysa php de hazırladığımız fonksiyonların içerisine veri göndermek için kullanıyoruz.Index.php--------------------Function insert_yazdir($data) {return echo $data;}

Index.tpl--------------------{insert name=yazdir data="Buraya da herhangi bir veri yazalım"}

Çıktı :--------------------Array ( [name] => yazdir [data] => Buraya da herhangi bir veri yazalım )

Gördüğünüz gibi veriyi fonksiyonun içerisine gonderdik :) sadece verimizi göndermek için de yapacağımız şey cok basit :) $data["data"] gibi belirtmek olabilir.

Mantıksal İşlemler ->> { Önemli !! }

Niteleyen Değişiklik Örnek Anlamı PHP== eq $a eq $b eşittir ==!= ne, neq $a neq $b Eşit değil !=> gt $a gt $b çok >< lt $a lt $b az <

>= gte, ge $a ge $b Eşit veya eşitten büyük >=<= lte, le $a le $b Eşit veya eşitten küçük <=

=== - $a === 0 benzerlik ===! not not $a değil !

% mod $a mod $b Mod %is [not] div by - $a is not div by 4 bölünebilir $a % $b == 0is [not] even - $a is not even Çift $a % 2 == 0

is [not] even by - $a is not even by $b a'nın b'ye bölümü çift ise

($a / $b) % 2 == 0

is [not] odd - $a is not odd tek $a % 2 != 0

is [not] odd by - $a is not odd by $b a'nın b'ye bölümü çift olmayan ($a / $b) % 2 != 0

Page 28: Smarty Manual

Smarty Manual

Ufak ve basit bir örnek vermek gerekirse :

Gelen verimizin "Haber" olduğunu varsayalım.

{if $data eq "Haber"}Gelen veri Haber.{else}Gelen veri Haber değil.{/if}

Eğer $data değişkenine atadığımız değer "Haber" verisinden başka bir veri olursa Gelen veririn haber olup olmadığını belirtiyor (:

{ldelim}{rdelim}

Hadi şimdi smarty taglarını kullanıyoruz ama biz ben temalarımda { ve } karakterlerini kullanmayı seven bir insanım diyorsanız bunun için de çözüm basit { karakteri yerine ldelim } karakteri yerine ise rdelim yazmanız yeterli oluyor :)

{literal}>>

Bu fonksiyon sayesınde smarty'in düzenlemesini istemediğiniz yerleri düzenlememesini sağlayabilirsiniz.

{literal}<script language="javascript"><!---alert("Sayfa");--></script>{/literal}

{php}{/php}>>

Bu taglar arasında php kodlarınızı normal bir şekilde de yazabilirsiniz :)

{php}echo "Smarty ile Merhaba Dünya";{/php}

Şimdi de geldik section kısmına :))

{section}{/section}>>

Index.php$smarty->assign('ornekler',array("1","Iki","3","Dort","5"));

Index.tpl{section name=sayi loop=$ornekler}{$ornekler[sayi]}{/section}

Ekran Çıktısı

1 Iki 3 Dort 5

Page 29: Smarty Manual

Smarty Manual

{strip}{/strip}>>

Bu yazdıgınız kodların ekranda tek satır görüntülenebilmesini sağlar.

Custom Fonksiyonlar

{assign}>>

{assign name="herhangi_bir_veri" value="Bu da veri için atadığımız içerik}

{count}>>

{counter name=sayac}{counter}{counter name=sayac2 skip=5}{counter}{counter}{counter}

10011234

Direction ile de yönü belirlenebilir aşağıdan yukarı yukarıdan aşağı gibi.

{cycle}>>

<table>{section name=satir loop=$ornekler}<tr bgcolor="{cyclevalues="#eeeeee,#d0d0d0"}"><td>{$ornekler[satir]}</td></tr>{/section}</table>

{debug}>>Oluşan hataları verir.

{fetch}>>

{fetch file="http://www.google.com.tr" assign="ornek"}{if $ornek ne ""}

<font face=Verdana>{$ornek}</font>{/if}

Baya bir tembellik yaptım biraz kolları sıvayalım :))

Page 30: Smarty Manual

Smarty Manual

html_checkboxes>>

Özellik Tür Gerekli Varsayılan Açıklama

name string Hayır checkbox Checkbox'ın adı

values array Evet,options özelliğini kullandığımızda gereksiz

- Checkbox butonları ıcın olusan dizi

output array Evet,options özelliğini kullandığımızda gereksiz

- Checkbox butonları ıcın olusan dizi ( Çıktı)

selected string/array Hayır empty Seçilen checkbox elemetleri

options associative array

Evet, çıktı da ve etiket değerlerinde kullanmamız

gereksiz

- Çıkış ve etiketleri birleştiren dizi

separator string Hayır empty Checkboxtan gelen verileri ayırmak ıcın kullandığımız ayraç

labels boolean Hayır true Çıkışa <label> tagını eklemek için

{html_image}>>

{html_image file="logo.jpg"}

bu fonksiyon "<img>" ile hemen hemen aynıdır.

{html_options}>>

bu fonksiyonda select menüleriniz için option oluşturur.

$smarty->assign('cust_ids', array(1000,1001,1002,1003)); $smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane Johnson','Charlie Brown'));

<select name=witkey>{html_options values=$cust_ids output=$cust_names }</Select>

Page 31: Smarty Manual

Smarty Manual

{html_radios}>>

$smarty->assign('cust_ids', array(1000,1001,1002,1003)); $smarty->assign('cust_names', array('Joe Schmoe','Jack Smith','Jane Johnson','Charlie Brown'));

{html_radios name="id" values=$cust_ids output=$cust_names separator="<br />"}

Bunun gibi bir kaç örnek verdim ekran çıktılarını buraya yazmadım bunları siz kendiniz kodları copy paste yapıp test edebilirsiniz.

{html_select_date}>>

Özellik Tür Gerekli Varsayılan Açıklama

prefix string Hayır Date_ Değişken öneki

time timestamp/YYYY-MM-DD

Hayır Unix 'e göre veya YYYY-MM-DD

formatında

Hangi tarih veya zamanın kullanıldığı

start_year string Hayır Şimdiki sene Combobox'taki ilk sene

end_year string Hayır start_year ile aynı Comboxboxtaki son sene

display_days boolean Hayır true Günlerin gösterilip gösterilmeyeceği

display_months boolean Hayır true Ayların gösterilip gösterilmeyeceği

display_years boolean Hayır true Yılların gösterilip gösterilmeyeceği

month_format string Hayır %B (strftime) fonksiyonu içinde göre ay formatı

day_format string Hayır %02d (sprintf) fonksiyonu içinde Gün formatı

day_value_format string Hayır %d (sprintf) fonksiyonu içinde Gün format etiketi

year_as_text boolean Hayır false Text türünde gözüküp gözükmeyeceği

reverse_years boolean Hayır false Tersinden göstermesi

field_array string Hayır null Eğer bir isim verildiyse select boxlara veriler form of name[Day], name[Year], name[Month]. Şeklinde dönecektir.

Page 32: Smarty Manual

Özellik Tür Gerekli Varsayılan Açıklama

day_size string Hayır null Eğer verilmişse özelliğe boyutu da ekler

month_size string Hayır null Eğer verilmişse özelliğe boyutu da ekler

year_size string Hayır null Eğer verilmişse özelliğe boyutu da ekler

all_extra string Hayır null Veri girişlerine ek özellikler ekler.

day_extra string Hayır null Veri girişlerine ek özellikler ekler.

month_extra string Hayır null Veri girişlerine ek özellikler ekler.

year_extra string Hayır null Veri girişlerine ek özellikler ekler.

field_order string Hayır MDY the order in which to display the fields

field_separator string Hayır \n farklı alandaki stringlerin arasındaki verileri yazdırır

Örnek :{html_select_date}

Örnek biraz fonksiyonun kendisi gibi görsenizde bunu boyle ıdare etceksiniz işte :))

{html_select_time}>>

{html_select_time use_24_hours=true}

{html_table}>>

$smarty->assign('data',array(1,2,3,4,5,6,7,8,9));

{html_table loop=$data cols=6 tr_attr=$tr}

{math}>>

Bugünkü ders konumuz denklemler açın defteri kitabı yazılı yoklama yapıyorum :P Evet biraz da matematik fonksiyonlarına bakalım.

{math equation="10 / 2 *5"}

Ekran çıktısı : 25 olacaktır :)

Page 33: Smarty Manual

Smarty Manual

{mailto}>>geldik mailto fonksiyonuna bakalım bunda neler neler var :){* normal olarak mailto ile aynı görevi yapar *}{mailto address="[email protected]"}{* mailto yazısını gösterir*}{mailto address="[email protected]" text="Bize Ulaşın"}{* Kaynak kodlarında mail adresi js ile encode edilmiş şekilde gösterir *}{mailto address="[email protected]" encode="javascript"}{* Kaynak kodlarında ve normal olarak üzerine mousenizi *}{* getirdiğinizde Hex kodları görünür :) Güzel yöntem *}{mailto address="[email protected]" encode="hex"}{* CC bcc subject gibi kısımları da böyle kullanabilirsiniz *}{mailto address="[email protected]" subject="Merhaba dostum"}

Tpl dosyanıza bunları yazarak incelemenizi yapabilirsiniz.

{textformat}>>Buda yazı formatınızı belirlemenize yarayan fonksiyondur.

Konfigürasyon dosyası nasıl hazırlanır ??

smarty.conf :

baslik = Bu sitemin yeni başlığı border = 0

Şeklinde düzenleyebilirsiniz bunları tpl dosyanızda nasıl çağıracağınız unuttuysanız hemen hatırlatalım :)

{#baslik#} ve {#border#} gibi.

Bu kısma kadar birçok şey anlattık bu işlemler designer'lar içindi şimdi de programcılar kısmında neler yapabileceklerimize bir gözatalım fonksiyonları ve işlemleri inceleyelim bende bir kahve alıyım :) Bu arada Smarty'i ben baya sevmeye başladım. Umarım size de sevdirebilmişimdir.

PROGRAMc ları

Page 34: Smarty Manual

Smarty Manual

SMARTY_DIR

Bu fonksiyona smarty'i yüklediğimiz dizini belirterek işlem yapabiliriz.Örnek vermek gerekirse.

<?phpdefine("SMARTY_DIR","/usr/local/libs/");require_once(SMARTY_DIR.("Smarty.class.php");?>

/usr/local/ dizini altına kopyaladığımız libs dizinin adresini belirttik.

SMARTY_CORE_DIR

Smarty çekirdek dizinlerini belirlemek için kullanırız :). Çekirdek dosyalarına libs/internals dizini altından bakabilirsiniz.

<?phprequire_once(SMARTY_CORE_DIR.("core.get_microtime.php");?>

Değişkenler

$template_dir : Bu değişken template dizinin nerede olacağını belirtirken kullanırız.Template dizini altında ise .tpl dosyalarımızı saklarız.Yani designerların çalışacağı alanı belirtiyoruz.

$compile_dir : Bu değişkende de templatenin derleneceği dizini belirtiyoruz. Smarty grubu tarafından anadizine konulmaması ve işlem yapılan yere bağlı bir yere konulması öneriliyor.

$config_dir : Konfigürasyon dosyalarımızı yerleştireceğimiz dizini belirtmek için kullanıyoruz.

$plugins_dir : Plug-in'lerin bulunduğu dizini belirtmek için kullanıyoruz.

$debug_tpl : Debug.tpl dosyası Libs klasörümüzün içerisindedir ve hataları bu templateye uygun olarak gösterir siz kendinize göre de hata sayfası oluşturabılırsınız.$debug.tpl ile de bunu tanımlayabılırsınız.

$autoload_filters : Otomatik olarak filtre işlemlerinizin smarty tarafından yapılmasını istiyorsanız güzel bir yöntem ;Örnek ;<?php $smarty->autoload_filters = array('pre' => array('trim', 'stamp'), 'output' => array('convert')); ?>

$compile_check : templatenizin tekrar derlenip derlenmediğini kontrol eder.İyi bir performans için false olarak ayarlanması iyidir.

$force_compile : Bu seçenek her client isteminde derlemeyi tekrar yapmaya zorlar. Varsayılan olarak pasiftir.Bu seçenek aktif edildiğinde $compile_check fonksiyonunu geçersiz kılar.

Page 35: Smarty Manual

Smarty Manual

$caching : Bu seçenek önbelleklemeyi aktif eder veya pasif seçeneklerini belirlememizi sağlar.

Aktif : $smarty->caching = true;

$cache_dir : Önbellekleme yapacağımız dizini belirtiriz.

$cache_lifetime : Bu seçenekle ise de saniye şeklinde cache ömrünü belirleyebilirsiniz.

$cache_modified_check : Bu seçenekle de modifiye edilip edilmediğini kontrol edebilirsiniz. Sadece Insert tagı kullanılmayan yerlerde çalışır.Eğer düzenlenmemişse 304 Not modified header'ini gönderir.

$cache_read_hidden : Gizli olan kısımları bu şekilde okutabilirsiniz.Varsayılan olarak false'dir.

$default_template_handler_func : Varsayılan olarak template belirtir mevcut template yerinde yoksa otomatik olarak belirtilen template işlem görür.

SMARTY_PHP_PASSTHRU - Smarty echos tags as-is.

SMARTY_PHP_QUOTE - Smarty quotes the tags as html entities.

SMARTY_PHP_REMOVE - Smarty removes the tags from the templates.

SMARTY_PHP_ALLOW - Smarty will execute the tags as PHP code.

$secure_dir : Güvenli dizinleri belirtebilirsiniz. security'in aktif olduğu zamanlarda.

$security_settings : Güvenlik ayarlarının yapıldığı seçenektir.

PHP_HANDLING - true/false. If set to true, the $php_handling setting is not checked for security.

IF_FUNCS - This is an array of the names of permitted PHP functions in IF statements.

INCLUDE_ANY - true/false. If set to true, any template can be included from the file system, regardless of the $secure_dir list.

PHP_TAGS - true/false. If set to true, {php}{/php} tags are permitted in the templates.

MODIFIER_FUNCS - This is an array of the names of permitted PHP functions used as variable modifiers.

ALLOW_CONSTANTS - true/false. If set to true, constants via {$smarty.const.name} are allowed in the templates. The defaults is set to "false" for security.

$trusted_dir : Güvenlik fonksiyonlarını açtığınızda doğruladığınız dizini belirtir , bu dizin altındaki php dosyaları {include} edilip çalıştırılabilir.

$left_delimiter : Varsayılan olarak "{" dır. Isteğinize göre değiştirebilirsiniz.

Page 36: Smarty Manual

Smarty Manual

$right_delimiter : Varsayılan olarak "}" dir. Isteğinize göre değiştirebilirsiniz.

$compiler_class : Smarty Derleyici dosyasının adıdır. Varsayılan olarak "Smarty_Compiler" dir.Bu derleyicinin adını değiştirdiğinizde mutlaka belirtmelisiniz.

$default_modifiers : varsayılan düzenleyicileri belirtmek için kullanırız.

>> Metodlar;

append

Append ile bir dizi veya değişken içerisine eklemek istediğimiz şeyleri ekleyebiliriz.$smarty->append(array("city" => "Istanbul", "state" => "Kaynarca"));

Yukarıdaki örnekte city değişkenine Istanbulu state kısmına da Kaynarca'yı ekler.

assign

$smarty->assign(array("city" => "Istanbul", "state" => "Kaynarca"));

Bu örnekte de city değişkenine Istanbul state değişkenine de Kaynarca'yı verir.

Aklıma "Kız Dediğin İSTANBUL Gibi Olmalı Fethi Zor Fatihi Tek " sözü geldi.:)

clear_all_assign();

Bütün verileri temizler.

clear_all_cache();

Bütün önbelleği temizler.

clear_assign

clear_assign("city");

city kısmında bir dizi de belirtilebilir.

clear_cache

clear_cache("index.tpl");

verilen .tpl dosyasının önbelleğini temizler..

clear_compiled_tpl

belirtilen .tpl dosyasını compile dizininden temizler.clear_compiled_tpl("index.tpl");

clear_compiled_tpl(); şeklinde verildiğinde ise bütün compile dizini içerisindeki derlenen dosyaları temizler.

Page 37: Smarty Manual

Smarty Manual

clear_config

clear_config('test');test ile belirtilen konfigürasyonu temizler.

clear_config();bütün konfigürasyonu temizler.

config_load// konfigürasyon dosyasını yükler$smarty->config_load('smarty.conf'); // kısmı konfigürasyon$smarty->config_load('smarty.conf', 'degisken');

display

yaptığımız işlemlerin hangi dosyada göstereceğimiz fonksiyonumuzdur.

$smarty->display("index.tpl");

get_config_vars

<?php// konfigürasyon dosyasından test'e atanmış etiketi alır.$smarty->get_config_vars('test'); // bütün verileri alır. ( Dizi olarak )$config_vars = $smarty->get_config_vars(); ?>

get_template_vars

Bu da template dosyasındakı degıskenlerı alır.

is_cached

Önbellekleme yapılıp yapılmadığını belirten fonksiyondur.

load_filter

$smarty->load_filter('pre', 'trim');// trim olarak adlandırılmış pre filtresini yükler.

SON