Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Listanje stranica preko smarty-ja

[es] :: PHP :: Smarty template engine :: Listanje stranica preko smarty-ja

[ Pregleda: 2473 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kazil
Robert Bašić
Full time PHP dev :)
Bačka Topola - Novi Sad

Član broj: 120044
Poruke: 686
*.reverse.sattrakt.net.

Jabber: robertbasic@elitesecurity.org
ICQ: 446475288
Sajt: robertbasic.com


+2 Profil

icon Listanje stranica preko smarty-ja27.07.2007. u 10:46 - pre 203 meseci
sve sam vec pretumbao i ne mere pa ne mere...

polako prebacujem svoje radove na smarty al kod ovog sam zapeo. rec je o prokletom pageru ili kako se vec zove, ono za listanje stranica (po 10 rez na strani, pa 50 strana itd.)

bez smartyja mi radi, samo ne uspevam da preradim kod tako da radi sa smartyjem. u teoriji sam nasao skoro dva resenja

prvo:

php:

Code:


for ($i=1;$i<=$ukupno_strana;$i++){
    
    $link_niz[] = $_SERVER[PHP_SELF].'?id_izvor='.$id_izvor.'&strana='.$i;
    
        $i_niz[] = $i;        
}

$smarty->assign('link',$link_niz);
$smarty->assign('i_niz',$i_niz);



