Türkçescript

PHP de Takvim Oluşturmak

28 Aralık 2008,

takvimkBu yazıda PHP kullanarak kendi web tabanlı takviminizi nasıl oluşturacağınızı öğreneceksiniz. Bu takvim iki bölümden oluşmaktadır. Üst kısımda önceki ve sonraki ayların linkleri, altta ise takvimin kendisi bulunmaktadır. Seçilmiş ay ismini takip eden yıl ve ayın günlerini tablo şeklinde göstermektedir. Geliştirmenize yardımcı olması için iyi bir PHP düzenleyicisine ihtiyaç duyabilir ya da yeterince deneyimli iseniz Notepad gibi kolay anlaşılır bir metin düzenleyici kullanabilirsiniz.

Öncelikle parametrelerimizi nasıl taşıyacağımıza karar vermemiz gerekmektedir. Değerleri ‘hidden’ input alanı içinde html kod olarak veya URL yoluyla taşıyabiliriz. Bu yazıda ikinci yöntemi kullanacağız. Biri “ay” için diğeri “yıl” için olan iki ayrı parametreye ihtiyaç duyacağız. Ayrıca ay isimlerinin olduğu bir diziye ihtiyacımız var.

$aylar = Array("Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık");

İlk olarak parametrelerimize değer verilmiş mi diye kontrol etmemiz gerekiyor. Eğer değer verilmemiş ise biz kendimiz şuanki ay ve yıl değerlerini vermeliyiz. ( date() fonksiyonu için ayrıntılı bilgi önceki yazımızda mevcut)

if (!isset($_REQUEST["ay"])) $_REQUEST["ay"] = date("n");
if (!isset($_REQUEST["yil"])) $_REQUEST["yil"] = date("Y");

Takvimimiz içinde kullandığımız diğer değişkenlerinde değerlerini atamalıyız.

$ay = $_REQUEST["ay"];
$yil = $_REQUEST["yil"];
$onceki_yil = $yil;
$sonraki_yil = $yil;
$onceki_ay = $ay-1;
$sonraki_ay = $ay+1;
if ($onceki_ay == 0 ) {
$onceki_ay = 12;
$onceki_yil = $yil - 1;
}
if ($sonraki_ay == 13 ) {
$sonraki_ay = 1;
$sonraki_yil = $yil + 1;
}

$ay ve $yil değişkenleri takvimdeki şuan ki ay ve yılı göstermek için kullanılmakta. “<<” ve “>>” linkleri karşılığı için parametrelere ihtiyacımız var. $onceki_yil ve $sonraki_yil şimdiki için ayarlıyoruz. Daha sonra bunu değiştirebiliriz, şimdilik bu yeterli. Ayrıca sonraki ve önceki ay parametreleri içinde sırasıyla 1 ekleyerek ve çıkararak değerlerini atayalım. Şimdi parametrelerimizin limitin altına veya üstüne çıkıp çıkmadığını kontrol etmeliyiz. Bir yılda 12 ay olduğuna göre eğer parametre 13’e geldiyse diğer bir yıla geçmişiz demektir ve parametremizi tekrar 1’e (Ocak) getirmeliyiz ve yıl ‘yil’ parametremize 1 eklemeliyiz. Öte yandan, biz zamanda geriye döndüğümüzde ve ‘ay’ parametremiz 0’a gider. Dolayısıyla ‘yıl’ parametremizi 1 azaltmalıyız ve ay parametresini 12 (Aralık) olarak ayarlamalıyız. Şimdi önceki ve sonraki aylar için linklerimizi ayarladığımıza göre takvimin nasıl yapıldığına dönebiliriz.

Takvimimizi yerleştireceğimiz bir tablo yaratalım. Sonra tabloya günlerin belirtildiği bir satır ekleyelim. Ayrıca ilk satır ayın ismi ve yılı içermektedir. Ama diziler sıfırdan başladıklarından doğru ismi elde etmek için “ay” parametresinin değerinden 1 çıkarmamız gerekir.

<table width="200">
<tr>
<td align="center">
<table width="100%" border="0" cellpadding="2" cellspacing="2">
<tr align="center">
<td colspan="7" bgcolor="#999999">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20%" align="left">&nbsp;&nbsp;<a href="<?php echo $_SERVER["PHP_SELF"] . "?ay=". $onceki_ay . "&yil=" . $onceki_yil; ?>" style="color:#FFFFFF"><<</a></a></a></td>
<td align="center" style="color:#FFFFFF"><strong><?php echo $aylar[$ay-1].' '.$yil; ?></strong></td>
<td width="20%" align="right"><a href="<?php echo $_SERVER["PHP_SELF"] . "?ay=". $sonraki_ay . "&yil=" . $sonraki_yil; ?>" style="color:#FFFFFF">>></a>&nbsp;&nbsp;</td>
</tr>
</table>
</td>
</tr>
<tr>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Pa</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Pt</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Sa</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Ça</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Pe</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Cu</strong></td>
<td align="center" bgcolor="#999999" style="color:#FFFFFF"><strong>Ct</strong></td>
</tr>

