Atunci cand ai un blog, cu timpul, numarul articolelor creste si devine din ce in ce mai greu unui vizitator sa se orienteze si sa gaseasca ceea ce il intereseaza. O sa spuneti ca, nu-i nimc deoarece creste numarul de pagini vizitate. Practic nu este asa, deoarece vizitatorii nu vor sa caute ci vor sa gaseaca repede si daca un blog nu le ofera instrumentele pentru gasirea rapida a unui articol, cauta in alta parte deoarece sunt grabiti sa-si rezolve problema.
De aceea la un blog trebuie sa gasesti un un camp pentru textul de cautare cu un buton Search, o impartire a articolelor in categorii cu filtre de afisare dupa categorii, dar si un meniu de navigare in arhiva blogului, structurat pe ani, luni si numarul corespunzator de articole. Acest meniu trebuie sa prezinte arhiva intr-o ordine descrescatoare dupa ani si tot descrescatoare dupa luni.
Acestea sunt lucruri pe care le stie toata lumea. De ce sa ma mai obosesc sa scriu un articol despre asta? Raspunsul este simplu: am fost intrebat de un elev cum se face si la intrebarea mea daca a cautat pe net, mi-a raspuns ca da, dar nu a gasit mare lucru, iar cand a gasit nu era suficient de explicit. Aceasta m-a facut sa scriu acest articol si sa incerc sa dau o solutie completa problemei.
Formatul de afisare al datei in baza de date mySQL cu articolele unui blog este afisata, de cele mai multe ori, in forma:
2012-03-19 12:45:23;
in ordinea an, luna, zi, ora, minute, secunde.
Problema
Sa afisam in blogul nostru un meniu de navigare in care sa se poata selecta pentru afisare doar articolele publicate intr-o anumita luna a unui anumit an, de exemplu august 2011 si in paranteza sa fie scrise si numarul de articole corespunzator.
Solutie
Se construieste interogarea bazei de date:
$result = mysql_query("SELECT year(date) as year, month(date) as month, count(*) as count FROM blog GROUP BY year, month ORDER BY year DESC, month DESC");
unde, date este data la care a fost publicat articolul, de forma celei amintite mai sus iar blog este numele tabelei mySQL care depoziteaza articolele.
Dupa aceasta se construieste bucla care va citi toate articolele si care va conduce la afisarea continutului arhivei, structurat dupa cum am spus mai devreme.
<? while ($row = mysql_fetch_assoc($result)){ foreach ($row as $element){ switch($i){ case 0: $year=$element; break; case 1: $month=$element; $long_month=date("F",mktime(0, 0, 0, $month)); break; case 2: $count=$element; break; } $i++; } echo '<a href="pagina.php?year='.$year.'&month='.$month.'">'.$long_month.' '.$year.'</a> ('.$count.')'; } ?>
Se va obtine, in locul dorit, urmatorul rezultat:
Explicatii
In fiecare bucla a interogarii va fi furnizata, pentru toate articolele din acelasi an si luna din tabela mySQL, cate o matrice ce contine (an,luna,numar articole). Bucla foreach citeste elementele acestei matrici si le afiseaza intr-un link care trimite prin metoda GET anul si luna fisierului pagina.php care afiseaza articolele filtrate dupa an si luna.
Observatii
Nu emit pretentia ca ar fi singura modalitate de abordare sau ca ar fi cea mai buna, dar atunci cand esti presat de un termen de finalizare, te poate ajuta.
Solutia poate fi folosita fara nicio restrictie si fara consecinte negative.
Multe multumiri...
Internetului ca exista si celor care ne mai spun pe gratis cate ceva, chiar daca i-a costat mult timp sa invete!
Daca articolul v-a fost util, va rugam sa lasati un comentariu.