Uzun süredir kullandığım, okuduğumuz şekilde tarih gösteren PHP fonksiyonunun helper haline getirilmişini anlatmak istedim bu gece…
Bu yardımcı ile örneğin 2008-07-08 formatındaki tarihi: “1 gün önce” olarak görüntüleyebilirsiniz. Eğer tarih çok eskiyse 3 yıl 8 ay 12 gün sonra gibi gereksiz bir formata dökmemek için “8 Temmuz 2008″ şeklinde görüntülenecektir.
Şimdi biraz Zend Framework’teki view helper’lardan bahsedip en sonra da fonksiyonu yazayım.
View Helper’lar Hakkında
Zend Framework malumunuz Model-View-Controller yapısının bir türevini kullanıyor. Projemizin nasıl sunulduğu (tasarımı) ile ilgili kısım “View” kısmı.
View’da neler olur?
HTML, CSS, Javascript ve sınırlı php kodu. View’da PHP kullanmak makbul değildir, kullanacaklarınız:
if / else cümleleri, döngüler (while, foreach vs.) ve yazıyı formatlayan yardımcı kodlar. İşte bu yardımcı kodlar Zend Framework’te “View Helpers” olarak adlandırılmış.
Basit bir View Helper Nasıl Yazılır?
Aslında doğru dizindeki doğru isimlendirilen her class Zend Framework dispatcher’ı tarafından bir helper olarak otomatik olarak kullanılır hale getirilir. Bunun için yapmanız gereken:
{proje_kökü}/application/view/helpers dizini altına bir dosya açmak. Örnek olarak biz TarihFormatla.php açalım. Zend Framework’ün otomatik olarak algılayabilmesi için bu dosyanın içinde Zend_View_Helper_TarihFormatla adında bir class tanımlamamız gerekecek:
class Zend_View_Helper_TarihFormatla { public function TarihFormatla ($date, $format = '') { } }
gibi…
Yazılan Helper Nasıl Kullanılır?
Yardımcı fonksiyonu kullanmak için ilgili şablonda (*.phtml) $this->tarihFormatla($this->data['guncellenme']) şeklinde kullanabilirsiniz.
İlk harf küçük olacak şekilde büyük/küçük harfe duyarlı olduğuna dikkatinizi çekerim.
Afilli tarih formatlama yardımcısı. Hem de Türkçe!
Bu aşağıdaki fonksiyonu application/views/helpers/DateFormat.php dosyasına yazmalısınız. Daha sonra phtml dosyaları içerisinde direkt $this->dateFormat($tarih) şeklinde kullanabilirsiniz.
class Zend_View_Helper_DateFormat { public function DateFormat($date, $format = '') { switch ($format) { case 'datetime': $format = "dd MMMM yyyy, HH:mm"; break; case 'date': $format = "dd MMMM yyyy EEEE"; break; case 'timeLeft': return $this->timeLeft($date); break; default: if(!$format) $format = "dd MMMM yyyy EEEE"; } $locale = new Zend_Locale('tr_TR'); $date = new Zend_Date($date, false, $locale); return $date->toString($format); } private function timeLeft($date) { list($t,$s) = explode(' ',$date); $tt = explode('-',$t); $ss = explode(':',$s); $time = mktime($ss[0],$ss[1],$ss[2],$tt[1],$tt[2],$tt[0]); $delta = time() - $time; if(date("Y",$time) != date("Y")) { return date("d.m.Y H:i",$time).' tarihinde'; } if($delta < 0) $delta = $delta + 93; $tarih = $delta." sn. önce"; if($delta > 59) { $dakika = floor($delta/60); if(!$dakika) $dakika = 1; $saniye = $delta%60; $tarih = $dakika." dk. önce"; if($dakika > 59) { $saat = floor($dakika/60); if(!$saat) $saat = 1; $dakika = $dakika%60; $tarih = $saat." saat önce"; if($saat > 23) { $gun = floor($saat/24); if(!$gun) $gun = 1; $saat = $saat%24; $tarih = $gun." gün önce"; if($gun > 6) { $hafta = floor($gun/7); if(!$hafta) $hafta = 1; $gun = $gun%7; $tarih = $hafta." hafta önce"; if($hafta > 3) { $ay2 = floor($hafta/4); if(!$ay2) $ay2 = 1; $hafta = $hafta%4; $tarih = $ay2." ay önce"; } } } } } return $tarih; } }
« CakePHP | Zend Framework 1.6 RC1 çıktı »
