Ndodheni ne: Guidat / JavaScript / MySQL / PHP
Projekti Lista e Detyrave me PHP, MySQL dhe jQuery

Projekti “Lista e Detyrave” me PHP, MySQL dhe jQuery

Nga më 7 August 2010 në JavaScript, MySQL, PHP me 4 Komente

Në këtë guidë do ju tregoj hapat për të ndërtuar një “Listë Detyrash” që përdor databazë MySQL për të ruajtur të dhënat dhe ofron disa funksionalitete dinamike me jQuery si shtimi i detyrave, shënimi si të mbaruara dhe anulimi i tyre.

  • Shkarko Kodin
  • Shiko Demon

Ideja për të koduar një aplikacion ku të ruaja detyrat më erdhi nga kërkesat e punës, sepse klientët shpesh më kërkonin në telefon ndryshime/shtime në faqet e tyre dhe ndonjëherë më qëllonte mos t’i mbaja mend të gjitha. Pasi morra Mac, gjeta “The Hit List“, një aplikacion që ofronte më tepër se çdo tentativë që mund të bëja unë, prandaj e lashë si projekt. Tashmë ju riktheva sepse mu duk interesant të përfshihet në një guidë, sepse është i thjeshtë për tu ndërtuar, por përmban disa funksionalitete nga të cilat mund të mësoni.

Për ta nisur mbarë, më duhet t’ju them se aplikacioni varet tërësisht nga Javascript (me jQuery) dhe nuk punon tek përdoruesit që e kanë të çaktivizuar. E pranoj, jam treguar dembel dhe nuk doja ta komplikoja kodin më tepër. Ndërsa disa mund të argumentojnë se Javascript është tashmë standart dhe shumë pak njerëz e kanë të çaktivizuar, përsëri s’mund t’ja lini gjërat në dorë rastësisë. Gjithmonë ofroni përmbajtje dhe funksionalitet alternativ ndaj atyre Javascript.

Kujt i shërben guida

Ndërsa të gjithë mund të mësojnë diçka nga kjo guidë, ata që do mund të përfitojnë më tepër janë programuesit me eksperiencë. Kodi PHP dhe ai Javascript janë të një kompleksiteti normal, por sidoqoftë ju duhet të njihni mirë ambjentin dhe të orientoheni pa problem me teknologjitë në fjalë që të përfitoni maksimalisht. Guida do i shërbejë edhe atyre që njohin mirë PHP por jo Javascript, sepse do ju paraqesë fuqinë dhe thjeshtësinë e jQuery: selektimin e elementëve HTML, marrjen dhe vendosjen e atributeve, shtimi dhe heqja dinamike e klasave, thërritje AJAX, etj.

Disa fjalë rreth organizimit të kodit

E gjithë logjika e aplikacionit ndodhet në 4 skedarë:

  • index.php => ndodhet kodi bazë HTML dhe krijimi i objektit.
  • klasa/detyrat.php => klasa e detyrave me funksione për të listuar, shtuar dhe ndryshuar gjendjen e detyrave.
  • rifresko.php => kodi PHP që thërritet me AJAX për të shtuar dhe ndryshuar gjendjen e detyrave.
  • js/logjika.js => kodi Javascript (jQuery) që krijon funksionalitetet nga kahu-klientit.

Për secilin nga këto skedarë do krijoj nga një seksion ku do ju shpjegoj logjikën e funksionimit dhe kodin e komentuar.

Tabela e Detyrave

Kam krijuar një tabelë në MySQL të quajtur “projekti_detyrat” në të cilën ruaj informacionet specifike të detyrave. Asgjë e komplikuar, vetëm ndiqni imazhin më poshtë për emrat e kolonave dhe tipin e të dhënave.

Tabela në MySQL

Kodi bazë

Në index nuk kemi asgjë të veçantë. Ashtu si çdo faqe, krijohet struktura themelore HTML dhe përfshihen skedarët CSS dhe Javascript. Kodi më poshtë është pjesa ku kam shkruar kodin HTML të inputit e butonit dhe kam thërritur një funksion për të listuar detyrat.

 HTML |  Kopjo Kodin |? 
