Bonjour à tous,
Je suis un peu confu. J'ai réussi à faire fonctionner la fonctionnailé Paginator
$this->paginate = array('Article'=>array('limit'=>12,'order'=>'name ASC'));
$d'articles'] = $this->Paginate('Article',array('type'=>'article','online'=>1,'created <= NOW()','or' => $conditions));
depuis le ArticlesController -> admin_index()et ca fonctionne.
Actuellement, j'ai mis ce formulaire dasm mon layout default.ctp, afin d'avoir un champ de rechercher
<?php
echo $this->Form->create(null, array(
'url' => array(
'controller' => 'searches',
'action' => 'index',
'member' => false
),
'class'=>'navbar-form',
'novalidate',
'role'=>'search'
));
?>
<?php echo $this->Form->input('key',array('label'=>false,'class'=>'form-control','placeholder'=>__("Chercher"))); ?>
<?php echo $this->Form->input('cat',array('label'=>__(" uniquement dans les articles"),'type'=>'checkbox','checked'=>'checked')); ?>
<!--
<span class="input-group-btn">
<button class="btn btn-default" type="submit">Search</button>
</span>
-->
<?php
$options = array(
'label' => null,
//'class' => 'btn btn-default',
'div' => array(
'class' => '',
'style' => 'display:none'
)
);
echo $this->Form->End($options);
?>
J'ai aussi créé un nouveau controller SearchesController qui a une action, voici le code
<?php
class SearchesController extends AppController{
function index(){
$data = current($this->request->data);
#debug($data);
if($this->request->is('put') || $this->request->is('post') ){
$search_terms = explode(' ', $data'key']);
$search_terms = array_diff($search_terms,array(''));
if(!$data'cat']){
/**
* Search in Page table (En preparation
**/
}
/**
* Search in Articles table
**/
$conditions = array();
foreach($search_terms as $search_term){
$conditions] = array('Article.name Like' =>'%'.$search_term.'%');
$conditions] = array('Article.content Like' =>'%'.$search_term.'%');
$conditions] = array('Article.noarticle Like' =>'%'.$search_term.'%');
}
$this->loadModel('Article');
$this->Article->contain('Tag');
$this->paginate = array('Article'=>array('limit'=>12,'order'=>'name ASC'));
$d'articles'] = $this->Paginate('Article',array('type'=>'article','online'=>1,'created <= NOW()','or' => $conditions));
/*
$d'articles'] = $this->Article->find('all', array(
'conditions' => array(
'online'=>'1',
'type'=>'article',
'created <= NOW()',
'OR' => $conditions
)//,
// 'fields'=> array('name','content','noarticle','created','id','type','slug')
));
*/
if(!$data'cat']){
$d'search'] = array_merge($d'pages'],$d'articles']);
$this->set($d);
}else{
//$d'articles'];
//debug($d);
$this->set($d);
$this->render('/Articles/thumbnails');
}
// SEND THE VALUES TO THE VIEW
}else{
echo 'e';
}
}
}
Qu'es-ce qu'il se passe quand j'entre un critere de recherche et je tape sur la touche enter?
Ben ca fonctionne, ceci
$this->set($d);
$this->render('/Articles/thumbnails');
me retourne les bon éléements dans le template 'thumbnails.ctp' qui se trouve dans le dossier de la vue 'Articles'.
Aussi, la pagination s'affiche aussi bien. Dans mon cas j'ai 5 pages, donc de 1 à 5 et mopn url est la suivante
http://localhost:8888/cakephp/searches
Si je veux voir la suite du resultat de ma recherche et je clique sur le line '2', la ca bug.
Mon URl est maintenant comme celle ci:
http://localhost:8888/cakephp/searches/index/page:2
et il m'affiche ce message d'erreur:
Notice (8): Undefined variable: search [APP/View/Searches/index.ctp, line 5]
Si mon paginator fonctionne bien si je reste dans le meme controller
Avez-vous une idée pour faire un fonctionnalité de recherche et corriger mon paginator?
Merci beaucoup