Ce Widget s'appuie sur un ensemble de Widgets 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.
| 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 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 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 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 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 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 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 Pxxo_Widget_Form |
Remarques :
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();