1
<div id="mbajtesi">
2
     <div id="shkruaj">
3
          <input type="text" name="shto-detyre" id="shto-detyre" />
4
          <button type="button" id="shto-detyre-butoni">Shto Detyre</button>
5
     </div>
6
     <div id="mbajtesi-detyrave">
7
          <?php echo $detyrat->listoDetyrat(); ?>
8
     </div>
9
</div>

Për ta bërë gjithçka të shfaqet bukur, kam shkruar disa rregulla CSS të cilat nuk kam ndërmend ti përfshij në këtë guidë, por mund t’i shihni duke shkarkuar kodin në fillim të faqes.

Klasa e detyrave

Mua më pëlqen të kodoj me objekte dhe e ruaj këtë praktikë edhe në projekte të vogla. Në këtë rast kam krijuar një klasë të vogël që ka vetëm 4 variabla private, __construct() dhe 3 funksione. Pra një klasë shumë e vogël dhe ku kodimi me objekte mund edhe të ishte mënjanuar. Megjithatë, nëse ju lind nevoja ta zgjeroni e ta përdorni për projekte tuajat, implementimi është fare i thjeshtë.

 PHP |  Kopjo Kodin |? 
001
<?php
002
class Detyrat{
003
     //Variablat me te dhenat e databazes.
004
     private $db_host = 'localhost';
005
     private $db_emri = 'root';
006
     private $db_fjalekalimi = '';
007
     private $db_databaza = 'test';
008
 
009
     //Variabel per te ruajtur emrin e tabeles. Nese do me duhet ta
010
     //ndryshoj me vone, thjeshte ndryshoj variablen dhe jo te gjitha
011
     //queryt qe do bej.
012
     private $tb_detyrat = 'projekti_detyrat';
013
 
014
     //Funksioni __construct() therritet ne momentin qe klasa krijohet me fjalen
015
     //kyce 'new'. Ne kete rast kam bere lidhjen me databazen.
016
     function __construct(){
017
          $lidhja = mysql_connect($this->db_host, $this->db_emri, $this->db_fjalekalimi);
018
          mysql_select_db($this->db_databaza);
019
     }
020
 
021
     //Funksion qe liston detyrat.
022
     public function listoDetyrat(){
023
          //Variablat $html do mbaje html-ne e gjeneruar nga funksioni.
024
          $html = '';
025
          //Bejme nje query per te marre te gjitha detyrat nga databaza te
026
          //renditura sipas dates ne rend zbrites (data me e re ne krye).
027
          $rezultatet = mysql_query("SELECT id, titulli, data, mbaruar, anuluar FROM $this->tb_detyrat ORDER BY data DESC");
028
          //mysql_num_rows() kthen numrin e rreshtave te zgjedhur nga query.
029
          $numri_rezultateve = mysql_num_rows($rezultatet);
030
          //$numeruesin do e perdor per te pare nese rreshti aktual ne loop-en while()
031
          //me poshte eshte i barabarte me numrin e rezultateve te kthyera.
032
          $numeruesi = 1;
033
          //Nese $numri_rezultateve nuk eshte 0 (qe perkthehet edhe si FALSE),
034
          //do te thote se kemi te pakten nje detyre ne databaze.
035
          if($numri_rezultateve){
036
               //Bejme loop ne rreshtat e kthyer.
037
               while($vlerat = mysql_fetch_array($rezultatet)){
038
                    //Tre variablat jane per te ruajtur disa klasa CSS qe do te shtohen dinamikisht,
039
                    //per te shenuar detyrat si te mbaruara dhe per ti caktivizuar checkbox-et.
040
                    $shto_klase = array();
041
                    $mbaruar = '';
042
                    $caktivizuar = '';
043
 
044
                    //Data dhe ora ne MySQL ruhet ne formatin YYY-MM-DD HH:MM:SS. Ne na duhet
045
                    //ne formatin DD/MM/YY HH:MM:SS. explode() i pare e ndan daten dhe oren sipas karakterit " "
046
                    //duke kthyer nje vektor me 2 element (data dhe ora) te cilet kapen nga list().
047
                    //explode() i dyte e ndan daten sipas karakterit "-" duke kthyer nje vektor me 3 elemente
048
                    //(viti, muaji, dita) qe kapen nga list(). Ne fund i bashkoj variablat per te marre daten
049
                    //ne formatin qe dua.
050
                    list($data, $koha) = explode(' ', $vlerat['data']);
051
                    list($viti, $muaji, $dita) = explode('-', $data);
052
                    $data = "$dita/$muaji/$viti $koha";
053
 
054
                    //Nese $numeruesi eshte sa numri i rezultateve te kthyera, atehere jemi ne rreshtin e fundit.
055
                    //Shtojme klasen "pa-kontur" ne vektor e cila heq konturin "border-bottom". Thjeshte nje prekje
056
                    //e kendshme vizuale.
057
                    if($numeruesi == $numri_rezultateve){ $shto_klase[] = 'pa-kontur'; }
058
                    //Nese detyra eshte e anuluar, shtojme klasen "anuluar" ne vektor dhe variables $caktivizuar
059
                    //i japim vlere atributin HTML qe caktivizon checkbox-in.
060
                    if($vlerat['anuluar'] == 1){ $shto_klase[] = 'anuluar'; $caktivizuar = 'disabled="disabled"'; }
061
                    //Nese detyra eshte shenuar si e mbaruar, variables $mbaruar i japim vlere atributin HTML qe e
062
                    //shenon (me tick) checkbox-in.
063
                    if($vlerat['mbaruar'] == 1){ $mbaruar = 'checked="chkecked"'; }
064
 
065
                    //Ndertojme kodin HTML me atributet dhe vlerat e duhura. Div-it mbajtes i vendosim klasat qe
066
                    //ndodhen ne vektor me implode (qe bashkon elementet e vektorit ne tekst duke i ndare me nje
067
                    //karakter te caktuar) dhe i japim nje "id" sa id-ja e rreshtit ne databaza. ID-ja do te perdoret
068
                    //ne kodin Javascript per te kuptuar cfare rreshti eshte.
069
                    $html .= '<div id="' . $vlerat['id'] . '">';
070
                    //Checkbox-it i vendosim variablat $mbaruar dhe $caktivizuar qe jane respektivisht shenimi (tick)
071
                    //dhe caktivizimi.
072
                    $html .= '<input type="checkbox" ' . $mbaruar . ' ' . $caktivizuar . ' /> ';
073
                    $html .= '<span>' . $data . '</span>';
074
                    $html .= '<p>' . stripslashes($vlerat['titulli']) . '</p>';
075
                    //Ky eshte butoni i anulimit te detyres.
076
                    $html .= '<a href="#"><img src="images/fshi.png" /></a>';
077
                    $html .= '</div>';
078
 
079
                    //Numeruesi inkrementohet me 1 per cdo loop te while().
080
                    $numeruesi++;
081
               }
082
               //Kthejme kodin $html qe kemi gjeneruar.
083
               return $html;
084
          //Ky else egzekutohet nese ne databaze nuk ka asnje detyre.
085
          } else{
086
               return 'Nuk keni shtuar akoma asnje detyre. Filloni te shtoni tani!';
087
          }
088
     }
089
 
090
     //Funksion per te shtuar detyre. I vetmi parameter eshte titulli.
091
     public function shtoDetyre($titulli){
092
          //Vendosim timezone-en e Shqiperise ne menyre qe ora mos te varet
093
          //nga ora e serverit.
094
          date_default_timezone_set('Europe/Berlin');
095
          //Pastrojme titullin nga karakteret qe mund te prishin query-n.
096
          $titulli = mysql_real_escape_string($titulli);
097
          //Krijojme daten dhe oren ne formatin e MySQL.
098
          $data = date('Y-m-d H:i:s');
099
          //Per siguri kontrollojme qe titulli te mos jete bosh.
100
          if($titulli != ''){
101
               //Shtojme detyren ne databaze.
102
               $rezultatet = mysql_query("INSERT INTO $this->tb_detyrat (titulli, data) VALUES ('$titulli', '$data')");
103
          }
104
     }
105
 
106
     //Funkion per te ndryshuar gjendjen e mbarimit dhe anulumit. Parametrat jane
107
     //ID e rreshtit dhe tipi i gjendjes (anulo ose mbaro).
108
     public function ndryshoGjendjen($id, $tipi){
109
          //Per siguri e kthejme ID-ne ne integer (numer).
110
          $id = (int) $id;
111
          //Nese tipi eshte 'anulo', atehere vendosim fushen 'anuluar' ne 1 per rreshtin
112
          //me ID-ne e dhene.
113
          if($tipi == 'anulo'){
114
               $rezultatet = mysql_query("UPDATE $this->tb_detyrat SET anuluar = 1 WHERE id=$id");
115
               //Nese tipi eshte 'mbaro' atehere invertojme vleren e fushes 'mbaruar'. Pjesa "mbaruar = NOT mbaruar"
116
               //ben invertimin. Psh, nese mbaruar eshte nje, shprehja kthehet ne: mbaruar = NOT 1 => mbaruar = 0.
117
          } elseif($tipi == 'mbaro'){
118
               $rezultatet = mysql_query("UPDATE $this->tb_detyrat SET mbaruar = NOT mbaruar WHERE id=$id");
119
          }
120
     }
121
}
122
?>

