Bonjour à tous,
Je suis nouveau sur le systeme cakephp.
Je suis entrain de faire un site de base d'information matériel avec un systeme de ticket.
Les page d'informations et du systeme de ticket sont faite mais j'aimerai effectuer une page de recherche pour les tickets en exploitant, la recherche par le nom de la personne, la résolution et une période sélectionner.
Je reste bloquer sur cette page de recherche, pouvez vous m'aider?
1000 Merci a celui qui me sauvera !
SI j ai bien compris tu souhaite un moteur de recherche sur les tickets, si oui:
Fais une méthode search dans ticketscontroller.
Exemple:
public function search($sreach = null) {
$data = $this->Ticket->find('all', array(
'conditions' => array('nom_du_champ_client LIKE' => '%$search%')
));
$this->set(compact($data)); // data doit etre le meme nom que la variable utiliser dans index.ctp
$this->render(`/Tickets/index`); // reprendre la vue index pour l'affichage des infos
}
Merci de ta réponse @mikachu.
J'ai suivi ta méthode, je n'ai toujours aucun affichage en resultat de ma recherche.
J'en suis arrivé à là ->
TicketController
public function recherchedate(){
$finder2 = array( "and" => array(
"Ticket.created <=" => $_POST'data']'Post']'searchdate1'],
"Ticket.created >=" => $_POST'data']'Post']'searchdate2']
));
$results = $this->Ticket->find("all", array("conditions"=>$finder2));
}
Accueil.ctp
<h3>Saisissez les dates que vous recherchez pour afficher ses tickets:</h3>
<?php echo $this->Form->create('Post',array('type' => 'post','url' => array('controller' => 'tickets', 'action' => 'recherchedate'))); ?>
<?php echo $this->Form->date('searchdate1', array('label'=>"",'placeholder'=>'Recherche')); ?>
<?php echo $this->Form->date('searchdate2', array('label'=>"",'placeholder'=>'Recherche')); ?>
<?php echo $this->Form->submit('Rechercher', array('class' => 'btn btn-large btn-primary', 'style' => 'margin:10px;display:inline;')); ?>
<?php echo $this->Form->end(); ?>
rechechedate.ctp result de ma recherche
<div id="result" class="content">
<?php if(empty($result)){ echo '<h2>Aucun Resultat</h2>'; }
else{ ?>
<h2>
<tr><?php foreach ($result as $resultnom): ?>
<th>Nom : </th>
<td><?php echo $result'Client']'nom'] ?></tdtr>
</tr>
<?php endforeach ?>
</H2>
<?php echo $this->Form->end(array('label'=>'Retour','div'=>false, 'class'=>'btn btn btn-primary disabled','onclick' => "window.history.back();return false;", 'style' => 'display:block;margin-top: 10px;')); ?>
<h3>Liste des Tickets</h3>
<table class="table table-bordered table-hover table-striped table-striped-frs">
<tr>
<thead class="frs">
<th>Sujet</th>
<th>Resolu</th>
<th>Interlocuteur</th>
<th>Creation</td>
<th class="actions"><?php echo __('Actions'); ?></th>
</thead>
</tr>
<?php foreach ($result as $result): ?>
<tr>
<td><?php echo $search'Ticket']'sujet'] ?></td>
<td><?php echo $search'Ticket']'resolu'] ?> </td>
<td><?php echo $search'Ticket']'interlocuteur'] ?></td>
<td><?php echo $search'Ticket']'created'] ?> </td>
<td class="actions" style="width: auto;">
<?php echo $this->Html->link(__('<i class="icon-eye-open"></i> Voir'), array('action' => 'view', $search'Ticket']'id']), array('escape' => false)); ?></br>
</td>
</tr>
<?php endforeach; }?>
</table>
<hr>
</div>
La table ticket comporte bien des données sur les 7 derniers jours.
voici la vue web de ma recherche :
Ps http://s22.postimg.org/7zjsvzzq9/Capture\_d\_cran\_2014\_02\_18\_15\_50\_32.png le lien de l'image, via le forum celui-ci a été coupé.
Est ce $_POST'data']'Post']'searchdate1'] retroune le meme format que ton champ created ? car si c est non, c est logique qu'il ne peut trouver de resulat
Ensuite:
public function recherchedate(){
$finder2 = array( "and" => array(
"Ticket.created <=" => $_POST'data']'Post']'searchdate1'],
"Ticket.created >=" => $_POST'data']'Post']'searchdate2']
));
$results = $this->Ticket->find("all", array("conditions"=>$finder2));
}
ton created est un between donc tu devrais plutot faire ( <u>en théorie</u> ):
ET N OUBLI PAS DE RETOURNER LES DONNEES: $this->set(compact($results));
public function recherchedate(){
$finder2 = array(
'Ticket.created BETWEEN ? AND ?' => array(
$_POST'data']'Post']'searchdate1'],
$_POST'data']'Post']'searchdate2']
)
);
$results = $this->Ticket->find("all", array("conditions"=>$finder2));
$this->set(compact($results)); // RETOURNE $results a la vue rechechedate.ctp
}
et dans ta vue rechechedate.ctp utilise $result <u>s</u> et non $result. OU remplace $result <u>s</u> par $result dans ta méthode recherchedate()
Merci bien bon je pense qu'on avance beaucoup !!
Dans l'interface Web du site cela me renvoie seulement une date au format Y-m-d alors que le champ created est un datetime(Y-m-d h:m:s dans le mysql.
Pense-tu que la présence de l'heure, pourrait me fausser la requête?
Oui il faudrait plutot faire un LIKE dans ce cas la:
public function recherchedate() {
$finder2 = array( "and" => array(
"Ticket.created LIKE" => '%'.$_POST'data']'Post']'searchdate1'].'%',
"Ticket.created LIKE" => '%'.$_POST'data']'Post']'searchdate2'].'%'
));
$results = $this->Ticket->find("all", array("conditions"=>$finder2));
}
J'ai changé rien changé dans le sql, cela fonctionne ; si j'ai modifié mes "search" ou "result" dans la recherchedate.ctp par results, et aussi $this->set(compact($results)); par $this->set('result', $results)
maintenant j'ai la possibilité de recherche entre deux dates
Merci beaucoup !!!!!
C est l'annotation des paramètres passé par cakephp.
Tu en as d'autres comme le plus courant page:1, page:2 etc... pour passer d'une page à l'autre.