Şimdi takvimimiz için düzgün tarihleri ayarlayalım. Tarihlerin sayı karşılıklarını girerek bu işi kolayca halledebiliriz. Seçili ayın günlerinin sayısını ve ayın ilk gününün sayısal karşılıklarını alacağız  (Pazar için 0 olmak üzere 6 Cumartesi) . Bütün bu fonksiyonlar php manüelinde açıklanmaktadır. Tarihleri çıkaracak olan döngümüz sıfırda başlıyor çünkü haftanın günleri 0 (pazar) dan başlıyor. Ayın ilk gününün dengi artı günlerin sayısı boyunca döngü yapar. Her hafta için yeni bir sıra yazdırmalıyız. Bir haftadaki günlerin sayısı olan 7′yi mod kabul ediyoruz ve sayıların bu mod sisteminde değerlerini kontrol ediyoruz. Eğer sıfıra eşitse haftanın başlangıcı oluyor ve açık sıra tagi <tr> yazdırıyoruz, eğer haftanın sonu ise 6; bu hafta için kapalı sıra tagi </tr> yazdırıyoruz. Yapmamız gereken yazdırdığımız günün cumartesiden önce olup olmadığını kontrol etmek. Bu durumda boş tag yazdırıyoruz. Aksi durumda tarihi yazdırmamız gerek. Bunu cumartesiyi çıkararak yapıyoruz. Bir eklemek gerekiyor çünkü tarihlerin 0 dan başlamasını istemeyiz.

<?php
$zaman = mktime(0,0,0,$ay,1,$yil);
$maxgun    = date("t",$zaman);
$buay = getdate ($zaman);
$ilkgun  = $buay['wday'];

for ($i=0; $i<($maxgun+$ilkgun); $i++) {
if(($i % 7) == 0 ) echo "<tr>\n";
if($i < $ilkgun) echo "<td style=\"color:#FFFFFF\"></td>\n";
else echo "<td align='center' valign='middle' height='20px' style=\"color:#FFFFFF\">". ($i - $ilkgun + 1) . "</td>\n";
if(($i % 7) == 6 ) echo "</tr>\n";
}
?>

Şimdi son adımı yazıp takvimi bitiriyoruz.

</table>
</td>
</tr>
</table>

Bu yazıda anlatılan takvim örneğine burdan bakabilirsiniz.

1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 4,33 out of 5)
Loading ... Loading ...
:, , , , ,
11 yorum var:
  1. Murat Ersöz

    Öncelikle teşekkürler kod için fakat bir sorum olacak.

    Geri ve İleri tuşları yerine selectbox ile seçeceğimiz bi aya gitmesini nasıl sağlayabiliriz ?

  2. admin

    İlgin için teşekkür ederim ben de.

    Tablonun üst kısmını selectbox yapacaksan en tepedeki önceki ve sonraki ay yıl hesaplamalarına gerek kalmayacağı için o kısmı kaldırırsın.
    Okların olduğu yere ay ve yıl seçtireceğin selectboxların olduğu bir form eklersin. Birde submit butonu koyduğunda form metoduna göre get veya post ile tekrar ay ve yıl değerlerini alarak çalıştırabilirsin.
    Kolay gelsin.

  3. Murat Ersöz

    1
    2
    3
    4

    bu şekilde selectboxu oluşturuyorum bunda herhangi bi sorun yok html kısmı tamam fakat php kısmında POST olayını beceremiyorum.

    <?php
    if(isset($_POST['dolduramadim']))
    {
    echo “Ay : ” . $_POST['dolduramadim'] .
    “”;
    }
    ?>

    dolduramadim kisimlarini “aysec” olarak denedim olmadı. $ay olarak doldurdum olmadı. bu kısımda takıldım POST olayında yardımcı olabilirseniz çok sevinirim. Teşekkürler.

  4. Murat Ersöz

    “aysec” dediğim selectbox’a atadığım isim yukarda html ile olan kısmıda yazmıştım ama o kısım gözükmemiş. Zaten selectbox ile ayları yılları vs. oluşturabiliyorum fakat dediğim gibi POST olayında bi yerlerde eksiğim var.

  5. admin

    selectbox etiketinde name kısmına ne kullandıysan post kısmında onu çağırman gerekiyor yani örnek vermek gerekirse

    select name=”aysec”

    $ay = $_POST['aysec']

    şeklinde

  6. Murat Ersöz

    Çok teşekkür ederim. Sonunda halledebildim.

  7. Efsane

    YA TEŞEKKÜR ETMEDEN GEÇEMEDİM. ALLAH RAZI OLSUN.

  8. ismail

    Takvimi Türçe formatına çevirmek için kodun ilgili for döngüsünü

    for ($i=1; $i<($maxgun+$ilkgun); $i++) {
    if(($i % 7) == 1 ) echo "\n”;
    if($i < $ilkgun) echo "\n”;
    else echo “”. ($i – $ilkgun + 1) . “\n”;
    if(($i % 7) == 0 ) echo “\n”;
    }

    şeklinde düzenlerseniz Günler pazatesien başlamış oluyor.

    günler satırınıda şu şekilde yapmak gerekiyor

    Pt
    Sa
    Ça
    Pe
    Cu
    Ct
    Pa

  9. kartal

    Bu takvimde şuan hangi tarihte olsugumunu nasıl gösterttire biliriz acaba ayın kaçı oldugu nu göstermiyor

  10. vedat

    evet hangi günde olduğunu göstermek için ne yazmamız gerekiyor

  11. cem

    türkçe takvimin eksizsiz çalışır hali. önceki yorumda eğer ayın 1. günü pazar ise sorun çıkartıyordu. uğraştım düzelttim.

    <?php
    $zaman = mktime(0,0,0,$ay,1,$yil);
    $maxgun = date("t",$zaman);
    $buay = getdate ($zaman);
    echo $ilkgun = $buay['wday'];

    if ($ilkgun == 0) $ilkgun = 7;

    for ($i=1; $i<($maxgun+$ilkgun); $i++) {

    if(($i % 7) == 1) echo '’;
    if($i < $ilkgun) echo '’;
    else echo ”.($i – $ilkgun + 1).”;

    if(($i % 7) == 0 ) echo ”;
    }

    ?>

Yanıtla

İsim

Mail

Websitesi    

*

Bağlantılar!

Kendi projelerimiz ve arkadaşlarımızın projeleri...