Bonjour à tous,
J'essaye de comprendre comment fonctionne le système MVC de Grafikart en me basant sur les tutos vidéos. Je me pose une question à laquelle je ne trouve pas de réponse, très certainement parce que là, je ne comprends rien. :)

Les URL des pages sont écrites ainsi : /monsite/page/slug-1
Sauf que j'aimerais : /monsite/page/slug

En gros que l'ID ne s'affiche pas dans les URL des pages ou des posts. (je trouve ça moche).
J'ai bien tenté de comprendre comment tout ça été gerrer, mais je comprend rien. Idem, quand je re-regarde les vidéos des tutos, ça me perd totalement. trop de théorie ...

Quand je modifie le fichier conf.php :
Original :

Router::connect('page/:slug-:id','pages/view/id:([0-9]+)/slug:([a-z0-9\-]+)');

Modification :

Router::connect('page/:slug','pages/view/slug:([a-z0-9\-]+)');

Puis le layout, default.php :
Original :

<?php foreach($pagesMenu as $p): ?>
<li><a href="<?php echo Router::url('pages/view/id:'.$p->id.'/slug:'.$p->slug); ?>" title="<?php echo $p->name; ?>"><?php echo $p->name; ?></a></li> 
 <?php endforeach; ?>

Modification :

<?php foreach($pagesMenu as $p): ?>
<li><a href="<?php echo Router::url('pages/view/slug:'.$p->slug); ?>" title="<?php echo $p->name; ?>"><?php echo $p->name; ?></a></li> 
<?php endforeach; ?>

Je me retrouve tout simplement avec des pages erreur 404 ... :/

J'ai regardé les fichiers sources de grafikart pour comparer avec les miens pour voir si je loupé quelque chose, et j'ai remarqué que sur les sources, pour la visualisation des catégories, les ID ne sont pas présents dans leurs URL ... quand je regarde les fichiers liés aux catégories je ne vois pas la différence qui gère donc l'affichage de l'ID dans les URL ou pas ...

Je me demande si quand même tout ça ne se trouve pas dans le router.php ?
Si c'est le cas, cela va peut-être touché les expressions régulières, mais je suis déjà perdu d'avance si c'est ça XD.

Si quelqu'un comprends ce que je cherche je suis preneur de tout aiguillages et aides possible.
Merci de m'avoir lu et merci d'avances pour toutes réponses qui seront apportées :)

Bonne journée.

3 réponses


Bonjour,
Pour l'id, tu es obligé de l'envoyer dans ton url, car c'est grâce à lui que tu récupères le contenu.
Laisse tes id partout et essayes ceci.

Router::connect('page/:slug','pages/view/id:([0-9]+)/slug:([a-z0-9\-]+)');
ste
Auteur

Bonjour et d'abord merci pour la réponse.
En effet, j'ai compris par la suite que si l'id n'était pas envoyé dans l'url, d'une manière ou d'une autre, comment pourrait-il récupérer X ou Y contenu. Du moins j'ai bien compris que l'id défini quelque chose, mais bref ...

Quand j'essaye ce que tu m'indiques, idem, je me retrouve avec des pages d'erreur. L'url change bien, pas d'ID juste le slug, mais "page introuvable" :/

Pourtant dans le code source de Grafikart, quand il appel les catégories, dans la conf.php il est écrit ceci :

Router::connect('news/category/:slug','posts/category/slug:([a-z0-9\-]+)');

Alors peut-être suis-je un sombre ignorant (ce qui est possible), mais je constate que cela fonctionne pour les catégories qui ont pourtant elles aussi des ID, nan ? XD
Mais en y réfléchissant ces catégories sont appelées par leur nom respectif, et pas, pas leur ID peut-être ?

Bonjour,
De la façon Router::connect('news/category/:slug','posts/category/slug:([a-z0-9-]+)'); il faut que ta requête appel selon le slug alors et non selon l'id et faire en sorte que ton slug soit unique