Zend_View_Helper ile Türkçe tarih formatlama
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’fa HTML, CSS, Javascript ve sınırlı php kodu bulunur. 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.
Yukarıdakilerin Özeti
- View içerisinde $this->tarihFormatla() diye bir helper kullanmak istiyorsunuz,
- Helper dosyanızın adı bu fonksiyonun ilk harfi büyük olanı olan TarihFormatla.php olmalı.
- Bu dosya içinde oluşturacağınız class’ın adı için helper’ınızın başına “Zend_View_Helper_” koyacaksınız: Zend_View_Helper_TarihFormatla
- Bu class’ın içinde çalıştırılacak method’un adı yine helper’ın adı olmalı: TarihFormatla().
- İstiyorsanız class içerisinde yardımcı metotlar kullanabilirsiniz. Prensip olarak bu metotları “private” yapmakta yarar var.
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 { /** * Tarih formatlama helper'ı * * @param integer $date timestamp olarak gönderilir. Formatlanacak tarih... * @param string $format Sonuç hangi formatta olsun */ 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, Zend_Date::TIMESTAMP, $locale); return $date->toString($format); } private function timeLeft($date) { $periods = array("saniye", "dakika", "saat", "gün", "hafta", "ay", "yıl", "asır"); $lengths = array("60","60","24","7","4.35","12","10"); if ($difference > 0) { $ending = "önce"; } else { $difference = -$difference; $ending = "kaldı"; } for($j = 0; $difference >= $lengths[$j]; $j++) $difference /= $lengths[$j]; $difference = round($difference); $text = "$difference $periods[$j] $ending"; return $text; } }
'96 dan beri web teknolojileri üzerine çalışır.
Yahya SÖNMEZ
10 May, 2010
Hocam öncelikle elinize sağlık teşekkür ediyorum. yazılarınızı dikkatle takip ediyorum bu tür ve değişik bilgi içerikli yazılarınızın devamınıda bekliyorum. Sitenizin Bizim gibi ZF e yeni başlayanlar için güzel kaynaklar içeriyor olması çok güzel.
tekrar elinize sağlık.