Page 1

Smarty [Template Engine]

Sayg覺lar覺mla Onur YERLIKAYA,


Smarty:Template Engine

Onur Yerlikaya <onuryerlikaya@hotmail.com> 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 korunmaktadır.

Attribution-NonCommercial-NoDerivs

2.5

lisansı

ile

bu

kitap

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.


İç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


İç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}


İç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}


İç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


İç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


İç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()


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.


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

ardından kaydedıyoruz ve Apache'yi (( Eğer

include_path = “Smartydizini” yazıyoruz

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


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 ebooklarda 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.


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 >> sakladığımız dizinin adı.

Smarty

için

oluşturduğumuz

konfigürasyon

dosyalarını

$smarty->assign('tplDosyasinaGonderilecekDegisken','gelenVeri'); $smarty->display('index.tpl'); göstereceğini belirler.

Bu

verilerin

islemlerin

hangi

TPL

dosyası

üzerinde

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 ?..


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'); } } ?>


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


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}


Smarty Manual >>Çift tırnak içine veri eklenmesi ; Yazılış Örnekleri; {func var="test $foo test"} {func var="test $foo_bar test"} {func var="test $foo[0] test"}

<-- $foo degiskenini gosterir. <-- $foo_bar degiskenini gosterir. <-- $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`"}


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 *}


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 bilgilerini post metoduyla alır ve ekrana yazdırır.

ile

aynı

işlemi

yapmaktadır.Form


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 {foreach} {/foreach} fonksiyonları ile birlikte anlatılacaktır.

{section} {/section} ve

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


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.


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.


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>


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}


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:". . ."}


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 :)) eğlenceli geldi :)

Sıkıldığınızı duyar gibiyim sizi bilmem ama bana baya


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","email"=>"phponline@msn.com","satir"=>"1"),array("telefon"=>"111 11","email"=>"onuryerlikaya@hotmail.com","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 00 email : phponline@msn.com satir : 1 telefon : 111 11 11 email : onuryerlikaya@hotmail.com satir : 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 :)

00 11


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 == 0

is [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


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


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}

100 1 1 2 3 4

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 :))


Smarty Manual html_checkboxes>>

Özellik

Tür

Gerekli

Varsayılan

Açıklama

name

string

Hayır

checkbox

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

labels

boolean

Hayır

true

Checkbox'ın adı

Checkboxtan gelen verileri ayırmak ıcın kullandığımız ayraç Çı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>


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 Date_

Açıklama

prefix

string

Hayır

Değişken öneki

time

timestamp/YYYYMM-DD

Hayır

start_year

string

Hayır

end_year

string

Hayır

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.

Unix 'e göre veya Hangi tarih veya YYYY-MM-DD zamanın kullanıldığı formatında Şimdiki sene

Combobox'taki ilk sene

start_year ile aynı Comboxboxtaki son sene


Ö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 :)


Smarty Manual {mailto}>> geldik mailto fonksiyonuna bakalım bunda neler neler var :) {* normal olarak mailto ile aynı görevi yapar *} {mailto address="phponline@msn.com"} {* mailto yazısını gösterir*} {mailto address="phponline@msn.com" text="Bize Ulaşın"} {* Kaynak kodlarında mail adresi js ile encode edilmiş şekilde gösterir *} {mailto address="phponline@msn.com" encode="javascript"} {* Kaynak kodlarında ve normal olarak üzerine mousenizi *} {* getirdiğinizde Hex kodları görünür :) Güzel yöntem *} {mailto address="phponline@msn.com" encode="hex"} {* CC bcc subject gibi kısımları da böyle kullanabilirsiniz *} {mailto address="phponline@msn.com" 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


Smarty Manual SMARTY_DIR Bu fonksiyona smarty'i yüklediğimiz dizini belirterek işlem yapabiliriz. Örnek vermek gerekirse. <?php define("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. <?php require_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 kullanıyoruz.

: Konfigürasyon dosyalarımızı yerleştireceğimiz dizini belirtmek için

$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.


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 belirleyebilirsiniz.

:

Bu

seçenekle

ise

de

saniye

şeklinde

cache

ömrünü

$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 zamanlarda. $security_settings

:

Güvenli

dizinleri

belirtebilirsiniz.

security'in

aktif

olduğu

: 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.


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.


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', pre filtresini yükler.

'trim');//

SON

trim

olarak

adlandırılmış

Smarty Manual  

Smarty için başlangıç.

Read more
Read more
Similar to
Popular now
Just for you