Bonjour,
j'ai un soucis concernant le routing pour les catégorie, dans mon URL j'ai a chque fois /slug+catégorie
j'ai recherché dans mon model puis revu la règle d'écriture de l'url mais j'ai pas vu ou ca cloche
Ci-dessous mon model category.php
<?php
class Category extends AppModel {
public function afterfind($data){
foreach ($data as $k => $d){
if(isset($d'Category']'slug']) && isset($d'Category']'id'])){
$d'Category']'link'] = array(
'controller' => 'posts',
'action' =>'Category',
'slug' => $d'Category']'slug']
);
}
$data$k] = $d;
}
return $data;
}
public function beforeSave(){
if(empty($this->data'Category']'slug']) && isset($this->data'Category']'slug']) && !empty($this->data'Category']'name']))
$this->data'Category']'slug'] = strtolower(Inflector::slug($this->data'Category']'name'],'-'));
return true;
}
}
?>
et le routing que j'ai mis dans route.php
Router::connect('/categorie/:slug',array('controller'=>'posts','action'=>'category'),array('pass'=>array('slug'), 'slug'=>'[a-z0-9\-]+'));
Merci de votre aide
Cafreunion
Bonjour,
Actuellement j'ai le l'url suivant qui ne pointe pas sur la bonne page
http://localhost/monsiteamoi/posts/Category/slug:nature
l'url ci-dessous estcréé depuis le modèle category.
Normalement l'url doit être comme ceci
http://localhost/monsiteamoi/posts/Category/nature
Je vois pas trop ou j'ai fais une erreur
Le problème c'est malgrès que j'ai mis le routing de catégory dans le fichier route cela ne change pas
j'ai toujours les élements qui sont envoyés dans l'url (slug: + le nom de la catégory exemple : slug:nature)
j'ai refais le point en revisualisaant et comparant mon code avec celui de la vidéo à partird de la 40eme minutes j'ai rien trouvé
Merci de votre aide
Cafreunion
Dans ton model, dans ton afterfind,
tu mets dans ton link que l'action est Category or c'est category sans majuscule cette fois-çi car tu fais appel à la fonction category de ton controller posts et non au model...
Fait bien attention à tes majuscules.
Essaye pour voir si cela fonctionne maintenant...
$d'Category']'link'] = array(
'controller' => 'posts',
'action' =>'category',
'slug' => $d'Category']'slug']
);
D'ailleurs dans ton routing, tu ne t'es pas trompé...
re,
ok cela fonctionne
j'ai mis l'action en minuscule et cela fonction.
Par contre j'ai deux erreur qui sont apparu lors de la modification de mon PostController
voici le code
<?php
App::uses('AppController', 'Controller');
class PostsController extends AppController {
public $helpers = array('Text','Form','Html', 'Session', 'Date');
public $uses = array('Post');
function menu(){
$posts = $this->Post->find('all',array(
'conditions' => array('type' =>'post', 'online'=>1),
'fields' =>array('id','slug','name')
));
return $pages;
}
/**
* permet d'afficher la home des news
**/
function index(){
$d'posts'] = $this->Paginate('Post',array('type'=>'post', 'online'=>1,'created<= NOW()'));
$this->set($d);
}
function category($category){
$cat = $this->Post->Category->find('first',array(
'conditions' => array('slug' => $category)
));
if(empty($cat))
throw new NotFoundException('Aucun categorie ne correspond a cet ID');
$d'Posts'] = $this->Paginate('Post',array('type'=>'post','online'=>1,'category_id'=> $cat'Category']'id']));
$this->set($d);
$this->render('index');
}
function show($id = null, $slug = null){
if(!$id)
throw new NotFoundException('Aucun article ne correspond a cet ID');
$post = $this->Post->find('first',array(
'conditions' => array('Post.id' => $id),
'recursive' => 0
));
if(empty($post))
throw new NotFoundException('Aucun article ne correspond a cet ID');
if($slug != $post'Post']'slug'])
$this->redirect($post'Post']'link'],301);
$d'post'] = $post;
$this->set($d);
}
/**
* parie avec les prefix
**/
function admin_index(){
$this->paginate = array('Post'=> array(
'limit'=>20
));
$d'posts'] = $this->Paginate('Post',array('type'=>'post','online'>=0));
$this->set($d);
}
function admin_edit($id = null){
if($this->request->is('put') || $this->request->is('post')){
$this->Post->set($this->request->data);
if($this->Post->save()){
$this->Session->setFlash("Le contenu a bien été modifié","notif");
$this->redirect(array('action'=>'index'));
}
}
if($id){
$this->Post->id = $id;
$this->request->data = $this->Post->read();
}else{
$this->request->data = $this->Post->getDraft('post');
}
$d'categories'] = $this->Post->Category->find('list');
$this->set($d);
}
function admin_delete($id){
$this->Session->setFlash("L'article a bien été supprimer",'notif');
$this->Post->delete($id);
$this->redirect($this->referer());
}
}
Mon index.ctp
<div class="row">
<div class="span12">
<h1>Blog</h1>
<?php foreach($posts as $k =>$v): $v = current($v);?>
<h2><?php echo $v'name']; ?></h2>
<?php echo $this->Text->truncate($v'content'],100,array('exact'=>false,'html'=>true)); ?>
<a href="<?php echo $this->Html->url($v'link']);?>" class='btn'>Lire la suite</a>
<div class="cb"></div>
<?php endforeach ?>
</div>
<?php echo $this->element('sidebar');?>
</div>
<?php echo $this->Paginator->numbers();
Les deux errurs que j'ai
Notice (8): Undefined variable: posts [APP\View\Posts\index.ctp, line 5]
Warning (2): Invalid argument supplied for foreach() [APP\View\Posts\index.ctp, line 5]
Lorsque je regarde l'erreur ils pointent tous les deux sur cette ligne :
PostsController::category() - APP\Controller\PostsController.php, line 33
merci de votre aide
J'ai un peux de mal aujourd'hui dsl
Cafreunion
N'oublie ton point-virgule en fin de foreach
<?php endforeach; ?>
Dans ta fonction menu tu return $posts et non $pages
function menu(){
$posts = $this->Post->find('all',array(
'conditions' => array('type'=>'post','online'=>1),
'fields' => array('id','slug','name')
));
return $posts;
}
Et oui aussi dans ta fonction category où tu fais ton paginate, c'est
$d'posts']
et non
$d'Posts']
Toujours ce problème de majuscule...