====== Pxxo_Widget_DataGrid ====== Ce Widget s'appuie sur un ensemble de Widgets [[:fr:doc:Pxxo_Widget_Form|Pxxo_Widget_Form]] et permet d'afficher, créer, modifier et supprimer des lignes de données présentées sous forme de tableau paginable. {{fr:doc:exemple_datagrid.gif|}} ===== Paramètres ===== ^ Nom ^ Type ^ Description ^ | title | String | Le titre du Widget | | inputs | Array | C'est le "modèle" des inputs d'une ligne du Datagrid (donc bien sûr sans les valeurs). On utilise exactement le même format que le paramètre "inputs" de [[:fr:doc:Pxxo_Widget_Form|Pxxo_Widget_Form]] | | count_callback | Callback | (facultatif) La fonction à appeler pour compter le nombre de lignes. La fonction ne prend pas de paramètre. Le nombre de lignes est indispensable pour la pagination | | options_pagination | Array | (facultatif) Le tableau de paramètrage du [[:fr:doc:Pxxo_Widgets_Pagination|Widget_Pagination]]. Si ce paramètre n'est pas fourni, on n'effectue pas de pagination | | list_callback | Callback | La fonction à appeler pour lister les données (datasource). La fonction appelée prend 2 paramètres : le rang de la première ligne à renvoyer et le rang de la dernière ligne à renvoyer. La fonction doit renvoyer un tableau. Ce tableau contient des tableaux associatifs clé/valeur représentant les lignes de données. Les clés des lignes doivent correspondre aux “id” des inputs | | create_callback | Callback | La fonction à appeler pour créer les données. La fonction appelée doit prendre en paramètre le tableau des inputs renvoyé par la fonction [[:fr:doc:Pxxo_Widget_Form#getinputarray|getInputArray()]]. La fonction doit renvoyer //true// en cas de succès et //false// en cas d'échec | | update_callback | Callback | La fonction à appeler pour mettre à jour les données. La fonction appelée doit prendre en paramètre le tableau des inputs renvoyé par la fonction [[:fr:doc:Pxxo_Widget_Form#getinputarray|getInputArray()]]. La fonction doit renvoyer //true// en cas de succès et //false// en cas d'échec | | delete_callback | Callback | La fonction à appeler pour supprimer les données. La fonction appelée doit prendre en paramètre le tableau des inputs renvoyé par la fonction [[:fr:doc:Pxxo_Widget_Form#getinputarray|getInputArray()]]. La fonction doit renvoyer //true// en cas de succès et //false// en cas d'échec | | validate_create_callback | Callback | Permet d'indiquer une callback pour valider les champs du formulaire lors de la création. La fonction appelée prend 2 paramètres : l'input courant et l'instance du formulaire. Exemple: validate_callback($input, $form). C'est en fait la callback appelée par le système de validation de [[:fr:doc:Pxxo_Widget_Form|Pxxo_Widget_Form]] | | validate_update_callback | Callback | Permet d'indiquer une callback pour valider les champs du formulaire lors de la mise à jour. La fonction appelée prend 2 paramètres : l'input courant et l'instance du formulaire. Exemple: validate_callback($input, $form). C'est en fait la callback appelée par le système de validation de [[:fr:doc:Pxxo_Widget_Form|Pxxo_Widget_Form]] | //**Remarques :**// *//Cliquez __**[[http://fr3.php.net/manual/en/language.pseudo-types.php#language.types.callback|ICI]]**__ pour lire la documentation du type Callback// *//En cas d'échec ou d'erreur dans une fonction callback, le Widget Datagrid affiche un message au niveau de la ligne en question// *//Lisez la documentation du [[http://www.pxxo.net/fr/doc/pxxo_widget_input#parametres | Pxxo_Widget_Input]]// pour connaitre les paramètres attendus par les fonctions de validation *//Lisez la documentation du [[:fr:doc:Pxxo_Widgets_Pagination|Widget_Pagination]]// pour connaitre les personnalisations possibles pour la pagination ===== Utilisation ===== Voici un exemple d'utilisation du widget. ini_set('include_path', strtr('.:../../pxxo:../../widgets:', ':/', PATH_SEPARATOR.DIRECTORY_SEPARATOR).ini_get('include_path')); session_start(); require_once "Pxxo/Widget/DataGrid.php"; $p = array( // Réglages pour PXXO 'ResourcePath' => rtrim(dirname(__FILE__), DIRECTORY_SEPARATOR).'/rsc', 'ResourceURL' => rtrim(dirname($_SERVER['PHP_SELF']), DIRECTORY_SEPARATOR).'/rsc', 'Lang' => 'fr', 'CacheMode' => false, // Paramètres spécifiques à Pxxo_Widget_DataGrid 'title' => 'Test...', // Liste des inputs sur le même principe que Pxxo_Widget_form 'inputs' => array( array( 'id' => 'num', 'label' => 'Numéro', 'type' => 'text', 'value' => '', 'size' => 2, 'required' => true, 'disabled' => false, 'readonly' => true, 'maxlength' => 10 ), array( 'id' => 'dept', 'label' => 'Département', 'type' => 'text', 'value' => '', 'size' => 30, 'required' => true, 'disabled' => false, 'readonly' => false, 'maxlength' => 50 ), ), //Liste des options de pagination 'options_pagination' => array('show_lignes' => false, 'ligne' => 3), // Listes des callback 'count_callback' => 'compter', 'list_callback' => 'lister', 'create_callback' => 'creer', 'update_callback' => 'modifier', 'delete_callback' => 'supprimer', 'validate_update_callback' => 'valider_la_saisie', 'validate_create_callback' => 'valider_la_saisie', ); // On initialise un tableau de données if (!isset($_SESSION['data'])) $_SESSION['data'] = array( 35 => 'Ile et Vilaine', 44 => 'Loire Atlantique', 56 => 'Morbihan', ); /** * Callback permettant de compter les lignes * * @return Integer */ function compter() { return count($_SESSION['data']); } /** * Callback permettant de remplir le DataGrid * * @return array */ function lister($debut=null, $fin=null) { $ret = array(); if ((!is_null($debut))&&(!is_null($fin))) { $part = array_slice (array_keys($_SESSION['data']), $debut, ($fin-$debut)); } else { $part = array_keys($_SESSION['data']); } foreach($part as $key) $ret[] = array('num'=>$key, 'dept'=>$_SESSION['data'][$key]); return $ret; } /** * Callback permettant d'ajouter une ligne au tableau de données * * @param array $inputs tableau des inputs de la ligne en question * * @return boolean */ function creer($inputs = array()) { $_SESSION['data'][$inputs['num']['result']] = $inputs['dept']['result']; return true; } /** * Callback permettant de mettre à jour une ligne du tableau de données * * @param array $inputs tableau des inputs de la ligne en question * * @return boolean */ function modifier($inputs = array()) { $_SESSION['data'][$inputs['num']['result']] = $inputs['dept']['result']; return true; } /** * Callback permettant de supprimer une ligne du tableau de données * * @param array $inputs tableau des inputs de la ligne en question * * @return boolean */ function supprimer($inputs = array()) { unset($_SESSION['data'][$inputs['num']['result']]); return true; } /** * Callback permettant de valider les données saisies * * @param array $input : input à valider * @param $form : instance du formulaire * * @return array */ function valider_la_saisie($input, $form) { $errors = array(); if ($input['id'] == 'num' && !preg_match(',[0-9]+,', $input['result'])) { $errors[] = 'Numéro de département invalide'; } if ($input['id'] == 'dept' && !preg_match(',\w+,i', $input['result'])) $errors[] = 'Nom de département invalide'; return $errors; } // Lancement du Widget $o = new Pxxo_Widget_DataGrid($p); $o->addDecorator('Pxxo_Widget_Decorator_Core'); $o->main(); $o->dump();