Support http://amicus.ba with small donation

PHP kalendarPHP kalendar skripta, verzija 1.9.a. sa prikazom događaja iz MySQL baze je PHP kalendar koji je moguće prikazati direktno ili uključiti u web stranicu.

Na slici lijevo je primjer kalendara sa prikazanim događajima. Ovaj primjer možete pogledati OVDJE.

Jezgro PHP kalendara je stara PHP skripta koju sam proširio, doradio i preveo na Bosanski jezik, tako da zasluge idu i za phpjabbers koji su ovu skriptu dali besplatno. Originalnu skriptu možete preuzeti OVDJE. Budući da nije baš funkcionisala, odlučio sam da je doradim.

Napomena: Skriptu sam popravio tako da koristi MySQLi funkcije koje zahtijevaju MySQL verzija 4.1.13. ili noviji.

Jezgro kalendara čine sljedeća četiri file-a:

calendar.php
calendar.js
events.php
calendar.css

Prvi file, calendar.php, je osnovna skripta za prikaz kalendara. Ovu skriptu nije potrebno mijenjati, osim ako ćelite prevesti imena mjeseci i dana u sedmici na neki drugi jezik (trenutno je to Bosanski jezik).

File calendar.js pokreće ajax pozive za prikaz kalendara za mjesec koji korisnik izabere.

Skripta events.php čita događaje iz MySQL baze iz tabele tblKalendar (ako ste ih ručno unijeli u bazu).

Ako želite mijenjati izgled kalendara, pravo mjesto za to je calendar.css. U ovom CSS-u su sva podešenja prikaza kao što su veličine fonta, boje kalendara i polja sa unesenim događajima i slično.

Pored navedena četiri dokumenta, kalendar sadrži i sljedeće dokumente:

konekcija.php
tblKalendar.sql
index.php
ProcitajMe.txt

Jako bitan je i file konekcija.php koji sadrži podatke za konekciju na VAŠU MySQL bazu. Prije pokretanja kalendara je potrebno upisati login podatke za MySQL bazu. Ispod je segment iz konekcija.php skripte.

$dbusername = ""; // User MySQL baze (upišite username za pristup bazi)
$dbpass = ""; // Password MySQL baze (upišite password za pristup bazi)
$dbname = ""; // Ime MySQL baze (upišite ime baze)

Unutar navodnika treba upisati odgovarajuće podatke te file konekcija.php upload-ovati u folder kalendar na svom web serveru.

Nakon toga, ulogovati se u phpMyAdmin i u bazu importovati kompletnu sql skriptu tblKalendar.sql. Time će biti kreirana tabela tblKalendar sa unesenim testnim događajima za mjesece od aprila do septembra 2015g. Stoga, ako vam u prikazanom kalendaru nijedan datum nije označen onda promijenite mjesec klikom na dvije strelice lijevo dok ne bude prikazan jedan od mjeseca za koje sql skripta sadrži testne podatke, ili sami unesite svoje podatke.

File index.php je testni dokument za prikaz kalendara. Ako u web browser, nakon upload-a foldera kalendar na root web servera, upišete swoju web adresu praćenu sa /kalendar/, npr. http://amicus.ba/kalendar, što će automatski učitati index.php. Ako ste ispravno konfigurisali file konekcija.php i imortovali sql skriptu tblKalendar.sql onda ćet dobiti kalendar kao na slici iznad.

Ako PHP kalendar želite uključiti u neki svoj projekat, onda vam index.php nije potreban. Možete ga samo iskoristiti kao primjer implementacije kalendara.

File ProcitajMe.txt sadrži osnovne smjernice za implementaciju PHP kalendara.

Kako funkcioniše kalendar?

