Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-11-2009 00:28:47

__fabrice
Membre
Date d'inscription: 25-04-2007
Messages: 131

Router_Regex avec pagination et "titre".html

Salut à tous,

Je viens de me mettre serieusement smile aux routes. J'ai donc fait simplement ceci :

Code:

$route = new Zend_Controller_Router_Route_Regex(
    'fiche-sejour-(\d+)-individuels.html',
    array(
        'action'        => 'edit',
        'controller'    => 'individuels',
        ), array(1 => 'id'),
        'fiche-sejour-%d-individuels.html'
    );
    $router->addRoute('fiche_sejour_individuels', $route);

// appelé comme çà :<a href="<?php echo $this->url(array("id"=>$row['id_sejour']), "fiche_sejour_individuels")?>">Lire la suite >></a>

$route = new Zend_Controller_Router_Route_Static(
    'liste-sejours.html',
    array(
        'action'        => 'list',
        'controller'    => 'individuels'
        )
    );
    $router->addRoute('list_individuels', $route);

// appelé comme çà :<a href="<?php echo $this->baseUrl();?>/liste-sejours.html">Individuels</a>

Par contre, je vois pas comment utiliser çà avec la pagination, pour avoir par exemple une route liste-sejours-page_2.html appelé avec ZendPaginator :

Code:

 <a class="suivant" href="<?php echo $this->url(array('page' => $this->next),"list_individuels"); ?>">Suivant</a>

- Déjà comment le rendre générique pour 2-3 controlleurs ?, car j'ai plusieurs routes du meme style que list_individuels comme list_groupes, list_partenaires qui utilise le meme phtml de pagination.

- Ensuite, au lieu de faire çà, j'aime avoir par ex les 50 premiers caracteres du titre : sejours_en_bretagne_tout_frais_paye.html. Comment faire çà avec les routes ?

Merci à tous
Fab

Hors ligne

 

#2 27-11-2009 11:28:48

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Router_Regex avec pagination et "titre".html

Pour ta route générique, il faut tout simplement rajouter un paramètre dans ta regex avec le nom du controller.
Pour tes jolies urls, il faut que tu filtres ton texte pour obtenir ce résultat. Mais je te conseille de laisser un identifiant dans l'url. Cherche sur le forum  les termes url et référencement tu devrais trouver ton bonheur.

Hors ligne

 

#3 01-12-2009 09:13:15

__fabrice
Membre
Date d'inscription: 25-04-2007
Messages: 131

Re: Router_Regex avec pagination et "titre".html

salut,

merci pour ta réponse, j'ai essayé plusieurs choses  :

Code:

$route = new Zend_Controller_Router_Route_Regex(
  'fiche-sejour-individuel-(\d+)-(.+).html',
  array(
      'action'        => 'edit',
      'controller'    => 'individuels'
  ), 
  array(
      1 => 'id',
      2 => 'title'
  ),
'fiche-sejour-individuel-%d-%s.html'
);
$router->addRoute('fiche_sejour_individuels', $route);

et

Code:

&nbsp;<a href="<?php echo $this->url(array(
                            "id"    => $row['id_sejour'],
                            "title"    =>trim($row['title'])),
                            "fiche_sejour_individuels")?>">Lire la suite >></a>

Sauf que si dans le titre, il y a des caractères hors alpha, çà bug. Et comment enlever les "+" qui se mettent dans le nom de l'url ?.
Du coup, j'ai fait çà, mais çà marche pas :

Code:

