-'; const URL_VAR = 'page'; const SQUELETTE = 'defaut'; const DONNEES_PAR_PAGE_CHOIX = '10,20,50,100'; const DONNEES_PAR_PAGE_DEFAUT = 10; const ALPHABET_AFFICHAGE_DEFAUT = false; const ALPHABET_LETTRE_DEFAUT = 'A'; const CSS_CLASS_PAGE_COURRANTE = 'frag_page_courrante frag_boite'; const PAGE_SEPARATEUR_ESPACE = 0; private $pager_mode; private $pager; private $url; private $parametres_url = null; private $lettre; private $page_delta; private $page_separateur; private $donnees_total; private $donnees_par_page; private $donnees_par_page_choix; private $url_var; private $squelette; private $chemin_squelette; private $recherche_alphabetique; private $squelette_donnees = array(); public function __construct($options) { // Gestion de l'url if (isset($options['url'])) { if ($options['url'] instanceof Url) { $this->url = $options['url']; $this->parametres_url = $this->url->getVariablesRequete(); } else { $msg = "Fragmenteur nécessite nécessite un objet Url du Framework de Tela Botanica pour fonctionner."; trigger_error($msg, E_USER_ERROR); } } else { $msg = "Fragmenteur nécessite de renseigner dans le tableau d'options l'url pour la clé 'url'". trigger_error($msg, E_USER_ERROR); } // Gestion de la liste alphabétique $this->alphabet_affichage = (isset($options['alphabet_affichage']) ? $options['alphabet_affichage'] : self::ALPHABET_AFFICHAGE_DEFAUT); if ($this->alphabet_affichage == true) { $lettre = (isset($options['lettre']) ? $options['lettre'] : self::ALPHABET_LETTRE_DEFAUT); $this->setLettre($lettre); if (isset($_GET['lettre'])) { $this->setLettre(urldecode($_GET['lettre'])); } } // Gestion des infos pour le pager $this->squelette = (isset($options['squelette']) ? $options['squelette'] : self::SQUELETTE).'.tpl.html'; $this->chemin_squelette = dirname(__FILE__).DS.'squelettes'.DS.$this->squelette; $this->pager_mode = (isset($options['pager_mode']) ? $options['pager_mode'] : self::PAGER_MODE); $this->page_delta = (isset($options['page_delta']) ? $options['page_delta'] : self::PAGE_DELTA); $this->page_separateur = (isset($options['page_separateur']) ? $options['page_separateur'] : self::PAGE_SEPARATEUR); $this->url_var = (isset($options['url_var']) ? $options['url_var'] : self::URL_VAR); $this->donnees_par_page = (isset($options['donnees_par_page']) ? $options['donnees_par_page'] : self::DONNEES_PAR_PAGE_DEFAUT); $this->donnees_par_page_choix = (isset($options['donnees_par_page_choix']) ? $options['donnees_par_page_choix'] : self::DONNEES_PAR_PAGE_CHOIX); $this->donnees_total = (isset($options['donnees_total']) ? $options['donnees_total'] : 0); // Gestion du nombre de données à afficher par page. if (isset($_GET['frag_nbre'])) { if ($_GET['frag_nbre'] == '*') { $_GET['page'] = 1; } $_SESSION['fragmenteur']['donnees_par_page'] = $_GET['frag_nbre']; } else { $_SESSION['fragmenteur']['donnees_par_page'] = $this->donnees_par_page; } $this->donnees_par_page = $_SESSION['fragmenteur']['donnees_par_page']; if ($this->donnees_par_page == '*') { $this->donnees_par_page = $this->donnees_total; } // Gestion du Fragmenteur (basé sur le Pager de Pear) $pager_options = array( 'mode' => $this->pager_mode, 'perPage' => $this->donnees_par_page, 'delta' => $this->page_delta, 'totalItems' => $this->donnees_total, 'urlVar' => $this->url_var, 'separator' => $this->page_separateur, 'curPageLinkClassName' => self::CSS_CLASS_PAGE_COURRANTE, 'spacesBeforeSeparator' => self::PAGE_SEPARATEUR_ESPACE, 'spacesAfterSeparator' => self::PAGE_SEPARATEUR_ESPACE, ); $this->pager = Pager::factory($pager_options); } public function getDonneesParPage() { return $this->donnees_par_page; } public function getDeplacementParPageId() { return $this->pager->getOffsetByPageId(); } public function getLettre() { return $this->lettre; } public function setLettre($l) { $this->lettre = $l; } public function getDonneesTotal() { return $this->donnees_total; } public function setDonneesTotal($dt) { $this->donnees_total = $dt; } private function getSqueletteDonnees() { return $this->squelette_donnees; } private function setSqueletteDonnees($cle, $valeur) { $this->squelette_donnees[$cle] = $valeur; } public function executer() { // Gestion de la liste alphabétique if ($this->alphabet_affichage == true) { $alphabet = array(); $this->url->setVariableRequete('lettre', '*'); $alphabet['*'] = array('url' => $this->url->getURL(), 'lettre' => 'tous'); $this->url->unsetVariableRequete('lettre'); for ($i = 65; $i <= 90; $i++){ $this->url->setVariableRequete('lettre', chr($i)); $alphabet[chr($i)] = array('url' => $this->url->getURL(), 'lettre' => chr($i)); $this->url->unsetVariableRequete('lettre'); } $this->setSqueletteDonnees('alphabet', $alphabet); // Gestion de la lettre $this->setSqueletteDonnees('lettre_selected', $this->getLettre()); // Gestion de l'url $this->url->setVariableRequete('lettre', $this->getLettre()); } // Gestion des urls $this->url->setVariableRequete('page', $this->pager->getCurrentPageID()); $this->setSqueletteDonnees('url', $this->url->getURL()); // Gestion du fragmenteur $this->setSqueletteDonnees('frag_donnee_total', $this->donnees_total); $page_id_x_saut = ($this->pager->getCurrentPageID() * $this->donnees_par_page); $this->setSqueletteDonnees('frag_donnee_debut', (($page_id_x_saut - $this->donnees_par_page) > 0 ? ($page_id_x_saut - $this->donnees_par_page) : 0)); $this->setSqueletteDonnees('frag_donnee_fin', ($page_id_x_saut >= $this->donnees_total ? $this->donnees_total : $page_id_x_saut)); $this->setSqueletteDonnees('par_page', explode(',', $this->donnees_par_page_choix)); $this->setSqueletteDonnees('par_page_selected', $_SESSION['fragmenteur']['donnees_par_page']); $this->setSqueletteDonnees('pager_links', $this->pager->getLinks()); // Gestion des paramêtres pour le formulaire du Fragmenteur $form_get_url_chp_hidden = array(); foreach ($this->parametres_url as $cle => $valeur) { $form_get_url_chp_hidden[$cle] = $valeur; } $this->setSqueletteDonnees('form_get_url_chp_hidden', $form_get_url_chp_hidden); // Création du rendu à partir du squelette et de ses données $sortie = SquelettePhp::analyser($this->chemin_squelette, $this->getSqueletteDonnees()); return $sortie; } } ?>