PageRenderTime 55ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/DEV/LIB/paginationhelper.class.php

https://github.com/chrisbst35/LI_LEMONDE
PHP | 846 lines | 493 code | 250 blank | 103 comment | 191 complexity | 4031c051778a30767d6fbe30935fa2d3 MD5 | raw file
  1. <?php
  2. /**
  3. * Classe de pagination de LI.com
  4. */
  5. class PaginationHelper {
  6. // instance de la classe
  7. private static $_objInstance = null;
  8. // chaine de caractères correspondant au paginateur
  9. private static $_strPagin = null;
  10. // type de paginateur demandé ("dernieres_annonces_hautbas" ou "resultats_villesdepts_haut" ou "resultats_villesdepts_bas"...)
  11. private $_typPagin;
  12. // liste des URLs sur lesquelles il faut paginer
  13. private $_lnkPages;
  14. // numéro de la page sélectionnée
  15. private $_selPage, $_selPagePad;
  16. // numéro de la page maximum
  17. private $_maxPage;
  18. // nom de la classe CSS pour pages non sélectionnées, page sélectionnée, flêche précédent/suivant
  19. private $_nrmClass, $_selClass, $_arrClass;
  20. // chaine de caractères faisant séparateur entre pages
  21. private $_sepString;
  22. // plage, en nombre de pages, autour de $_selPage (utile pour le paginateur "bien_villes_piece_bas" par exemple)
  23. private $_plgPages = 2;
  24. // plage, en nombre de pages, autour de $_selPage, pour les pages du début ou de fin de paginateur
  25. private $_plgPages2 = 5;
  26. /**
  27. * Retourne une instance de la classe PaginationHelper
  28. */
  29. public static function getInstance($typPagin, $selPage, $maxPage, $lnkPages, $nrmClass="", $selClass="", $arrClass="", $sepString="") {
  30. if (is_null(self::$_objInstance) || (!is_null(self::$_objInstance) && (self::$_objInstance->_typPagin != "dernieres_annonces_hautbas"))) {
  31. self::$_objInstance = new PaginationHelper($typPagin, $selPage, $maxPage, $lnkPages, $nrmClass, $selClass, $arrClass, $sepString);
  32. }
  33. return self::$_objInstance;
  34. }
  35. /**
  36. * Construteur
  37. */
  38. private function __construct($typPagin, $selPage, $maxPage, $lnkPages, $nrmClass, $selClass, $arrClass, $sepString) {
  39. $this->_typPagin = $typPagin;
  40. $this->_selPage = $selPage;
  41. $this->_maxPage = $maxPage;
  42. $this->_lnkPages = $lnkPages;
  43. $this->_nrmClass = $nrmClass;
  44. $this->_selClass = $selClass;
  45. $this->_arrClass = $arrClass;
  46. $this->_sepString = $sepString;
  47. }
  48. /**
  49. * Retourne une chaine constituée de tous les éléments de pagination
  50. */
  51. public function getPagination($pos = '') {
  52. // test si chaine du paginateur déjà calculée ou non (si oui, on la retourne => gain de perfs)
  53. if (!is_null(self::$_strPagin) && $pos == '') {
  54. return self::$_strPagin;
  55. }
  56. $str = "";
  57. if($pos != '') {
  58. $this->_typPagin = $pos;
  59. }
  60. // paginateur où toute page est accessible en 3 clics max, brouillage JS sur pages déjà "vues"...
  61. if ($this->_typPagin == "dernieres_annonces_hautbas") {
  62. //echo "<br>[ selPage=".$this->_selPage." / "."maxPage=".$this->_maxPage." ]<br>";
  63. //echo "<br><pre>[ linksPages = ".print_r($this->_lnkPages, true)." ]</pre><br>";
  64. if ((($this->_selPage+1) < 1) || (($this->_selPage+1) > $this->_maxPage)) {
  65. return "";
  66. }
  67. // page 1
  68. $i = 1;
  69. $doNotFollow = true; // lien tjs brouillé
  70. $str .= $this->itemPagination($i, $doNotFollow);
  71. // pages jusqu'à ($this->_selPage+1)
  72. $maxLocal = 0;
  73. for ($n=strlen($this->_selPage+1); $n>0; $n--) {
  74. $p = intval(substr(($this->_selPage+1), strlen($this->_selPage+1)-$n, 1));
  75. $w = pow(10, $n-1);
  76. $debPage = $maxLocal + $w;
  77. $debPage = ($debPage == 1 ? 2 : $debPage);
  78. $endPage = $maxLocal + $p*$w;
  79. $stpPage = $w;
  80. for ($i=$debPage; $i<=$endPage; $i+=$stpPage) {
  81. if ($i >= $this->_maxPage) break;
  82. $doNotFollow = true; // lien brouillé car avant page en cours (donc déjà vu)
  83. $str .= $this->itemPagination($i, $doNotFollow);
  84. }
  85. $maxLocal = $endPage;
  86. }
  87. // pages après ($this->_selPage+1)
  88. for ($n=strlen($this->_maxPage); $n>0; $n--) {
  89. $this->_selPagePad = str_pad(($this->_selPage+1), strlen($this->_maxPage), "0", STR_PAD_LEFT);
  90. $p = intval(substr($this->_selPagePad, 0, $n));
  91. $q = intval(substr($this->_selPagePad, 0, $n-1));
  92. $w = pow(10, strlen($this->_selPagePad)-$n);
  93. $debPage = $p*$w + $w;
  94. $endPage = ($q*$w + $w)*10;
  95. $stpPage = $w;
  96. for ($i=$debPage; $i<$endPage; $i+=$stpPage) {
  97. if ($i >= $this->_maxPage) break;
  98. $doFollow = false;
  99. $doFollow |= (($this->_selPage+1) == 1); // liens non brouillés pour tous les liens après page 1 si on est en page 1
  100. for ($r=strlen($i); $r>=1; $r--) {
  101. if (strlen($i) > $r) {
  102. $z = pow(10, $r);
  103. $j = intval(substr($i, -$r));
  104. $doFollow |= ((($this->_selPage+1) % $z) == 0) && ($j >= 1) && ($j <= ($z - 1)); // liens non brouillés sur les pages ...1 à ...9 pour les pages sélectionnées en ...0
  105. }
  106. }
  107. $doNotFollow = !$doFollow;
  108. $str .= $this->itemPagination($i, $doNotFollow);
  109. }
  110. }
  111. // page $this->_maxPage
  112. if ($this->_maxPage > 1) {
  113. $i = $this->_maxPage;
  114. $doNotFollow = (($this->_selPage+1) > 1); // lien brouillé si on est après la page 1
  115. $str .= $this->itemPagination($i, $doNotFollow);
  116. }
  117. } else if ($this->_typPagin == "bien_villes_piece_bas") {
  118. //echo "<br>[ selPage=".$this->_selPage." / "."maxPage=".$this->_maxPage." / "."plgPages=".$this->_plgPages." ]<br>";
  119. //echo "<br><pre>[ linksPages = ".print_r($this->_lnkPages, true)." ]</pre><br>";
  120. if ((($this->_selPage+1) < 1) || (($this->_selPage+1) > $this->_maxPage)) {
  121. return "";
  122. }
  123. // lien précédent, si nécessaire
  124. if ($this->_selPage+1 > 1) {
  125. $doNotFollow = true; // lien non suivi
  126. $doBtnPrevious = true; // lien précédent
  127. $str .= $this->arrowPagination($this->_selPage, $doNotFollow, $doBtnPrevious);
  128. }
  129. // lien page 1
  130. $i = 1;
  131. $doNotFollow = false; // lien tjs suivi
  132. $str .= $this->itemPagination($i, $doNotFollow);
  133. // liens pages autour de $this->_selPage
  134. if ($this->_selPage < ($this->_plgPages2 - 1)) { // pages de début du paginateur
  135. $debPage = 2;
  136. $endPage = (($this->_maxPage - ($this->_plgPages2 - 0)) > 0 ? ($this->_plgPages2 + 1) : $this->_maxPage);
  137. } else if ($this->_selPage > ($this->_maxPage - ($this->_plgPages2))) { // pages de fin du paginateur
  138. $debPage = (($this->_maxPage - $this->_plgPages2) > 0 ? $this->_maxPage - ($this->_plgPages2 - 1) : $this->_maxPage - ($this->_plgPages2 - 2));
  139. $endPage = $this->_maxPage;
  140. } else { // pages au milieu du paginateur
  141. $debPage = (($this->_selPage - $this->_plgPages + 1) > 1 ? ($this->_selPage - $this->_plgPages + 1) : 2);
  142. $endPage = (($this->_selPage + $this->_plgPages + 2) < $this->_maxPage ? ($this->_selPage + $this->_plgPages + 2) : $this->_maxPage);
  143. }
  144. //echo "<br>[ debPage=".$debPage." / "."endPage=".$endPage." / "."plgPages=".$this->_plgPages2." ]<br>";
  145. // texte ... si nécessaire
  146. if ($debPage > 2) {
  147. $str .= "... ";
  148. }
  149. for ($i=$debPage; $i<$endPage; $i++) {
  150. $doNotFollow = false; // lien tjs suivi
  151. $str .= $this->itemPagination($i, $doNotFollow);
  152. }
  153. // texte ... si nécessaire
  154. if ($endPage < $this->_maxPage) {
  155. $str .= "... ";
  156. }
  157. // lien page $this->_maxPage
  158. if ($this->_maxPage > 1) {
  159. $i = $this->_maxPage;
  160. $doNotFollow = false; // lien tjs suivi
  161. $str .= $this->itemPagination($i, $doNotFollow);
  162. }
  163. // lien suivant, si nécessaire
  164. if ($this->_selPage+1 < $this->_maxPage) {
  165. $doNotFollow = true; // lien non suivi
  166. $doBtnPrevious = false; // lien suivant
  167. $str .= $this->arrowPagination(($this->_selPage + 2), $doNotFollow, $doBtnPrevious);
  168. }
  169. } elseif ($this->_typPagin == "minformer") {
  170. if ((($this->_selPage+1) < 1) || (($this->_selPage+1) > $this->_maxPage)) {
  171. return "";
  172. }
  173. // lien précédent, si nécessaire
  174. $strArrowLeft = "&nbsp;";
  175. if ($this->_selPage+1 > 1) {
  176. // $doNotFollow = true; // lien non suivi
  177. $doBtnPrevious = true; // lien précédent
  178. $strArrowLeft = $this->arrowPaginationMinformer($this->_selPage, $doNotFollow, $doBtnPrevious);
  179. }
  180. // lien page 1
  181. $i = 1;
  182. $doNotFollow = false; // lien tjs suivi
  183. $strItemsNums = $this->itemPagination($i, $doNotFollow);
  184. // liens pages autour de $this->_selPage
  185. if ($this->_selPage < ($this->_plgPages2 - 1)) { // pages de début du paginateur
  186. $debPage = 2;
  187. $endPage = (($this->_maxPage - ($this->_plgPages2 - 0)) > 0 ? ($this->_plgPages2 + 1) : $this->_maxPage);
  188. } else if ($this->_selPage > ($this->_maxPage - ($this->_plgPages2))) { // pages de fin du paginateur
  189. $debPage = (($this->_maxPage - $this->_plgPages2) > 0 ? $this->_maxPage - ($this->_plgPages2 - 1) : $this->_maxPage - ($this->_plgPages2 - 2));
  190. $endPage = $this->_maxPage;
  191. } else { // pages au milieu du paginateur
  192. $debPage = (($this->_selPage - $this->_plgPages + 1) > 1 ? ($this->_selPage - $this->_plgPages + 1) : 2);
  193. $endPage = (($this->_selPage + $this->_plgPages + 2) < $this->_maxPage ? ($this->_selPage + $this->_plgPages + 2) : $this->_maxPage);
  194. }
  195. //echo "<br>[ debPage=".$debPage." / "."endPage=".$endPage." / "."plgPages=".$this->_plgPages2." ]<br>";
  196. // texte ... si nécessaire
  197. if ($debPage > 2) {
  198. $strItemsNums .= "&nbsp; ... ";
  199. }
  200. for ($i=$debPage; $i<$endPage; $i++) {
  201. $doNotFollow = false; // lien tjs suivi
  202. $strItemsNums .= $this->itemPagination($i, $doNotFollow);
  203. }
  204. // texte ... si nécessaire
  205. if ($endPage < $this->_maxPage) {
  206. $strItemsNums .= "&nbsp; ... &nbsp; - ";
  207. }
  208. // lien page $this->_maxPage
  209. if ($this->_maxPage > 1) {
  210. $i = $this->_maxPage;
  211. $doNotFollow = false; // lien tjs suivi
  212. $strItemsNums .= $this->itemPagination($i, $doNotFollow);
  213. }
  214. // lien suivant, si nécessaire
  215. $strArrowRight = "&nbsp;";
  216. if ($this->_selPage+1 < $this->_maxPage) {
  217. $doNotFollow = true; // lien non suivi
  218. $doBtnPrevious = false; // lien suivant
  219. $strArrowRight = $this->arrowPaginationMinformer(($this->_selPage + 2), $doNotFollow, $doBtnPrevious);
  220. }
  221. // str est ici un tableau en fait
  222. $str = array(
  223. 'arrowLeft' => $strArrowLeft,
  224. 'itemsNums' => $strItemsNums,
  225. 'arrowRight' => $strArrowRight
  226. );
  227. } else if ($this->_typPagin == "resultats_top_v7") {
  228. //echo "<br>[ selPage=".$this->_selPage." / "."maxPage=".$this->_maxPage." / "."plgPages=".$this->_plgPages." ]<br>";
  229. //echo "<br><pre>[ linksPages = ".print_r($this->_lnkPages, true)." ]</pre><br>";
  230. if ((($this->_selPage+1) < 1) || (($this->_selPage+1) > $this->_maxPage)) {
  231. return "";
  232. }
  233. // lien précédent, si nécessaire
  234. if ($this->_selPage+1 > 1) {
  235. $doNotFollow = true; // lien non suivi
  236. $doBtnPrevious = true; // lien précédent
  237. $str .= $this->getPaginationBtnV7($this->_selPage, $doNotFollow, $doBtnPrevious);
  238. }
  239. $str .= "<span ".($doBtnPrevious ? '' : 'style="padding-left: 20px;"')."class=\"pagination_status\">Page ".(n_f($this->_selPage+1))." / ".n_f($this->_maxPage)."</span>";
  240. // lien suivant, si nécessaire
  241. if ($this->_selPage+1 < $this->_maxPage) {
  242. $doNotFollow = true; // lien non suivi
  243. $doBtnPrevious = false; // lien suivant
  244. $str .= $this->getPaginationBtnV7(($this->_selPage + 2), $doNotFollow, $doBtnPrevious);
  245. }
  246. } else if ($this->_typPagin == "resultats_top_v7.2" || $this->_typPagin == "resultats_bottom_v7.2") {
  247. global $_global;
  248. if ((($this->_selPage+1) < 1) || (($this->_selPage+1) > $this->_maxPage)) {
  249. return "";
  250. }
  251. // lien précédent, si nécessaire
  252. if ($this->_selPage+1 > 1) {
  253. $doNotFollow = true; // lien non suivi
  254. $doBtnPrevious = true; // lien précédent
  255. $str .= $this->getPaginationBtnV7($this->_selPage, $doNotFollow, $doBtnPrevious);
  256. }
  257. // lien page 1
  258. $i = 1;
  259. $doNotFollow = false; // lien tjs suivi
  260. // patch fix pour pagination coloc
  261. if($_global['univers'] == 8) $fix_width = 525;
  262. else $fix_width = 340;
  263. $str .= '<span class="pagination_numbers" '.($doBtnPrevious ? '' : 'style="width: '.$fix_width.'px;"').'>';
  264. // liens pages autour de $this->_selPage
  265. if ($this->_selPage < ($this->_plgPages2 - 1)) { // pages de début du paginateur
  266. $debPage = 2;
  267. $endPage = (($this->_maxPage - ($this->_plgPages2 - 0)) > 0 ? ($this->_plgPages2 + 1) : $this->_maxPage);
  268. } else if ($this->_selPage > ($this->_maxPage - ($this->_plgPages2))) { // pages de fin du paginateur
  269. $debPage = (($this->_maxPage - $this->_plgPages2) > 0 ? $this->_maxPage - ($this->_plgPages2 - 1) : $this->_maxPage - ($this->_plgPages2 - 2));
  270. $endPage = $this->_maxPage;
  271. } else { // pages au milieu du paginateur
  272. $debPage = (($this->_selPage - $this->_plgPages + 1) > 1 ? $this->_selPage : 1);
  273. $endPage = (($this->_selPage + $this->_plgPages + 1) < $this->_maxPage ? ($this->_selPage + $this->_plgPages + 1) : $this->_maxPage);
  274. }
  275. if($endPage > 1) {
  276. // $str .= "<span class=\"pagination_status\">Page ".n_f($this->_selPage+1)." / ".n_f($this->_maxPage)."</span>";
  277. $str .= $this->itemPagination($i, $doNotFollow);
  278. //echo "<br>[ debPage=".$debPage." / "."endPage=".$endPage." / "."plgPages=".$this->_plgPages2." ]<br>";
  279. // texte ... si nécessaire
  280. if ($debPage > 2) {
  281. $str .= "<span class='pgn_dtd'>...</span>";
  282. } else {
  283. $str .= " ";
  284. }
  285. if($endPage > 999) {
  286. if($this->_selPage == ($this->_maxPage - 4))
  287. $endPage = $endPage-1;
  288. else if($endPage == $this->_maxPage)
  289. $debPage = $debPage+1;
  290. }
  291. for ($i=$debPage; $i<$endPage; $i++) {
  292. if($debPage < 2 || $i > $debPage) {
  293. $str .= " ";
  294. }
  295. $doNotFollow = false; // lien tjs suivi
  296. $str .= $this->itemPagination($i, $doNotFollow);
  297. }
  298. // texte ... si nécessaire
  299. if ($endPage < $this->_maxPage) {
  300. $str .= "<span class='pgn_dtd'>...</span>";
  301. } else if($endPage > 2){
  302. $str .= " ";
  303. }
  304. // lien page $this->_maxPage
  305. if ($this->_maxPage > 1) {
  306. $i = $this->_maxPage;
  307. $doNotFollow = false; // lien tjs suivi
  308. $str .= $this->itemPagination($i, $doNotFollow);
  309. }
  310. }
  311. $str .= "</span>";
  312. // lien suivant, si nécessaire
  313. if ($this->_selPage+1 < $this->_maxPage) {
  314. $doNotFollow = true; // lien non suivi
  315. $doBtnPrevious = false; // lien suivant
  316. $str .= $this->getPaginationBtnV7(($this->_selPage + 2), $doNotFollow, $doBtnPrevious);
  317. }
  318. } else if ($this->_typPagin == "resultats_bottom_v7") {
  319. //echo "<br>[ selPage=".$this->_selPage." / "."maxPage=".$this->_maxPage." / "."plgPages=".$this->_plgPages." ]<br>";
  320. //echo "<br><pre>[ linksPages = ".print_r($this->_lnkPages, true)." ]</pre><br>";
  321. if ((($this->_selPage+1) < 1) || (($this->_selPage+1) > $this->_maxPage)) {
  322. return "";
  323. }
  324. // lien précédent, si nécessaire
  325. if ($this->_selPage+1 > 1) {
  326. $doNotFollow = true; // lien non suivi
  327. $doBtnPrevious = true; // lien précédent
  328. $str .= $this->getPaginationBtnV7($this->_selPage, $doNotFollow, $doBtnPrevious);
  329. }
  330. // lien page 1
  331. $i = 1;
  332. $doNotFollow = false; // lien tjs suivi
  333. $str .= '<span class="pagination_numbers" '.($doBtnPrevious ? '' : 'style="padding-left: 45px;"').'>';
  334. // liens pages autour de $this->_selPage
  335. if ($this->_selPage < ($this->_plgPages2 - 1)) { // pages de début du paginateur
  336. $debPage = 2;
  337. $endPage = (($this->_maxPage - ($this->_plgPages2 - 0)) > 0 ? ($this->_plgPages2 + 1) : $this->_maxPage);
  338. } else if ($this->_selPage > ($this->_maxPage - ($this->_plgPages2))) { // pages de fin du paginateur
  339. $debPage = (($this->_maxPage - $this->_plgPages2) > 0 ? $this->_maxPage - ($this->_plgPages2 - 1) : $this->_maxPage - ($this->_plgPages2 - 2));
  340. $endPage = $this->_maxPage;
  341. } else { // pages au milieu du paginateur
  342. $debPage = (($this->_selPage - $this->_plgPages + 1) > 1 ? ($this->_selPage - $this->_plgPages + 1) : 2);
  343. $endPage = (($this->_selPage + $this->_plgPages + 2) < $this->_maxPage ? ($this->_selPage + $this->_plgPages + 2) : $this->_maxPage);
  344. }
  345. if($endPage > 1) {
  346. $str .= $this->itemPagination($i, $doNotFollow);
  347. //echo "<br>[ debPage=".$debPage." / "."endPage=".$endPage." / "."plgPages=".$this->_plgPages2." ]<br>";
  348. // texte ... si nécessaire
  349. if ($debPage > 2) {
  350. $str .= "... ";
  351. } else {
  352. $str .= " - ";
  353. }
  354. for ($i=$debPage; $i<$endPage; $i++) {
  355. if($debPage < 2 || $i > $debPage) {
  356. $str .= " - ";
  357. }
  358. $doNotFollow = false; // lien tjs suivi
  359. $str .= $this->itemPagination($i, $doNotFollow);
  360. }
  361. // texte ... si nécessaire
  362. if ($endPage < $this->_maxPage) {
  363. $str .= "... ";
  364. } else if($endPage > 2){
  365. $str .= " - ";
  366. }
  367. // lien page $this->_maxPage
  368. if ($this->_maxPage > 1) {
  369. $i = $this->_maxPage;
  370. $doNotFollow = false; // lien tjs suivi
  371. $str .= $this->itemPagination($i, $doNotFollow);
  372. }
  373. }
  374. $str .= "</span>";
  375. $str .= "<span class=\"pagination_status\">Page ".n_f($this->_selPage+1)." / ".n_f($this->_maxPage)."</span>";
  376. // lien suivant, si nécessaire
  377. if ($this->_selPage+1 < $this->_maxPage) {
  378. $doNotFollow = true; // lien non suivi
  379. $doBtnPrevious = false; // lien suivant
  380. $str .= $this->getPaginationBtnV7(($this->_selPage + 2), $doNotFollow, $doBtnPrevious);
  381. }
  382. }else if ($this->_typPagin == "resultats_agences") {
  383. global $_global;
  384. if ((($this->_selPage+1) < 1) || (($this->_selPage+1) > $this->_maxPage)) {
  385. return "";
  386. }
  387. // lien précédent, si nécessaire
  388. if ($this->_selPage+1 > 1) {
  389. $doNotFollow = true; // lien non suivi
  390. $doBtnPrevious = true; // lien précédent
  391. $str .= $this->getPaginationBtnV7($this->_selPage, $doNotFollow, $doBtnPrevious);
  392. }
  393. // lien page 1
  394. $i = 1;
  395. $doNotFollow = false; // lien tjs suivi
  396. // patch fix pour agination coloc
  397. $fix_width = 346;//largeur tri colonnes
  398. $str .= '<span class="pagination_numbers" '.($doBtnPrevious ? '' : 'style="width: '.$fix_width.'px;"').'>';
  399. // liens pages autour de $this->_selPage
  400. if ($this->_selPage < ($this->_plgPages2 - 1)) { // pages de début du paginateur
  401. $debPage = 2;
  402. $endPage = (($this->_maxPage - ($this->_plgPages2 - 0)) > 0 ? ($this->_plgPages2 + 1) : $this->_maxPage);
  403. } else if ($this->_selPage > ($this->_maxPage - ($this->_plgPages2))) { // pages de fin du paginateur
  404. $debPage = (($this->_maxPage - $this->_plgPages2) > 0 ? $this->_maxPage - ($this->_plgPages2 - 1) : $this->_maxPage - ($this->_plgPages2 - 2));
  405. $endPage = $this->_maxPage;
  406. } else { // pages au milieu du paginateur
  407. $debPage = (($this->_selPage - $this->_plgPages + 1) > 1 ? $this->_selPage : 1);
  408. $endPage = (($this->_selPage + $this->_plgPages + 1) < $this->_maxPage ? ($this->_selPage + $this->_plgPages + 1) : $this->_maxPage);
  409. }
  410. if($endPage > 1) {
  411. // $str .= "<span class=\"pagination_status\">Page ".n_f($this->_selPage+1)." / ".n_f($this->_maxPage)."</span>";
  412. $str .= $this->itemPagination($i, $doNotFollow);
  413. //echo "<br>[ debPage=".$debPage." / "."endPage=".$endPage." / "."plgPages=".$this->_plgPages2." ]<br>";
  414. // texte ... si nécessaire
  415. if ($debPage > 2) {
  416. $str .= "<span class='pgn_dtd'>...</span>";
  417. } else {
  418. $str .= " ";
  419. }
  420. if($endPage > 999) {
  421. if($this->_selPage == ($this->_maxPage - 4))
  422. $endPage = $endPage-1;
  423. else if($endPage == $this->_maxPage)
  424. $debPage = $debPage+1;
  425. }
  426. for ($i=$debPage; $i<$endPage; $i++) {
  427. if($debPage < 2 || $i > $debPage) {
  428. $str .= " ";
  429. }
  430. $doNotFollow = false; // lien tjs suivi
  431. $str .= $this->itemPagination($i, $doNotFollow);
  432. }
  433. // texte ... si nécessaire
  434. if ($endPage < $this->_maxPage) {
  435. $str .= "<span class='pgn_dtd'>...</span>";
  436. } else if($endPage > 2){
  437. $str .= " ";
  438. }
  439. // lien page $this->_maxPage
  440. if ($this->_maxPage > 1) {
  441. $i = $this->_maxPage;
  442. $doNotFollow = false; // lien tjs suivi
  443. $str .= $this->itemPagination($i, $doNotFollow);
  444. }
  445. }
  446. $str .= "</span>";
  447. // lien suivant, si nécessaire
  448. if ($this->_selPage+1 < $this->_maxPage) {
  449. $doNotFollow = true; // lien non suivi
  450. $doBtnPrevious = false; // lien suivant
  451. $str .= $this->getPaginationBtnV7(($this->_selPage + 2), $doNotFollow, $doBtnPrevious);
  452. }
  453. }
  454. // stockage de la chaine du paginateur
  455. self::$_strPagin = $str;
  456. return self::$_strPagin;
  457. }
  458. /**
  459. * Retourne un élement de pagination
  460. */
  461. private function itemPagination($i, $doNotFollow=false) {
  462. // on brouille les liens de spages supérieures à 5
  463. if($i > 5){
  464. $doNotFollow = true;
  465. }
  466. $pgnCssClass = ($i == ($this->_selPage+1) ? $this->_selClass : "" );
  467. if ($this->_typPagin == "resultats_top_v7.2" || $this->_typPagin == "resultats_bottom_v7.2" || $this->_typPagin == "resultats_agences") {
  468. $str = "<span id=\"pgn".($this->_typPagin == "resultats_bottom_v7.2"?"b":"")."_left$i\" class=\"pgn_left".($pgnCssClass!= '' ? "_$pgnCssClass" : "")."\">&nbsp;</span>";
  469. $pgnMouseOver = " onmouseover=\"pgn_hover($i)\"";
  470. $pgnMouseOut = " onmouseout=\"pgn_out($i)\"";
  471. }else {
  472. $pgnMouseOver = "";
  473. $pgnMouseOut = "";
  474. $str = "";
  475. }
  476. $addSepString = (!empty($this->_sepString) && (($this->_selPage) < $this->_maxPage) ? $this->_sepString : ""); // séparateur entre pages
  477. $addTagLink = ($i != $this->_selPage+1); // vrai si ajout de lien (brouillé ou non), faux sinon (ie pas d'auto-lien pour la page courante)
  478. if ($addTagLink) { // ajout de lien
  479. if ($doNotFollow) { // brouillage du lien en JS
  480. // var_dump($pgnMouseOver, $pgnMouseOut); die;
  481. $addUrlClass = (!empty($this->_lnkPages[$i-1]) ? MythomanieHelper::encode($this->_lnkPages[$i-1]) : "");
  482. $addCssClass = ($i == ($this->_selPage+1) ? ($this->_selClass!="" ? " ".$this->_selClass : "") : ($this->_nrmClass!="" ? " ".$this->_nrmClass : ""));
  483. $str .= "<span rel=\"".$i."\" class=\"".$addUrlClass.$addCssClass."\">".n_f($i)."</span>".$addSepString;
  484. //$str .= "<span class=\"".$addUrlClass.$addCssClass."\">"."<font color=\"red\">".$i."</font>"."</span>".$addSepString;
  485. //$str .= "["."<font color=\"red\">".($i == ($this->_selPage+1) ? "<b>".$i."</</b>" : $i)."</font>"."]".$addSepString;
  486. } else { // lien normal en HTML
  487. $addUrlHref = (!empty($this->_lnkPages[$i-1]) ? " href=\"".$this->_lnkPages[$i-1]."\"" : "");
  488. $addCssClass = ($i == ($this->_selPage+1) ? ($this->_selClass!="" ? " class=\"".$this->_selClass."\"" : "") : ($this->_nrmClass!="" ? " class=\"".$this->_nrmClass."\"" : ""));
  489. $str .= "<a rel=\"".$i."\" ".$addUrlHref.$addCssClass.">".n_f($i)."</a>".($i<$this->_maxPage ? $addSepString : "");
  490. //$str .= "[".($i == ($this->_selPage+1) ? "<b>".$i."</b>" : $i)."]".$addSepString;
  491. }
  492. } else { // pas de lien
  493. $addCssClass = ($i == ($this->_selPage+1) ? ($this->_selClass!="" ? "".$this->_selClass : "") : ($this->_nrmClass!="" ? "".$this->_nrmClass : ""));
  494. $str .= "<span rel=\"".$i."\" class=\"".$addCssClass."\">".n_f($i)."</span>".($i<$this->_maxPage ? $addSepString : "");
  495. //$str .= "[".($i == ($this->_selPage+1) ? "<b>".$i."</b>" : $i)."]".$addSepString;
  496. }
  497. if ($this->_typPagin == "resultats_top_v7.2" || $this->_typPagin == "resultats_bottom_v7.2" || $this->_typPagin == 'resultats_agences')
  498. $str .= "<span rel=\"".$i."\" id=\"pgn".($this->_typPagin == "resultats_bottom_v7.2"?"b":"")."_right$i\" class=\"pgn_right".($pgnCssClass!= '' ? "_$pgnCssClass" : "")."\">&nbsp;</span>";
  499. return $str;
  500. }
  501. /**
  502. * Retourne une flêche de pagination
  503. */
  504. private function arrowPagination($i, $doNotFollow=false, $doBtnPrevious=false) {
  505. $doNotFollow = true;
  506. $str = "";
  507. $addSepString = (!empty($this->_sepString) && (($this->_selPage+1) < $this->_maxPage) ? $this->_sepString : "");
  508. if ($doBtnPrevious) { // Précédent
  509. $lblArrow = "PRÉCÉDENT";
  510. $imgArrow = get_urlmmf("/pictos/opt_precedent_blue.png");
  511. } else { // Suivant
  512. $lblArrow = "SUIVANT";
  513. $imgArrow = get_urlmmf("/pictos/opt_suivant_blue.png");
  514. }
  515. if ($doNotFollow) { // brouillage du lien en JS
  516. $addUrlClass = (!empty($this->_lnkPages[$i-1]) ? MythomanieHelper::encode($this->_lnkPages[$i-1]) : "");
  517. $addCssClass = ($this->_arrClass!="" ? " ".$this->_arrClass : "");
  518. if ($doBtnPrevious) { // Précédent
  519. $str .= "<span class=\"".$addUrlClass.$addCssClass."\"><img src=\"".$imgArrow."\" border=\"0\">&nbsp;".$lblArrow."&nbsp;&nbsp;</span>|";
  520. } else {
  521. $str .= "|<span class=\"".$addUrlClass.$addCssClass."\">&nbsp;".$lblArrow."&nbsp;<img src=\"".$imgArrow."\" border=\"0\"></span>";
  522. }
  523. } else { // lien normal en HTML
  524. $addUrlHref = (!empty($this->_lnkPages[$i-1]) ? " href=\"".$this->_lnkPages[$i-1]."\"" : "");
  525. $addCssClass = ($this->_arrClass!="" ? " class=\"".$this->_arrClass."\"" : "");
  526. if ($doBtnPrevious) { // Précédent
  527. $str .= "<a".$addUrlHref.$addCssClass."><img src=\"".$imgArrow."\" border=\"0\">&nbsp;".$lblArrow."&nbsp;&nbsp;</a>|";
  528. } else { // Suivant
  529. $str .= "|<a".$addUrlHref.$addCssClass.">&nbsp;".$lblArrow."&nbsp;<img src=\"".$imgArrow."\" border=\"0\"></a>";
  530. }
  531. }
  532. return $str;
  533. }
  534. /**
  535. * Retourne une flêche de pagination
  536. */
  537. private function getPaginationBtnV7($i, $doNotFollow=false, $doBtnPrevious=false) {
  538. $doNotFollow = true;
  539. $str = "";
  540. $addSepString = (!empty($this->_sepString) && (($this->_selPage+1) < $this->_maxPage) ? $this->_sepString : "");
  541. if ($doBtnPrevious) { // Précédent
  542. $addCssClass = " pagination_arrow_left";
  543. } else { // Suivant
  544. $addCssClass = " pagination_arrow_right";
  545. }
  546. if ($doNotFollow) { // brouillage du lien en JS
  547. $addUrlClass = (!empty($this->_lnkPages[$i-1]) ? MythomanieHelper::encode($this->_lnkPages[$i-1]) : "");
  548. if ($doBtnPrevious) { // Précédent
  549. $str .= "<span alt='Précédent' class=\"".$addUrlClass.$addCssClass."\"></span>";
  550. } else {
  551. $str .= "<span alt='Suivant' class=\"".$addUrlClass.$addCssClass."\"></span>";
  552. }
  553. } else { // lien normal en HTML
  554. $addUrlHref = (!empty($this->_lnkPages[$i-1]) ? " href=\"".$this->_lnkPages[$i-1]."\"" : "");
  555. if ($doBtnPrevious) { // Précédent
  556. $str .= "<a alt='Précédent' ".$addUrlHref.$addCssClass.">Précédent</a>";
  557. } else { // Suivant
  558. $str .= "<a alt='Suivant' ".$addUrlHref.$addCssClass.">Suivant</a>";
  559. }
  560. }
  561. return $str;
  562. }
  563. /**
  564. * Retourne une flêche de pagination
  565. */
  566. private function arrowPaginationMinformer($i, $doNotFollow=false, $doBtnPrevious=false) {
  567. $str = "";
  568. $addSepString = (!empty($this->_sepString) && (($this->_selPage+1) < $this->_maxPage) ? $this->_sepString : "");
  569. if ($doBtnPrevious) { // Précédent
  570. $lblArrow = "";
  571. $imgArrow = get_urlmmf("/pictos/opt_precedent_blue.png");
  572. } else { // Suivant
  573. $lblArrow = "";
  574. $imgArrow = get_urlmmf("/pictos/opt_suivant_blue.png");
  575. }
  576. if ($doNotFollow) { // brouillage du lien en JS
  577. $addUrlClass = (!empty($this->_lnkPages[$i-1]) ? MythomanieHelper::encode($this->_lnkPages[$i-1]) : "");
  578. $addCssClass = ($this->_arrClass!="" ? " ".$this->_arrClass : "");
  579. if ($doBtnPrevious) { // Précédent
  580. $str .= "<span class=\"".$addUrlClass.$addCssClass."\" id=\"btn_pagin_prev\"><img src=\"".$imgArrow."\" alt=\"Page précédente\" border=\"0\">&nbsp;Page précédente</span>";
  581. } else {
  582. $str .= "<span class=\"".$addUrlClass.$addCssClass."\" id=\"btn_pagin_next\">Page suivante&nbsp;<img src=\"".$imgArrow."\" alt=\"Page suivante\" border=\"0\"></span>";
  583. }
  584. } else { // lien normal en HTML
  585. $addUrlHref = (!empty($this->_lnkPages[$i-1]) ? " href=\"".$this->_lnkPages[$i-1]."\"" : "");
  586. $addCssClass = ($this->_arrClass!="" ? " class=\"".$this->_arrClass."\"" : "");
  587. if ($doBtnPrevious) { // Précédent
  588. $str .= "<a".$addUrlHref.$addCssClass."><img src=\"".$imgArrow."\" id=\"btn_pagin_prev\" alt=\"Page précédente\" border=\"0\">&nbsp;Page précédente</a>";
  589. } else { // Suivant
  590. $str .= "<a".$addUrlHref.$addCssClass.">Page suivante&nbsp;<img src=\"".$imgArrow."\" id=\"btn_pagin_next\" alt=\"Page suivante\" border=\"0\"></a>";
  591. }
  592. }
  593. return $str;
  594. }
  595. }
  596. ?>