$route = new Zend_Controller_Router_Route_Regex(
        'fiche-sejour-individuel-(\d+)-([A-Za-z-0-9\+]*).html',

Par contre, çà filtre les caractères hors alphanum, ou la route ne se crée carrement pas ?

Autre chose, pour la pagination, je vois pas comment faire pour convertir : /controller/action/edit/10/page/3 en  'fiche-sejour-individuel-26-blablabla-3.html'

Merci
Fabrice

Hors ligne

 

#4 01-12-2009 10:01:08

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Router_Regex avec pagination et "titre".html

C'est à toi  de faire un filtre que tu appliques avant de donner ton titre à la route. Cherche un peu sur le forum tu trouvera des bribes de codes pour filtrer-en-url-sans-accent-ni-majuscules smile

Hors ligne

 

#5 01-12-2009 22:41:29

__fabrice
Membre
Date d'inscription: 25-04-2007
Messages: 131

Re: Router_Regex avec pagination et "titre".html

hello,

ok, donc j'ai trouvé cette fonction dans un article du site de Zend :

Code:

function friendly_url($nadpis) {
    $url = $nadpis;
    $url = preg_replace('~[^\\pL0-9_]+~u', '-', $url);
    $url = trim($url, "-");
    $url = iconv("utf-8", "us-ascii//TRANSLIT", $url);
    $url = strtolower($url);
    $url = preg_replace('~[^-a-z0-9_]+~', '', $url);
    return $url;
}

En testant "à la main" , mes urls sont toutes nickel smile Par contre, pour la pagination ?, pas d'idée ?

Puis, je voulais en faire un Filter, mais la doc à ce sujet est tres faible. J'ai essayé de le mettre ici (/application/views/filters/FriendlyUrls.php ou ici, /library/Qda/View/Filter mais apres, l'appel ne marche pas dans la vue $this->FriendlyUrls();

Code:

class Qda_View_Filter_FriendlyUrls implements Zend_Filter_Interface {
    
    public function filter($url) {

        $url = $nadpis;
        $url = preg_replace('~[^\\pL0-9_]+~u', '-', $url);
        $url = trim($url, "-");
        $url = iconv("utf-8", "us-ascii//TRANSLIT", $url);
        $url = strtolower($url);
        $url = preg_replace('~[^-a-z0-9_]+~', '', $url);

        return $url;
    }
}

et

Code:

protected function _initActionHelpers()
    {
        $this->_logger->info(__METHOD__);
        Zend_Controller_Action_HelperBroker::addHelper(new Qda_Controller_Action_Helper_CopyUploadedFiles());
        Zend_Controller_Action_HelperBroker::addHelper(new Qda_View_Filter_FriendlyUrls());
    }

Certes, je peux faire çà avec un helper de vue, mais le filter me semble plus approprié.

Merci de votre aide smile

Fabrice

Dernière modification par __fabrice (01-12-2009 22:42:05)

Hors ligne

 

#6 02-12-2009 09:34:21

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Router_Regex avec pagination et "titre".html

Le fait que tu ajoutes ton filtre comme un helper d'action ne le rend pas utilisable en tant que filtre de vue.
Tu mélanges un peu tout je crois. Helper d'action et helper de vue sont des choses bien diffférentes, si tu mélange à cela là notion de filtre...
Un Helper de vue peut utiliser un filtre. J'dis ça j'dis rien smile

Hors ligne

 

#7 02-12-2009 09:44:54

__fabrice
Membre
Date d'inscription: 25-04-2007
Messages: 131

Re: Router_Regex avec pagination et "titre".html

Ha oui, exact, j'ai fait un copié/collé trop rapide smile. Mais j'ai utilisé un helper de vue (ce qui reste cohérent) qui marche tres bien.

Il me reste encore le problème de la pagination à trouver, et aussi à gérer des paramètres get à traiter dans la route.

Merci
Fab

Hors ligne

 

#8 04-12-2009 10:24:23

__fabrice
Membre
Date d'inscription: 25-04-2007
Messages: 131

Re: Router_Regex avec pagination et "titre".html

Bon, çà y est j'ai trouvé la réponse.
Voici :

Code:

$route = new Zend_Controller_Router_Route(
'liste-sejours-individuels/:page/:news/:type_sejours',
    array(
        'action'         => 'list',
        'controller'     => 'individuels',
        'page'           => 1,
        'news'           => 0,
        'type_sejours'   => 0
    ));
$router->addRoute('list_individuels', $route);

et pour la vue :

Code:

<a href="<?php echo $this->url(array(
         "id"        => $row['id_sejour'],
         "title"     => $this->friendlyUrls($row['title']),
         "page"      => 1),
         "fiche_sejour_individuels")?>">Lire la suite >></a>

Voila.

Merci
Fabrice

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages