1

Temat: Reverse Routing i URLe paginacji

Witajcie,

znowu mam problem z Routerem. W mojej aplikacji uzytkownicy moga zakladac blogi - domyslnie kazdy blog dostepny jest pod adresem:

sample.com/blog/nazwauzytkownika

Domyslnie pod powyzszym adresem widac wszystkie posty danego uzytkownika (niezaleznie od kategorii). Chcialem, aby przegladanie postow po konkretnej kategorii mialo taki adres:

sample.com/blog/nazwauzytkownika/kategoria/nazwakategorii

wiec dodalem taka regule:

Router::connect(
        '/blog/:username/kategoria/:slug', 
        array('controller' => 'posts', 'action' => 'category_view'),
        array(
            'pass' => array('username', 'slug'),
            'username' => '[0-9a-zA-Z]+', 
            'slug' => '[a-z0-9]+'
        ));

ponadto w widoku mam cos takiego:

$paginator->options(array('url' => $this->passedArgs)); 

niemniej URLe paginacji (numerki, poprzednie, nastepne) wygladaja w ten sposob:

www.sample.com/posts/category_view/nazwauzytkownika/nazwakategorii/page:2

zamiast:

www.sample.com/blog/nazwauzytkownika/nazwakategorii/page:2

Wyglada na to ze Paginator Helper nie lapie tej reguly ktora ustawilem, chociaz jesli buduje link do kategorii w widoku przez HTML Helpera to URL jest poprawny:

<? echo $html->link(
    'Nazwa kategorii', 
    array(
        'controller' => 'posts', 
        'action' => 'category_view', 
        'username' => $nazwauzytkownika, 
        'slug' => $nazwakategorii
    )
); ?>

Macie jakies pomysly?

Ostatnio edytowany przez tomay7 (2009-08-03 11:24:23)

2

Odp: Reverse Routing i URLe paginacji

Zerknij na metode dispatch w dispatche'rze.

3

Odp: Reverse Routing i URLe paginacji

okej, metoda prob i bledow udalo mi sie zrobic te URLe tak jak chcialem. wiec tak - w kontrolerze Posts mam metode odpowiadajaca za wyswietlanie postow danego uzytkownika z danej kategorii:

class PostsController extends AppController {
 
 function category_view($username = null, $category_slug = null) {
 }

}

dodalem do Routera nastepujaca regule:

Router::connect(
        '/blog/:username/kategoria/*', 
        array('controller'=>'posts', 'action'=>'category_view'),
        array('pass' => array('username'), 'username' => '[0-9a-zA-Z]+')
    );

oraz w widoku category_view.ctp na samym poczatku cos takiego:

$username = $this->passedArgs[0];
$category_slug =  $this->passedArgs[1];

unset($this->passedArgs[0]);

$paginator->options(array('url' => 
    array_merge(array('username'=>$username),$this->passedArgs)
));  

I teraz dziala tak jak chcialem czyli Paginator Helper buduje poprawne linki -  czyli np posty ADMINA z kategorii PHP znajduja sie pod adresem:

sample.com/blog/admin/kategoria/php
sample.com/blog/admin/kategoria/php/page:2 //itd.

natomiast linki do kategorii w widoku wypluwam w ten sposob:

<?php echo $html->link(
            'Tytul kategorii', //np PHP 
            array(
                'controller' => 'posts',
                'action' => 'category_view',
                'username' => $username, // np. admin
                $category_slug //np. php
            ) 
            
); ?>

pozdrawiam