Guida do të zgjatej pambarimisht nëse do ju shpjegoja çfarë bën çdo rresht, prandaj duhet të kënaqeni me komentimin, të cilin jam munduar ta bëj sa më të qartë. Për t’a thënë shkurt, klasa ka 3 funksione, ku më kompeksi është ai i listimit të detyrave. Në të, marr rreshtat e detyrave nga databaza dhe gjeneroj kod HTML për ti vendosur si duhet në faqe. Kam përdorur një teknikë të trashëguar nga Javascript, atë të shtimit të klasave për të përcaktuar gjëndje të ndryshme për detyrat (e plotësuar, anuluar, etj). Në vend që të bëja zinxhire me if() dhe ti lidhja kodet HTML në mënyra totalisht të pa-kuptueshme, kam krijuar disa variabla të cilave u shtohen emra klasash CSS për gjendje të ndryshme. Në fund i bashkoj bashkë dhe i vendos në pozicionet e duhura të kodit HTML dhe dal me një kod të lexueshëm e të thjeshtë për t’u mirëmbajtur. Dy funksionet e tjera, ai i shtimit dhe ndryshimit të gjendjes duhet të jenë të lehtë për tu kuptuar.

Kodi HTML që gjenerohet nga funksioni listoDetyrat() është si më poshtë. Elementët stilohen dhe pozicionohen me CSS për t’i bërë më interesant.

 HTML |  Kopjo Kodin |? 