Ako ste već odradili prije navedene korake (podešavanje login podataka u konekcija.php, import tblKalendar.sql u svoju MySQL bazu te kopiranje foldera kalendar na web server), ostaje vam još da u web browser upišete adresu swoje web stranice i iza nje /kalendar (npr. npr. http://amicus.ba/kalendar,).

Biće prikazan kalendar za trenutni mjesec sa označenim datumima za koje postoje događaji uneseni u bazu. Ispod kalendara će biti ispisani događaji za zadnji datum zadnjeg mjeseca za koji postoje događaji u bazi (to se da promijeniti).

Klikom na označen datum, iznad dugmeta Izaberi će biti ispisan selektovani datum. Klikom na dugme Izaberi će ispod kalendara biti prikazani događaji za selektovani datum.

U MySQL bazi, u tabeli tblKalendar, trebaju biti uneseni događaji u sljedećem formatu (struktura tabele je u sql skripti tblKalendar.sql):

1, '2015-04-17', '17. april', 'PHP kalendar sa događajima'

Treba obratiti pažnju da je datum unesen u formatu YYYY-mm-dd, što je u kôdu kalendara, za potrebe prikaza, konvertovano u dd-mm-YYYY format.

Tabela sadrži kolone id, datum, ime, i opis. Kolona id se automatski popunjava, tako da je, za unos novog događaja, potrebno samo upisati datum događaja (u formatu YYYY-mm-dd), ime događaja i duži opis događaja.

Pored prikaza unesenih događaja, moguće je isprogramirati izvršavanje željenih akcija (u PHP programskom jeziku) unutar file-a index.php (ili php file-a u koji ste uključili kalendar) u sklopu IF naredbe:

if(isset($_POST['formPosalji']))
{

        if (isset($_SESSION['regName']))
        {
            //Vaš kod koji će biti izvršen nakon klika na dugme Izaberi
        }

}

Kako uključiti PHP kalendar u svoj projekat?

Da bi PHP kalendar uključili u svoj projekat, potrebno je, prije <head> tag-a dodati sljedeće:

<?php
session_start();
?>

Ovaj kod će omogućiti prijem varijable regName poslate iz events.php, nakon klika na izabrani datum u kalendaru.

Prije završnog </head> tag-a potrebno je dodati sljedeće:

<?php
//Uključivanje konfiguracijskog file-a
include("konekcija.php");
?>
<link href="/calendar.css" rel="stylesheet" type="text/css" />

File konekcija.php sadrži, prije objašnjene, podatke za konekciju na bazu. File calendar.css je file koji služi za uređivanje vizuelnog prikaza kalendara.

Dalje, nakon <body> tag-a dodati kod za čitanje podataka iz baze:

<?php
//Otvaranje konekcije na bazu
$konekcija=mysqli_connect ($dbhost,$dbusername,$dbpass,$dbname) or die (mysql_error()); //Vraća se varijabla veza koja označava uspjeh konekcije

//Omogućavanje ispravnog prikaza unicode znakova iz baze
mysqli_query($konekcija, 'SET names=utf8');
mysqli_query($konekcija, 'SET character_set_client=utf8');
mysqli_query($konekcija, 'SET character_set_connection=utf8');
mysqli_query($konekcija, 'SET character_set_results=utf8');

//Provjera uspješnosti konekcije na server
if(!$konekcija)    
{
    die("Nije moguća konekcija na MySQL bazu");
}

//Provjera uspješnosti otvaranja konekcije na bazu
if ($konekcija)
{
    //Imena kolona u zaglavlju tabele (zbog prijevoda)
    $Kolone=array ("Datum","Ime događaja","Opis događaja");
    
    //Čitanje samo svih datuma iz baze
    $podaci = mysqli_query($konekcija,"SELECT datum FROM " .$tabelaKalendar) or die(mysqli_error());  
    //Inicijalizacija brojača pročitanih vrsta
    $numBrojac=0;
    
    //Čitanje vrsta iz baze
    while ($kolona = mysqli_fetch_array($podaci))
    {        
        //Kreiranje PHP niza sa pročitanim datumima iz baze
        $samoDatumi1[$numBrojac]= date('d.m.Y', strtotime($kolona[0])); //Datum

        //Povećavanje brojača pročitanih vrsta
        $numBrojac++;   
    }
    
    //Dodjela zadnjeg pročitanog datuma varijabli za prikaz podataka - $datumZaPrikaz
    $datumZaPrikaz=$samoDatumi1[$numBrojac-1];
    
    //Konverzija datuma u format Y-m-d (zbog filtriranja podataka iz baze)
    $datumZaPrikazEn=date('Y-m-d', strtotime($datumZaPrikaz));

?>  

Unutar kôda su komentari koji objašnjavaju svaki segment, tako da nema potrebe da sve objašnjavam ponovo.

U svojem projektu, vjerovatno već imate formiranu strukturu sa tabelom i pozicijama pjedinih segmenata tako da neću objašnjavati kreiranje tabele u kojoj će kalendar biti prikazan. Potrebno je samo kreirati formu sa dugmetom za pokretanje čitanja i prikaza događaja iz baze:

    <!--IZBOR DATUMA ZA PRIKAZ PODATAKA-->
    <!--Prikaz dugmeta za izbor datuma koji je selektovan u kalendaru-->
    <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
        <label for='formDatum'></label>

        <!--Dodavanje kalendara-->
        <script src="/kalendar/calendar.php"></script>
        <script src="/kalendar/events.php"></script>
        <script src="/kalendar/calendar.js"></script>
        
        <div id="Calendar"> </div>
        <div id="Events"> </div>
        <script language="javascript" src="/calendar.js"></script>
        <!--Kraj prikaza kalendara-->
        
        <input type="submit" name="formPosalji" value="Izaberi" style="font-size: 18px; />
    </form>

Time će biti prikazano dugme Izaberi a istovremeno je izvršeno i uključivanje PHP kamendara u projekta (dodavanja kalendara).

Ostalo je još da se, nakon klika na datum sa događajem u kalendaru i klika na dugme Izaberi pročitaju odgvoarajući podaci z baze pomoću sljedeće segmenta:

<?php
    if(isset($_POST['formPosalji']))
    {
        //Uzimanje datuma koji je izabran u kalendaru
        //Sprječavanje greške ako u kalendaru nije izabran datum a pritisnuto je dugme Izaberi
        if (isset($_SESSION['regName']))
        {
            $datumZaPrikaz = date('d.m.Y', strtotime($_SESSION['regName']));
        }

        $porukaGreske = "";
        
        if(empty($datumZaPrikaz))
        {
            $porukaGreske = "<li>Niste izabrali datum!</li>";
        }
        
        if($porukaGreske != "")
        {
            echo("<p>Nastala je greška:</p>\n");
            echo("<ul>" . $porukaGreske . "</ul>\n");
        }
        else
        {
            //Konverzija izabranog datuma u format Y-m-d (za filtriranje podataka iz baze)
            $datumZaPrikazEn=date('Y-m-d', strtotime($datumZaPrikaz));              
        }
    }
    
    //Čitanje podataka samo za izabrani datum
    $podaci2 = mysqli_query($konekcija, "SELECT datum, ime, opis FROM tblKalendar WHERE datum LIKE '$datumZaPrikazEn%'") or die(mysqli_error());  
    
    $brojStavki = mysqli_num_rows($podaci2);
    
    //Inicijalizacija brojača pročitanih vrsta
    $numBrojac=0;
    
    //Čitanje podataka iz baze
    while ($kolona = mysqli_fetch_array($podaci2))
    {        
        //Kreiranje nizova iz kolona baze
        //Datum
        $samoDatumi[$numBrojac]= date('d.m.Y', strtotime($kolona[0])); //Datum
                    
        //Ime događaja
        $ime[$numBrojac]= $kolona[1];
                    
        //Opis događaja
        $opis[$numBrojac]= $kolona[2];
        
        //Povećavanje brojača pročitanih vrsta
        $numBrojac++;        
    }
    
    //Kraj čitanja podataka za izabrani datum    
            
    echo "<div style ='font:18px/21px Verdana,tahoma,sans-serif;color:#ff0000'>Izabran je prikaz događaja za $datumZaPrikaz</div>";
    echo ""."<br>";        
?>

Umjesto jednostavnog ispisa poruke sa echo naredbom, možete dodasti svoj kôd po želji koji koristi varijablu $datumZaPrikaz a koja sadrži datum koji je selektovan u kalendaru.

Za formatiranje prikaza događaja iz baze upotrijebite maštu i svoje znanje.

To su koraci potrebni za uključivanje PHP kalendara u svoj projekta. Najbolje je da postojeći index.php popravite i prilagodite svojem projektu čime ćete minimizirati mogućnost nastanka greške.

Uređivanje prikaza PHP kalendara

Za uređivanje prikaza služi file calendar.css koji sadrži tag-ove sa odgovarajućim vrijednostima.

Sljedeći primjer služi za podešavanje širine kalendara:

#Calendar {
    width:300px;    
}

Moguće je mijenjati boje podloge polja sa i bez događaja, veličinu slova, boju slova... Uostalom, malo eksperimentišite pa ćete vidjeti kakav je rezultat.

Modifikacije kalendara

Prije svega, moguće je kalendar prevesti na drugi jezik. To neće biti teško, budući da ima vrlo malo teksta za prikaz.

Glavni dio je prikaz imena mjeseci u kalendaru. Ako želite prevesti imena mjeseci, onda morate prevesti sljedeću liniju u calendar.php:

//Bosanska imena za mjesece u godini
$Mjeseci=array ("Januar","Februar","Mart","April","Maj","Juni","Juli","Avgust","Septembar","Oktobar","Novembar","Decembar");

Umjesto Bosanskih imena za mjesece potrebno je upisati imena na jeziku NA koji pevodite PHP kalendar.

Pored toga, potrebno je prevesti i početna slova dana u sedmici (PUSČPSN):

<td>P</td>
<td>U</td>
<td>S</td>
<td>Č</td>
<td>P</td>
<td>S</td>
<td>N</td>

U calendar.php postoje i poruke koje vas obavještavaju o neuspjeloj konekciji na MySQL server akoje se nalaze unutar navodnika. npr.:

('Nije moguca konekcija na MySQL server.<br ><br >Molim provjerite svoje MySQL login podatke.');

Ako želite biti dosljedni, i te poruke je potrebno prevesti. Slične poruke se nalaze i u index.php kao i u events.php.

Izmijenjene php file-ove je potrebno snimiti i upload-ovati na web server. Sretno programiranje ili samo korištenje gotove skripte.

PHP kalendar je otvoren za modifikacije, izmjene i dorade. Kako sam ga ja izmijenio i nadgradio, tako možete i vi. Zamolio bih vas da svoje modifikacije objavite u komentarima ispod čklanka tako da ih i drugi mogu probati.

PHP skriptu kalendara možete preuzeti sa linka ispod: