Re: fonction pour une recherche dans la BD

47 views
Skip to first unread message
Message has been deleted

Pascal Martinez

unread,
Sep 7, 2015, 5:40:37 AM9/7/15
to ZnetDK
Bonjour,

Pour effectuer une recherche avec ZnetDK selon des critères, il faut commencer par déclarer une classe DAO. Je reprends par exemple ci-dessous la classe DAO du tutoriel ZnetDK.
J'ai ajouté à cette classe l'initialisation de la propriété filterClause (surlignée en jaune) pour définir un critère de sélection.

<?php
namespace app\model;
class FournisseurDAO extends \DAO
{
   protected function initDaoProperties() {
       $this->table = "fournisseurs";
       
$this->filterClause = " where lower(nom) like lower(?)";
   }
}

A présent, pour rechercher les fournisseurs à partir de leur nom, depuis la méthode action_lister() de mon contrôleur (voir l'action de même nom décrite dans le tutoriel ZnetDK), je précise le critère de sélection de mes fournisseurs à l'aide de la méthode setFilterCriteria() comme illustré ci-dessous :


<?php
namespace app\controller;
class FournisseurCtrl extends \AppController
{
 
  static protected function action_lister() {
      $request = new \Request();        
       $fournisseurDAO
= new \app\model\FournisseurDAO();
       $fournisseurDAO->setFilterCriteria('%' . $request->search_criteria . '%');
        $fournisseurs = array();
       while($row = $fournisseurDAO->getResult()) {
           $fournisseurs[] = $row;
      }
   /* Réponse retournée au contrôleur de façade */
   $response = new \Response();
   $response->rows = $fournisseurs;
   $response->success = true;
   return $response;
   
}
 
}

Le nom du fournisseur à rechercher a été transmis à l'action du contrôleur à travers le paramètre POST nommé "search_criteria".

Enfin, il ne reste plus qu'à ajouter à la vue "mesfournisseurs.php" :
  •  la saisie du nom du fournisseur dans un formulaire,
  •  un bouton de recherche
  •  et le code JavaScript pour appliquer le critère de recherche (voir méthode "filterRows()" du composant graphique ZnetDK Datatable) au clic du bouton de recherche.
Les lignes qui ont été ajoutées à la vue originale du tutoriel sont surlignées en jaune :

<!-- Saisie nom de recherche de fournisseurs -->
<form id="recherche_fournisseurs_form" class="zdk-form" style="margin-bottom: 10px;">
    <fieldset>
        <legend>Recherche de fournisseurs</legend>
        <label>Nom</label>
        <input type="text" name="critere">
    </fieldset>
    <button class="zdk-bt-clear" type="reset">Effacer</button>
</form>
<!-- Boutons d'action -->
<div class="zdk-action-bar" data-zdk-dialog="dlg_fournisseur"
                           
data-zdk-datatable="table_fournisseurs">
   
<button class="zdk-bt-add" title="Nouveau fournisseur">Ajouter</button>
   
<button class="zdk-bt-edit" title="Modification du fournisseur">Modifier</button>
   
<button class="zdk-bt-remove" title="Suppression du fournisseur"
           
data-zdk-action="fournisseurctrl:supprimer">Supprimer</button>
    <button class="zdk-bt-search">Rechercher</button>
</div>
<!-- Tableau des fournisseurs -->
<div id="table_fournisseurs" class="zdk-datatable" title="Fournisseurs"
       
data-zdk-action="fournisseurctrl:lister"
       
data-zdk-columns='[{"field":"id", "headerText": "Numéro"},
                {"field":"nom", "headerText": "Nom"},
                {"field":"adresse", "headerText": "Adresse"},
                {"field":"code_postal", "headerText": "Code postal"},
                {"field":"ville", "headerText": "Ville"}]'
>
</div>
<!-- Formulaire dans boîte de dialogue -->
<div id="dlg_fournisseur" class="zdk-modal" title="Fournisseur">
   
<form class="zdk-form"
       
data-zdk-action="fournisseurctrl:enregistrer"
       
data-zdk-datatable="table_fournisseurs">
       
<label>Numéro : </label>
       
<input name="id" disabled type="text">
       
<label>Nom : </label>
       
<input name="nom" maxlength="50" required type="text">
       
<label>Adresse : </label>
       
<textarea name="adresse" rows="3" maxlength="100"></textarea>
       
<label>Code postal : </label>
       
<input name="code_postal" maxlength="5" required type="text">
       
<label>Ville : </label>
       
<input name="ville" maxlength="50" required type="text">
       
<button class="zdk-bt-save zdk-close-dialog" type="submit">Enregistrer</button>
       
<button class="zdk-bt-cancel zdk-close-dialog" type="button">Annuler</button>
   
</form>
</div>
<script>
    $(document).ready(function () {
       $('#fournisseur_actions .zdk-bt-search').click(function() {
            var critere = $('#recherche_fournisseurs_form input[name="critere"]').val();
            $('#table_fournisseurs').zdkdatatable('filterRows', critere);
       });
    });
</script>


Espérant avoir répondu à votre question.

Pascal MARTINEZ

Reply all
Reply to author
Forward
Message has been deleted
0 new messages