01
<!-- div me klase "detyrat" dhe id sa ID-ja e rreshtit ne databaze -->
02
<div class="detyrat" id="49">
03
     <!-- checkbox-i ku zgjidhet nese eshte mbaruar apo jo detyra -->
04
     <input type="checkbox" checked="chkecked"  />
05
     <!-- data e detyres -->
06
     <span>06/08/2010 18:40:54</span>
07
     <!-- titulli i detyres -->
08
     <p>Mendo nje guide interesante per Feniksi.com</p>
09
     <!-- butoni qe anulon detyren -->
10
     <a href="#"><img src="images/fshi.png" /></a>
11
</div>

Kodi i rifreskimit

Ky është një skedar që krijon një “API” eksluzivisht për thërritjet AJAX dhe nuk del asnjëherë në skenë sepse punon në sfond. Përmes disa parametrave që kalohen si variabla GET (të cilat dërgohen nga kodi Javascript; më pas për të), përcaktohet veprimi që do të kryhet në sfond. Kodi është i thjeshtë e s’duhet t’ju lërë pa qartësi.

 PHP |  Kopjo Kodin |? 
01
<?php
02
include('klasa/detyrat.php');
03
$detyrat = new Detyrat;
04
//Nese jane vene variablat GET 'id' dhe 'veprimi atehere
05
//therritja AJAX vjen per te ndryshuar gjendjen e mbarimit ose anulimit.
06
if(isset($_GET['id']) && isset($_GET['veprimi'])){
07
     $id = $_GET['id'];
08
     $veprimi = $_GET['veprimi'];
09
     //Kontrollojme nese veprimi eshte nje nga 2 alternativat e mundshme
10
     //dhe therrasim funksionin.
11
     if($veprimi == 'mbaro' || $veprimi == 'anulo'){
12
          $detyrat->ndryshoGjendjen($id, $veprimi);
13
     }
14
//Nese eshte vendosur titulli atehere therritja AJAX vjen per
15
//te shtuar nje detyre te re.
16
} elseif(isset($_GET['titulli'])){
17
     //urldecode() e kthen titullin ne nje tekst normal, pa karakteret
18
     //e futura nga URLEncode() ne kodin Javascript.
19
     $titulli = urldecode($_GET['titulli']);
20
     //Nese titulli nuk eshte bosh, therrasim funksionin e shtimit te detyres
21
     //dhe ate te listimit te detyrave, ne menyre qe detyrat te rifreskohen.
22
     if($titulli != ''){
23
          $detyrat->shtoDetyre($titulli);
24
          echo $detyrat->listoDetyrat();
25
     }
26
}
27
?>