e sad. u tpl mi treba da ispisuje brojeve od 1 do $ukupno_strana i da svaki broj ima svoj odgovarajuci link. pokusavao sam na razne nacine al` izgubim se u onim dreded foreach petljama. pokusavao sam i sa section i sa counter.

pitanje za prvo: kako preko smartyja da ispisem sa gore prikazanim php kodom?

drugo:

pokusavao sam i tako da u tpl ubacim {php}...{/php} i tu da pozovem funkciju koja ce mi ispisati lister stranice. funkcija je sledeca:

Code:

function ispisi_brojeve_stranica($ukupno_strana,$id_izvor){
    
    //ispisuje brojeve za stranice
    
for ($i=1;$i<=$ukupno_strana;$i++){
            
    echo "<a href=\"" . $_SERVER['PHP_SELF'] . "?id_izvor=$id_izvor&strana=$i\">";
            
    if ($i == $_GET['strana']) {//trenutnu stranu ispisuje bold
                    
        echo "<b>&nbsp;&nbsp;$i&nbsp;&nbsp;</b>";
                
    }//kraj if-a 
                    
    else {

        echo "&nbsp;&nbsp;$i&nbsp;&nbsp;";

    }//kraj if...else...
    
    echo "</a>";
}//kraj for petlje
    
}//kraj funkcije


funkcija prima 2 parametra: $ukupno_strana i $id_izvor. $id_izvor pokupim u tpl bez problema preko $smarty.get.id_izvor posto se nalazi u adress baru.

$ukupno_strana ne mogu nikako da iz php-a prosledim u php koji je ugnjezden u tpl:

Code:

{php}

ispisi_brojeve_stranica($ukupno_strana,$_GET[id_izvor]);

{/php}


pitanje za drugo: kako da funkciji ispisi_brojeve_stranica prosledim promenljivu $ukupno_strana?

nadam se da sam bio kolko-tolko jasan i hvala unapred

edit: nije elegantno, ali radi

na prvi nacin sam uradio:

php:
Code:


for ($i=1;$i<=$ukupno_strana;$i++){
    
    $link_niz[] = $_SERVER[PHP_SELF].'?id_izvor='.$id_izvor.'&strana='.$i;
    
}

$smarty->assign('link',$link_niz);



tpl:
Code:

{foreach item=link from=$link}
<a href="{$link}">
{assign var='broj' value=$link|count_characters}
{assign var='broj1' value=$broj-1}
{$link.$broj1}
</a>
{/foreach}


zasto ovako? zato :P svaki link koji uzimam je uvek istog formata /negde/strana.php?id_izvor=$x&strana=$i

prvo za svaki link izbrojim koliko ima karaktera to dodelim u broj. onda iz tog broja oduzmem 1 i dodelim broju 1. i na kraju ispisujem karakter iz $link koji se nalazi na pozicij $broj1 a to je zapravo broj strane.

ako neko nadje bolje resenje ili ovo napravi da je bolje nek postuje bio bih zahvalan jako


[Ovu poruku je menjao kazil dana 27.07.2007. u 12:25 GMT+1]
 
Odgovor na temu

Zmaj
Predrag Krstić
web developer
Zrenjanin

Član broj: 1035
Poruke: 382

Sajt: https://pkrstic.wordpress..


+4 Profil

icon Re: Listanje stranica preko smarty-ja27.07.2007. u 12:48 - pre 203 meseci
uzmi to sto treba da ti se pojavi u paginaciji, napravi funkciju koja ce ti izgenerisati jedan string sa sve linkovima, na kraju stampas samo string a ne mucis se sa nizovima

ovo je funkcija koju sam napravio i koristim u svim projektima, bez obzira da li se radi o smartiju ili cistom php-u

Code:

function pagination($page, $total, $link, $items_per_page) {

    $title = array('&lt;&lt;', '&lt;', '&gt;', '&gt;&gt;');
    $show_pages = 3;
    
    if (strpos($link, '?') === false) $link .= '?';
    else $link .= '&';

    if ($items_per_page < 1) $items_per_page = 25;
    if ($total > 0) $max = ceil($total / $items_per_page);

    if ($page < 1) $page = 1;

    if ($page > $max) $page = $max;

    if (empty($separator)) $separator = " | ";

    
    $startpage = $page - $show_pages;
    if ($startpage < 1) $startpage = 1;

    $endpage = $startpage + $show_pages * 2;
    if ($endpage > $max) $endpage = $max;


    $out = array();

    if ($startpage > 1) {
        $pageprev = $page - 1;
        $out[] = '<a href="'.$link.'page=1">'.$title[0].'</a>';
        $out[] = '<a href="'.$link.'page='.$pageprev.'">'.$title[1].'</a>';
    } 
    else {
        $out[] = $title[0];
        $out[] = $title[1];
    }

    //$out[] = ' ... ';
    for ($i = $startpage; $i <= $endpage; $i++) {
        if ($i != $page) $out[] = '<a href="'.$link.'page='.$i.'">'.$i.'</a>';
        else $out[] = $i;
    }
    //$out[] = ' ... ';

    if ($endpage < $max) {
        $pagenext = $page + 1;
        $out[] = '<a href="'.$link.'page='.$pagenext.'">'.$title[2].'</a>';
        $out[] = '<a href="'.$link.'page='.$max.'">'.$title[3].'</a>';
    }
    else {
        $out[] = $title[2];
        $out[] = $title[3];
    }

    $out = implode(' &nbsp;|&nbsp; ', $out);
    
    return $out;
}


ulazni parametri su
$page: trenutna stranica;
$total: ukupno elemenata (ne stranica) za prikaz
$link: koji ce da stoji, bez promenljivih za stranicu, funkcija to dodaje sama
$items_per_page: broj elemenata po stranici

$total si sigurno imao u svom projektu da bi dobio ukupan br. elemenata za prikaz (neki "SELECT count(*) FROM neka_tabela")

Takodje si imao $items_per_page jer si u nekom upitu imao i "... LIMIT $start_from, $items_per_page"

$start_from = ($page - 1) * $items_per_page;

ovo $page-1 ti treba da bi ti paginacija krenula od 1 a ne od 0, malo je citljivije da korisnik na drugoj strani ima 2 a ne 1 :)

na kraju uradis
Code:

$items_per_page = 10; //broj elementa po strani za prikaz
$page = $_GET[page];
$total = funkcija_za_prebrojavanje_elemenata;
$start_from = ($page - 1) * $items_per_page;
$link = $_SERVER[PHP_SELF];

$pagination = pagination($page, $total, $link, $items_per_page);
$data = funkcija_koja_vadi_sadrzaj_u_niz();

$smarty->assign('pagination',$pagination);
$smarty->assign('data', $data);



ovako nemoras da pravis petlju za paginaciju, samo za podatke

nadam se da ti je pomoglo, pisi ako ti treba pomoc
 
Odgovor na temu

[es] :: PHP :: Smarty template engine :: Listanje stranica preko smarty-ja

[ Pregleda: 2473 | Odgovora: 1 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.