Ezan Vakitleri
İstediğiniz il veya ilçenin namaz vakitlerini ziyaretçilerinize gösterebileceğiniz uygulama.
Bu uygulamayı namazvakti.com’un paylaştığı xml dosyasındaki verileri sunucuma kopyalayarak hazırlıyorum. Size de öyle tavsiye ederim. Siteden kodlarla veri çekmeye çalışmanın alemi yok. Ayrıca siteye link vermeyi de unutmayın. Emeğe saygı 🙂
Not 1: Diyanet ile karşılaştırıp sitede ki bilgiler yanlış vs diye dönüş yapmayınız, bu sitede ki saatler temkinli saatlerdir.
Not 2: Bu çalışma PHP kodları ile yapılmaktadır.
Öncelikle https://www.namazvakti.com/ adresine gidip namaz vakitlerini ekleyeceğim sayfaya ulaşıyorum. Örneğin en üst sağda Şehir Arama kutusuna aradığım konumu yazıp o sayfayı açmalıyım. Mesela Buca yazıp arama yaptığımda kalabalık bir konum listesi çıkıyor. Arasından Türkiye Buca / İzmir linkini görüp tıklıyorum. Beni https://www.namazvakti.com/Main.php?cityID=114744 adresine götürüyor. Şimdi sol altta Yıllık XML yazısı var. O adrese tıkladığımda xml dosyasına ulaşıyorum. Örneğin Buca’nın https://www.namazvakti.com/XML.php?cityID=114744
Namazvakti.com’un Sitemizde bildirilen XML Nedir ve Nasıl Kullanılır? içeriğini inceleyebilirsiniz.
Şimdi (veya öncesinde) nerede çalışacak isem orada bir xml dosyası oluşturup namazvakti’nde olan xml içindekileri yani cityinfo taglı veriyi kendi dosyama yapıştırıyorum. Crome da Sağ tıklayıp farklı kaydet olmadı, ondan böyle copy/paste yapıyorum.
DB.xml diye bir dosya oluşturup xml içindeki verileri bu dosyaya yapıştırdım. Konunun devamında işlemleri DB.xml üzerinden yapacağım, o yüzden yazdım. Siz farklı adla kayıt ederseniz dikkat edersiniz. Bundan sonrası tahmin edeceğiniz gibi xml okuma üzerine. Şimdi ikinci bir dosya yani index.php dosyası oluşturup kodlarımı içine yazacağım.
Türkçe ve/veya saat problemi olmaması için standart eklediğim kodlarla başlıyorum:
1 2 3 4 |
<?php date_default_timezone_set('Europe/Istanbul'); setlocale(LC_TIME, 'tr_TR.UTF-8'); setlocale(LC_ALL,'turkish'); |
Bu başa header(‘Content-Type: text/html; charset=utf-8’); gibi şeyler koymayın.
Dosyamı tekrar tekrar veri işleme yapmak istemediğimden bir cache dosyasına kayıt ederek kullanacağım. Bunun için kayıt dosyam için bir cache klasörü ayarlıyorum. Yoksa “zorunan” açtırıyorum.
5 6 |
$klasoryolu=dirname(__FILE__)."/cache"; if(!file_exists($klasoryolu)){$olustur = mkdir($klasoryolu);}else{} |
Aşağıda wday (hafta gün numarası) ile kayıt dosyamı en fazla 7 dosya tutacak şekilde ayarladım. Doğrudan yday (yıl gün numarası) ile kayıt tutarsam birike birike 365 tane dosya olacaktır, istemiyorum. Ola ki yday ile dosya tutmak isteyip düne ait dosyaları silmek istersem;
- Düne ait tarihli dosyanın adı belli, unlink() ile silerim veya
- Tarihte Bugün uygulamasında yaptığım gibi cache klasörünü temizlerim
7 8 9 |
$simdi=getdate(); $gunno=$simdi["wday"]; $cacdoshtml="$klasoryolu/$gunno.html"; |
Ne demiştim, verileri tekrar tekrar çekmeyeyim diye kayıt tutacağım. Birazdan kaydım varsa işlem yapmayacağım ama bir hafta dolduğunda dosyam hala var olduğundan problem çıkacak yani güncelleme olmayacak. Bu nedenle dosyam için azami süre belirleyip dosyanın varlığının yanı sıra yaşına da bakarak karar vereceğim.
10 |
$validity = 24*60*60; |
Burada tam 24 saat yaptım. Şimdi if else ile dosya yoksa veya gençse (tabirlere bak) işlem yapmıyorum.
11 12 13 14 |
if((file_exists($cacdoshtml) AND (time() - filemtime($cacdoshtml))<$validity) OR $incmi==1) { //Dosya varsa ve gençse bir şey yapmıyoruz } |
Eğer dosya yoksa veya yaşlıysa yeni kayıt oluşturmaya başlıyorum.
15 16 |
else { header('Content-Type: text/html; charset=utf-8'); |
Kayıtlı dosyamı xml değişkenine atıyorum.
17 |
$xml=simplexml_load_file(dirname(__FILE__)."/DB.xml"); |
Konum bilgilerini alıyorum.
18 19 |
$cityStateTR=$xml->attributes()->cityStateTR; $cityNameTR=$xml->attributes()->cityNameTR; |
Bugün hangi satıra denk geliyor onu buluyor ve timesprayer değişkenine atıyorum.
20 21 |
$kacincigun=$simdi["yday"]+1; $timesprayer=$xml->prayertimes[$kacincigun]; |
yday 0’dan 365’e kadardır. xml dosyamda 0 geçen yılın sonu günü, yıl olarak gün 1 den başladığı için +1 yapıyorum. Yukarıdaki işlem xmlde month ve day kısmını seçebilecek şekilde de yapılabilir. Ben yılın günü üzerinden tercih ediyorum. Şimdi de satırdaki bilgileri değişkenlere atıyorum.
22 |
list($imsak,$sabah,$gunes,$israk,$kerahet,$ogle,$ikindi,$asrisani,$isfirarisems,$aksam,$istibakinucum,$yatsi,$isaisani,$kible) = explode(" ", $timesprayer); |
Fark ettiğiniz gibi veriler 5 vakitten ibaret değil. Diğer bilgilerden de eklemek istediğinizi aşağıda eklersiniz. Adlarından ne oldukları anlaşılıyor.
Vakitleri tabloya yazacağım ama önce tarih de yazmak istiyorum.
23 |
$tarih = iconv("windows-1254" , "UTF-8" , strftime("%d %B %Y %A")); |
Oldu olacak hicri tarihi de yazmak istiyorum. Haydaaa! Neyse, onu da buldum 🙂 Önce buraya gidip hijri.class.php dosyasını indiriyorum. Sonra aşağıda yazdığım gibi hicri tarihimi oluşturuyorum.
24 25 26 |
$hijri_settings['langcode']='tr'; require_once(dirname(__FILE__).'/hijri.class.php'); //https://github.com/hubaishan/HijriDateLib adresindeki dosyayı indirmiştik $hicritarih = (new hijri\datetime())->format('_j _M _Y')." ".iconv("windows-1254" , "UTF-8" , strftime("%A")); |
Artık vakitleri kayıt edebilirim.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
//HTML cache yazıyoruz ob_start(); echo "<table class='namazvakitleri' title='namazvakti.com a ait temkinli saatlerdir ibrahimay.net'> <thead><tr><th colspan=4><a href='//ibrahimay.net/?p=507' target='_blank'/>$cityStateTR $cityNameTR Namaz Vakitleri <br> $tarih </a></th></tr></thead> <tr><th>İmsak</th><td class='imsak imsak2'>$imsak</td><th>Öğle</th><td class='ogle ogle2'>$ogle</td></tr> <tr><th>İkindi</th><td class='ikindi ikindi2'>$ikindi</td><th>Akşam</th><td class='aksam aksam2'>$aksam</td></tr> <tr><th>Yatsı</th><td class='yatsi yatsi2'>$yatsi</td><th>Kıble</th><td class='kible'>$kible</td></tr> <tr><th colspan=4>$hicritarih</th></tr> </table> "; $cachehtml = ob_get_contents(); ob_end_clean(); $dosyahtml = fopen($cacdoshtml , 'w+'); //dosya oluşturma işlemi fwrite($dosyahtml , "<!-- CACHE START-->\n"); fwrite($dosyahtml , "<!-- ibrahimay.net \n Sitemizden bahsetmeyi unutmayın :) -->\n"); fwrite($dosyahtml , $cachehtml); fwrite($dosyahtml , "<!-- CACHE END-->\n"); fclose ($dosyahtml); |
Yukarıda tabloya eklediğim class adlarını ve iftarsayac satırını sadece vakitleri ekrana basmak isteyen arkadaşlar silebilir. O kısmı başka bir makalede anlattım. Linki sayfa sonunda var.
Elsemi de kapatayım.
46 47 |
} ?> |
Buraya kadar biten kodlarla sayfam kalbim gibi tertemiz bir sayfa. Kayıt dosyasını sayfama herhangi bir yöntemle ekleyerek vakitleri gösterebilirim de güncelleme olmaz. Güncel olması için yine bu sayfadan ekrana basacağım.
Benim tercihim index.php dosyamın sonuna şunu eklemek.
48 49 50 51 52 53 54 55 56 57 58 |
<?php if(isset($_GET["tip"]) AND $_GET["tip"]=="js") { header("Content-type: text/javascript; charset=utf-8"); echo "document.getElementById('NV').innerHTML+=`"; echo "<link rel='stylesheet' href='/ezan-vakitleri/styles/style.php' media='all' />"; include($cacdoshtml); echo "`;"; } else {include($cacdoshtml);} ?> |
Böylece index.php dosyamı script dosyasına çeviriyor veya direk index.php sayfamı açtığımda tablomu ekranda görebiliyorum. innerHTML yerine document.write kullanılabilir ama ben o kodu hiç sevmiyorum.
innerHTML neyin içine aldığıma dikkat edin. Oradaki klasik tek tırnak değil, ters apostrof (Backtick) dedikleri tipografik işarettir.
Sitem için scriptimi ekliyorum.
1 |
<script type="text/javascript" src="/ezan-vakitleri/index.php?tip=js"></script> |
Tabi yine bir şey görünmüyor. Nerede görmek istiyorsam oraya da divimi koyuyorum.
1 |
<div id=NV></div> |
Bu kadar. Gerisi style kodları ile zevkime göre şekillendirmekten ibaret. script formatlı basımda style.php linki eklemiştim, demolarda ki style dosyalarından faydalanabilirsiniz.
Demolarda sayaçta var burada niye yok derseniz o da burada.
Değişik örnekler için demolar sayfama bakabilirsiniz.Hazır dosyaları indirmek isterseniz :
Dosyalar üyelere özeldir: Giriş Yap
Yeni misin? Kayıt ol
1 Response
[…] çalışmayı Ezan Vakitleri ile Geri Sayım Sayacı uygulamalarından […]