Si mund ta shikoni, nuk kam bërë asgjë më shumë se sa kontrollimi i variablave GET dhe thërritja e funksionit të duhur nga klasa e detyrave. Praktikisht është një ndërfaqe midis thërritjeve AJAX dhe egzekutimit të funksioneve PHP.

Logjika jQuery

jQuery është ndër të paktat teknologji që unë njoh që më habit sa herë kodoj me të. Gjithmonë zbuloj diçka të re dhe më përforëcohet mendimi që ndodhet në majën e librarive/framework, e jo vetëm për Javascript. Ndërsa librari të tjera mundohen të lehtësojnë funksionalitete dhe të ofrojnë pattern-a për kodim të organizuar që [për mendimin tim totalisht personal] nuk janë asgjë më tepër se sa një dozë e tepërt kompleksiteti, jQuery i shton Javascript një shtresë aq të fuqishme sa e bën të duket një gjuhë komplet e re. Ju kujtoj që Javascript ka qenë thjeshtë një gjuhë skriptimi nga kahu-klientit për të krijuar ndonjë efekt të lezetshëm për kohën dhe vetëm si pasojë e librarive ka aksesueshmërinë dhe fuqinë e sotshme për të qenë e pandarë në çdo faqe interaktive. Nëse nuk ju ka pëlqyer ideologjia e Javascript më parë, jepini një shans jQuery dhe ju siguroj që do ndryshoni mendim.

Të kthehemi në realitet! Kodi Javascript që unë kam shkruar përdor disa funksione të jQuery për të zgjedhur relativisht elementë (pra jo zgjedhje direkte, por duke përdorur funksione si parent() apo children()), për të marrë dhe modifikuar vlerat e atributëve HTML dhe për të bërë disa thërritje AJAX. Gjithçka është e thjeshtë dhe intuitive, por thërritjet AJAX janë idiotisht të lehta. Me vetëm një funksion mund të thërritet një url me parametra GET dhe të merret rezultati i kthyer. Mund të shtohen gjithashtu edhe evente nëse thërritja është e sukseshme, kur nis apo përfundon për të bërë përshembull njoftues statusi (në pritje, përfundoi, etj). Këto të fundit mua nuk mu nevojitën, por hidhini një sy dokumentimit të jQuery.

