1,4 → 1,5 |
<?php |
// declare(encoding='UTF-8'); |
/** |
* Navigation gère les url de navigation en fonction d'un départ et d'une limite |
* |
15,66 → 16,50 |
*/ |
class Navigation { |
|
private $parametres; |
private $conteneur; |
private $parametresUrl; |
private $urlNavigation; |
private $total; |
private $sansLimite; |
|
/** |
* Constructeur de la classe Navigation |
* @param Array $parametres (optionnel) la liste des paramètre issus du Conteneur |
* */ |
public function __construct($parametres = null) { |
$this->parametres = $parametres; |
* @param Array $parametresUrl (optionnel) la liste des paramètre issus du Conteneur |
*/ |
public function __construct($conteneur, $parametresUrl = null) { |
$this->conteneur = $conteneur == null ? new Conteneur() : $conteneur; |
$this->parametresUrl = $parametresUrl; |
$this->urlNavigation = $this->conteneur->getUrl($this->conteneur->getParametre('url_service')); |
$this->urlNavigation->setOption(Url::OPTION_ENCODER_VALEURS, true); |
} |
|
/** |
* Obtenir la valeur courante de départ |
* */ |
*/ |
public function getDepart() { |
return isset($this->parametres['navigation.depart']) ? $this->parametres['navigation.depart'] : 0; |
return isset($this->getParametre('navigation.depart')) ? $this->getParametre('navigation.depart') : 0; |
} |
|
/** |
* Obtenir la limite courante |
* */ |
*/ |
public function getLimite() { |
$limite = 10; |
if (isset($this->parametres['navigation.limite']) && is_numeric($this->parametres['navigation.limite'])) { |
$limite = $this->parametres['navigation.limite']; |
$limite = ($limite < 1000) ? $limite : 1000;// Pour éviter les abus ! |
if (isset($this->getParametre('navigation.limite')) && is_numeric($this->getParametre('navigation.limite'))) { |
$limiteParam = $this->getParametre('navigation.limite'); |
$limite = ($limiteParam < 1000) ? $limiteParam : 1000;// Pour éviter les abus ! |
} |
return $limite; |
} |
|
/** |
* Configurer l'Url de navigation en fonction du fichier de configuration |
* */ |
public function chargerUrl() { |
$this->urlNavigation = new Url(Config::get('url_service')); |
$this->urlNavigation->setOption(Url::OPTION_ENCODER_VALEURS, true); |
} |
|
/** |
* Obtenir l'url en fonction d'un départ et d'une limite donnée |
* @param int $depart l'entier de départ |
* @param int $limite le nombre d'éléments limite |
* */ |
public function getUrl($depart = null, $limite = null) { |
if ($depart == null && $limite == null) { |
return $this->urlNavigation; |
} else { |
return $this->obtenirUrlNavigation($depart, $limite); |
} |
} |
|
/** |
* Récupérer l'url de navigation en concaténant d'éventuels paramètres |
* @param $depart l'entier de départ de la recherche |
* @param $limite le nombre de résultats à retourner |
* @param $parametresAdditionnels le tableau contenant les parametres => valeurs additionnels |
* */ |
* Récupérer l'url de navigation en concaténant d'éventuels paramètres |
* @param $depart l'entier de départ de la recherche |
* @param $limite le nombre de résultats à retourner |
* @param $parametresAdditionnels le tableau contenant les parametres => valeurs additionnels |
*/ |
private function obtenirUrlNavigation($depart, $limite) { |
$parametres = $this->parametres; |
$parametres = $this->parametresUrl; |
$parametres['navigation.depart'] = $depart; |
$parametres['navigation.limite'] = $limite; |
|
84,17 → 69,15 |
} |
|
/** |
* Récupérer le lien pour afficher les images précédentes en fonction des paramètres |
* */ |
* Récupérer le lien pour afficher les images précédentes en fonction des paramètres |
*/ |
public function recupererHrefPrecedent() { |
$departActuel = $this->getDepart(); |
$limite = $this->getLimite(); |
$departPrecedent = $departActuel - $limite; |
|
$url = null; |
|
if ($departActuel > 0) { |
$url = $this->getUrl($departPrecedent, $limite); |
$url = $this->obtenirUrlNavigation($departPrecedent, $limite); |
} |
return $url; |
} |
101,7 → 84,7 |
|
/** |
* Récupérer le lien pour afficher les images suivantes en fonction des paramètres |
* */ |
*/ |
public function recupererHrefSuivant() { |
$departActuel = $this->getDepart(); |
$limite = $this->getLimite(); |
108,7 → 91,7 |
$departSuivant = $departActuel + $limite; |
$url = null; |
if ($departSuivant < $this->total) { |
$url = $this->getUrl($departSuivant, $limite); |
$url = $this->obtenirUrlNavigation($departSuivant, $limite); |
} |
return $url; |
} |
115,7 → 98,7 |
|
/** |
* Retourner le nombre total d'éléments |
* */ |
*/ |
public function getTotal() { |
return $this->total; |
} |
123,8 → 106,42 |
/** |
* Enregistrer le nombre total d'éléments |
* @param int $total le nombre d'éléments |
* */ |
*/ |
public function setTotal($total) { |
$this->total = $total; |
} |
|
/** |
* Changer la valeur de sans limite pour ne pas l'afficher dans l'entete |
* */ |
public function setSansLimite() { |
$this->sansLimite = true; |
} |
|
/** |
* Créer l'entête en fonction des paramètres donnés |
*/ |
public function getEntete() { |
$entete = array(); |
$entete['masque'] = $this->conteneur->getMasque()->getChaineMasque(); |
|
$entete['total'] = $this->getTotal(); |
if ($this->sansLimite == false) { |
$entete['depart'] = $this->getDepart(); |
$entete['limite'] = $this->getLimite(); |
|
$lienPrecedent = $this->recupererHrefPrecedent(); |
|
if ($lienPrecedent != null) { |
$entete['href.precedent'] = $lienPrecedent; |
} |
|
$lienSuivant = $this->recupererHrefSuivant(); |
if ($lienSuivant) { |
$entete['href.suivant'] = $lienSuivant; |
} |
} |
|
return $entete; |
} |
} |