This document was uploaded by user and they confirmed that they have the permission to share
it. If you are author or own the copyright of this book, please report to us by using this DMCA
report form. Report DMCA
Onur Yerlikaya 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
.
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 ;
{$yazi}
yazalım ve kaydedip kapatalım.
Smarty Manual Şimdi index.php adlı dosyamızı açalım ((Smarty dizinimizde bulunan ~ Libs değil Smarty))
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 Tagları $smarty->left_delimiter = ''; yukarıda verilen örnekteki gibi de "" 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}
>> Associative diziler Dizileri kullanırken smarty ile birlikte . (Dot) sembolunu kullanırız Örnek ; index.php
>> 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"} {#Baslik#}
Örnek
>> {$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 Normal: {$ornek} False: {$ornek|capitalize} True : {$ornek|capitalize: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} {$smarty.now|date_format:"%A, %B %e, %Y"} {$smarty.now|date_format:"%H:%M:%S"} 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} {$ornek|escape} {$ornek|escape:"html"}
{* & " ' < > karakterlerini ayıklar*}
{$ornek|escape:"htmlall"} {* Bütün html girdilerini ayıklar *} {$ornek|escape:"url"} {$ornek|escape:"quotes"} {$ornek|escape:"hexentity"}
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} {$ornek|indent:10} {$ornek|indent:1:"\t"} Sonuç : Bugün günlerden Pazar. Ve arkadaşlarla beraber cafeye gittik. Ondan sonra ayrıldık herkes evine gitti. Bugün günlerden Pazar. Ve arkadaşlarla beraber cafeye gittik. Ondan sonra ayrıldık herkes evine gitti. Bugün günlerden Pazar. Ve arkadaşlarla beraber cafeye gittik. Ondan sonra ayrıldık herkes evine gitti.
Smarty Manual lower >> Bu fonksiyon gelen yazıyı tamamen küçültmemize yarar. {$ornek|lower} nl2br >> Bu fonksiyonda verilen \n "linebreak" ları 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 >>
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} {$ornek|wordwrap:30:" \n"}
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 ""}
{$smarty.capture.banner}
{/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"} {#sayfaBasligi#}
Onur
YERLIKAYA
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"=>"[email protected]","satir"=>"1"),array("telefon"=>"111 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} {/foreach} {/foreach} Ekran Çıktısı: ----------------telefon : 000 00 00 email : [email protected] satir : 1 telefon : 111 11 11 email : [email protected] satir : 2 Include>> {include file="header.tpl" title="Ana Menu" table_bgcolor="#c0c0c0"} {* HTML kodlarınızı buraya yazın :))
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"> {/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}>>
{section name=satir loop=$ornekler}
{$ornekler[satir]}
{/section}
{debug}>> Oluşan hataları verir. {fetch}>> {fetch file="http://www.google.com.tr" assign="ornek"} {if $ornek ne ""} {$ornek} {/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