Një gjë që doja t’ju sqaroja është funksioni live(). Unë e kam mësuar këtë “the hard way” kur nisa të merrem me jQuery, prandaj po ju kursej pak dhembje koke. Normalisht, eventet e elementëve të caktuar HTML funksionojnë për elementë të krijuar tashmë në DOM (Document Object Model). Nëse eventet i përkasin elementëve të krijuar dinamikisht apo rezultateve të marra me AJAX, kodi nuk do funksionojë. Kjo është sjellje e Javascript, por për fat të mirë jQuery ofron alternativa. Në vend që të shkruajmë $(‘elementi’).click(), shkruajmë $(‘elementi’).live(‘click’). Funksioni live() i krijon eventet për elementët egzistues dhe për ato që do të krijohen në të ardhmen. Zgjidhje e thjeshtë, pa telashe dhe që funksionon për mrekulli.

E fundit, kam përdorur një plugin për jQuery që quhet urlencode”. E vetmja gjë që plugini bën (dhe që jQuery duhet ta kishte në bazën e tij) është t’i enkodojë tekstet dhe t’i bëjë gati për tu përdorur si variabla GET dhe unë e kam përdorur për të enkoduar titullin e detyrës kur shtohet. Të njëjtën gjë bën funksioni urlencode() në PHP, ndërsa urldecode() – prapë në PHP – bën të kundërtën; i heq karakteret e enkoduara dhe e kthen tekstin në normalitet.

 Javascript |  Kopjo Kodin |? 
01
$(document).ready(function(){
02
     //Eventi 'click' i checkbox-it te detyrave. Marrim id-ne e rreshtit
03
     //permes atributit "id" te div-it meme dhe bejme nje thirrje AJAX
04
     //ku kalojme id-ne dhe veprimin 'mbaro'. parent() zgjedh elementin
05
     //meme te inputit ndersa attr() merr vleren e nje atributi.
06
     $('div.detyrat input').live('click', function(){
07
          var id = $(this).parent().attr('id');
08
          $.get('rifresko.php?id=' + id + '&veprimi=mbaro');
09
     });
10
 
11
     //Eventi mouse-i siper dhe mouse-i jashte per div-in e detyrave. Nese vendoset
12
     //mouse-i siper, shfaqim imazhin e anulumit, ndersa per mouse-i jashte e heqim
13
     //imazhin. Kam kontrolluar me hasClass() nese div-i ka klasen 'anuluar' ne menyre
14
     //qe mos ta shfaq imazhin per detyra te anuluar. children() zgjedh element femije
15
     //te div-it, ndersa fadeIn dhe fadeOut bejne shfaqje dhe zhdukje te animuar.
16
     $('div.detyrat').live('hover', function(eventi){
17
          if(eventi.type == 'mouseover'){
18
               if(!$(this).hasClass('anuluar')){
19
                    $(this).children('a').fadeIn(150);
20
               }
21
          } else{
22
               $(this).children('a').fadeOut(150);
23
          }
24
     });
25
 
26
     //Eventi 'click' i butonit te anulimit. Kam marre vleren e atributit "id" te
27
     //elementit meme, i kam shtuar klasen 'anuluar' elementit meme me addClass(),
28
     //i kam shtuar nje atribut 'disabled' checkbox-it dhe ne fund kam bere nje
29
     //therritje AJAX me veprimin 'anulo'. Kam shkruar gjithashtu "return false"
30
     //qe te caktivizoj linkun nga veprimi normal.
31
     $('div.detyrat a').live('click', function(){
32
          var id = $(this).parent().attr('id');
33
          $(this).parent().addClass('anuluar');
34
          $(this).parent().children('input').attr('disabled', 'disabled');
35
          $.get('rifresko.php?id=' + id + '&veprimi=anulo');
36
          return false;
37
     });
38
 
39
     //Eventi 'click' i butonit te shtimit te detyrave. Kam kontrolluar fillimisht nese vlera e inputit
40
     //nuk eshte bosh. Me pas e kam bere inputin bosh me attr(), e kam enkoduar titullin (me nje plugin te
41
     //jQuery qe quhet "urlencode" dhe ne fund kam bere therritje AJAX qe te shtoj detyren dhe rezultatin e kthyer
42
     //(lista e detyrave e rifreskuar) e fus ne div-in mbajtes te detyrave.
43
     $('button#shto-detyre-butoni').click(function(){
44
          var elementi = $('input#shto-detyre');
45
          var titulli = elementi.val();
46
          if(titulli != ''){
47
               elementi.attr('value', '');
48
               titulli = $.URLEncode(titulli);
49
               $.get('rifresko.php?titulli=' + titulli, function(kthimi) {
50
                    $('div#mbajtesi-detyrave').html(kthimi);
51
               });
52
          }
53
     });
54
 
55
     //Nje funksion i cili e shton detyren nese shtypet butoni "enter" ne input. Butoni
56
     //"enter" ka kodin 13 dhe kur shtypet, kam therritur funksionin "click" te percaktuar
57
     //me siper.
58
     $('input#shto-detyre').keypress(function(eventi){
59
          if(eventi.keyCode == 13){
60
               $('button#shto-detyre-butoni').click();
61
          }
62
     });
63
});

