Upload
api-3740755
View
1.079
Download
1
Embed Size (px)
DESCRIPTION
Smarty adlı kitabım
Citation preview
Smarty [Template Engine]
Saygılarımla Onur YERLIKAYA,
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.
İç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
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.
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.
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 ?..
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"} <-- $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`"}
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 ile aynı işlemi yapmaktadır.Form bilgilerini post metoduyla alır ve ekrana yazdırır.
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>
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 :)) Sıkıldığınızı duyar gibiyim sizi bilmem ama bana baya eğlenceli geldi :)
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 :)
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
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}
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 :))
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>
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.
Ö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="[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ı
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.
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.
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', 'trim');// trim olarak adlandırılmış pre filtresini yükler.
SON