Përfundimi

Aplikacioni që kam krijuar, duke përfshirë kodin PHP dhe Javascript është i një kompleksiteti që duhet ti pëlqejë programuesëve më një farë eksperience. Në jetën reale një aplikacion i tillë mund të mos ishte edhe aq i nevojshëm, por funksionalitetet që ai ofron, sidomos ato Javascript duhet të jenë interesante për tu implementuar në projektet tuaja. Sidomos, shërben për t’ju prezantuar me jQuery, AJAX dhe kombinimin e Javascript me PHP.

Shpresoj t’ju ketë pëlqyer ky mësim/aplikacion dhe të përfitoni sa më shumë prej tij. Mos hezitoni të komentoni për çdo koment, pyetje apo nëse ndonjë gabim në funksionalitetet e Listës së Detyrave.

Mësim të mbarë.

Fadion Dashi

Fadioni është prej shumë vitesh i apasionuar pas internetit dhe punon freelance si dizenjues dhe programues per web. Kur nuk është duke punuar, i pëlqen të shkruajë, të fotografojë, të admirojë koleskionin e tij të aparatëve fotografikë manualë dhe të kalojë kohë të bukur me miqtë.

4 Komente

  1. Niaxo says:

    A mun te ma shpjegoni “kodin” e meposhtem?
    $this->xxxx
    Cfare do te thote $this -> e kam pare ne shume scripte por nuk e kam kuptuar! :(
    Tutorial shume i mire ky, Faleminderit!

  2. Fadion Dashi says:

    $this perdoret per t’ju referuar vete objektit ku ndodhet variabla apo metoda (funksioni). Funksionet e nje klase jane te lokalizuar ne resurset qe perdorin, prandaj duhet $this ti instruktoje se po therritet nje variabel globale e klases apo nje funksion tjeter brenda saj.

    Variablat globale ne nje klase krijohen jashte cdo funksioni, pra direkt ne definicionin e klases. Ndersa funksionet krijohen normalisht.

    Shpresoj ta kesh kuptuar idene.

  3. Banago says:

    Para se të lexoja komentin tënd për “this->”, e kisha idenë çfarë ishte – tani e humba fillin :D

    Projekt shumë interesant. Po të isha në vendin tënd do vazhdoja ta zhvilloja. Flm për këto mësime kam të mira!

  4. Fadion Dashi says:

    Perdorimi i $this nuk eshte asgje tjeter pervec se percaktimi i vete klases ne nje variabel apo metode (funksion) qe therritet. Ne kodin me siper, variablat jane percaktuar jashte funksioneve te tjere, qe i ben ato globale dhe te aksesueshme brenda cdo funksioni tjeter. Thjeshte sintakse.

    E kam menduar ta zhvilloj sepse kam nje lloj “lidhjeje” ndaj ketij projekti qe ka nisur disa kohe me pare kur me duhej per punet e mia. Ajo qe kam menduar eshte te ndertoj nje sistem multi-user, me suport shume gjuhesh, shabllonesh dhe ta ofroj open-source. Nuk e di interesin, por pse jo… :)

Shkruaj një Koment