{"id":528,"date":"2013-11-07T18:05:21","date_gmt":"2013-11-07T16:05:21","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=528"},"modified":"2013-11-09T15:04:40","modified_gmt":"2013-11-09T13:04:40","slug":"prestashop-amelioration-de-la-pagination-dans-ladministration","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2013\/11\/07\/prestashop-amelioration-de-la-pagination-dans-ladministration\/","title":{"rendered":"Prestashop : Am\u00e9lioration de la pagination dans l&rsquo;administration"},"content":{"rendered":"<p>Voici un nouveau module pratique qui va nous permettre de naviguer plus facilement dans l\u2019administration des produits Prestashop. ( versions 1.4)<br \/>\nDans le cas\u00a0 ou certaines cat\u00e9gories contiennent beaucoup de produits, la navigation au sein de ces produits peut \u00eatre compliqu\u00e9e.<br \/>\n<a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2013\/11\/page-admin-prestashop.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-529\" alt=\"page-admin-prestashop\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2013\/11\/page-admin-prestashop.png\" width=\"876\" height=\"114\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2013\/11\/page-admin-prestashop.png 876w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2013\/11\/page-admin-prestashop-300x39.png 300w\" sizes=\"auto, (max-width: 876px) 100vw, 876px\" \/><\/a><\/p>\n<p>Dans l&rsquo;exemple ci-dessus, pour atteindre la page 49 , il serait n\u00e9cessaire de cliquer pas moins de 48 fois ! ( en conservant la pagination \u00e0 50 \u00e9l\u00e9ment j&rsquo;en conviens \ud83d\ude09 , mais c&rsquo;est pour l&rsquo;exemple )<\/p>\n<p>Nous allons donc remplacer le texte correspondant \u00e0 la page en cours par un champ texte, qui nous permettra de saisir sur quelle page nous souhaitons nous rendre.<\/p>\n<p>Pour ce faire il est n\u00e9cessaire de surcharger la fonction displayListHeader de la classe AdminTab.<br \/>\nVoici le contenu de ma surcharge.<\/p>\n<pre lang=\"php\" line=\"1\" escaped=\"true\">&lt;?php\r\nclass AdminTab extends AdminTabCore {\r\n\r\n\u00a0\u00a0\u00a0 \/**\r\n\u00a0\u00a0 \u00a0 * Display list header (filtering, pagination and column names)\r\n\u00a0\u00a0 \u00a0 *\r\n\u00a0\u00a0 \u00a0 * @global string $currentIndex Current URL in order to keep current Tab\r\n\u00a0\u00a0 \u00a0 *\/\r\n\u00a0\u00a0 \u00a0public function displayListHeader($token = NULL)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0global $currentIndex, $cookie;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$isCms = false;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (preg_match('\/cms\/Ui', $this-&gt;identifier))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$isCms = true;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$id_cat = Tools::getValue('id_'.($isCms ? 'cms_' : '').'category');\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (!isset($token) OR empty($token))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$token = $this-&gt;token;\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/* Determine total page number *\/\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$totalPages = ceil($this-&gt;_listTotal \/ Tools::getValue('pagination', (isset($cookie-&gt;{$this-&gt;table.'_pagination'}) ? $cookie-&gt;{$this-&gt;table.'_pagination'} : $this-&gt;_pagination[0])));\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (!$totalPages) $totalPages = 1;\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&lt;a name=\"'.$this-&gt;table.'\"&gt;&amp;nbsp;&lt;\/a&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&lt;form method=\"post\" action=\"'.$currentIndex;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (Tools::getIsset($this-&gt;identifier))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&amp;'.$this-&gt;identifier.'='.(int)(Tools::getValue($this-&gt;identifier));\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&amp;token='.$token;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (Tools::getIsset($this-&gt;table.'Orderby'))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&amp;'.$this-&gt;table.'Orderby='.urlencode($this-&gt;_orderBy).'&amp;'.$this-&gt;table.'Orderway='.urlencode(strtolower($this-&gt;_orderWay));\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '#'.$this-&gt;table.'\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type=\"hidden\" id=\"submitFilter'.$this-&gt;table.'\" name=\"submitFilter'.$this-&gt;table.'\" value=\"0\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;table&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;tr&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;td style=\"vertical-align: bottom;\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;span style=\"float: left;\"&gt;';\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/* Determine current page number *\/\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$page = (int)(Tools::getValue('submitFilter'.$this-&gt;table));\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (!$page) $page = 1;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if ($page &gt; 1)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type=\"image\" src=\"..\/img\/admin\/list-prev2.gif\" onclick=\"getE(\\'submitFilter'.$this-&gt;table.'\\').value=1\"\/&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&amp;nbsp; &lt;input type=\"image\" src=\"..\/img\/admin\/list-prev.gif\" onclick=\"getE(\\'submitFilter'.$this-&gt;table.'\\').value='.($page - 1).'\"\/&gt; ';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo $this-&gt;l('Page').' &lt;input type=\"text\" id=\"changePage'.$this-&gt;table.'\" value=\"'.$page.'\" style=\"width:25px;text-align:center;\" onblur=\"getE(\\'submitFilter'.$this-&gt;table.'\\').value=this.value\"\/&gt; \/ '.$totalPages;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if ($page &lt; $totalPages)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type=\"image\" src=\"..\/img\/admin\/list-next.gif\" onclick=\"getE(\\'submitFilter'.$this-&gt;table.'\\').value='.($page + 1).'\"\/&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0 &amp;nbsp;&lt;input type=\"image\" src=\"..\/img\/admin\/list-next2.gif\" onclick=\"getE(\\'submitFilter'.$this-&gt;table.'\\').value='.$totalPages.'\"\/&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0| '.$this-&gt;l('Display').'\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;select name=\"pagination\"&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/* Choose number of results per page *\/\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$selectedPagination = Tools::getValue('pagination', (isset($cookie-&gt;{$this-&gt;table.'_pagination'}) ? $cookie-&gt;{$this-&gt;table.'_pagination'} : NULL));\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0foreach ($this-&gt;_pagination AS $value)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&lt;option value=\"'.(int)($value).'\"'.($selectedPagination == $value ? ' selected=\"selected\"' : (($selectedPagination == NULL &amp;&amp; $value == $this-&gt;_pagination[1]) ? ' selected=\"selected2\"' : '')).'&gt;'.(int)($value).'&lt;\/option&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/select&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/ '.(int)($this-&gt;_listTotal).' '.$this-&gt;l('result(s)').'\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/span&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;span style=\"float: right;\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type=\"submit\" name=\"submitReset'.$this-&gt;table.'\" value=\"'.$this-&gt;l('Reset').'\" \/&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type=\"submit\" id=\"submitFilterButton_'.$this-&gt;table.'\" name=\"submitFilter\" value=\"'.$this-&gt;l('Filter').'\" \/&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/span&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;span&gt;&lt;\/span&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/td&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/tr&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;tr&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;td&gt;';\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/* Display column names and arrows for ordering (ASC, DESC) *\/\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (array_key_exists($this-&gt;identifier,$this-&gt;identifiersDnd) AND $this-&gt;_orderBy == 'position')\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;script type=\"text\/javascript\" src=\"..\/js\/jquery\/jquery.tablednd_0_5.js\"&gt;&lt;\/script&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;script type=\"text\/javascript\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0var token = \\''.($token!=NULL ? $token : $this-&gt;token).'\\';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0var come_from = \\''.$this-&gt;table.'\\';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0var alternate = \\''.($this-&gt;_orderWay == 'DESC' ? '1' : '0' ).'\\';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/script&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;script type=\"text\/javascript\" src=\"..\/js\/admin-dnd.js\"&gt;&lt;\/script&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&lt;table'.(array_key_exists($this-&gt;identifier,$this-&gt;identifiersDnd) ? ' id=\"'.(((int)(Tools::getValue($this-&gt;identifiersDnd[$this-&gt;identifier], 1))) ? substr($this-&gt;identifier,3,strlen($this-&gt;identifier)) : '').'\"' : '' ).' cellpadding=\"0\" cellspacing=\"0\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;thead&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;tr&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;th&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if ($this-&gt;delete)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;input type=\"checkbox\" name=\"checkme\" onclick=\"checkDelBoxes(this.form, \\''.$this-&gt;table.'Box[]\\', this.checked)\" \/&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/th&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0foreach ($this-&gt;fieldsDisplay AS $key =&gt; $params)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\u00a0\u00a0 \u00a0&lt;th '.(isset($params['widthColumn']) ? 'style=\"width: '.$params['widthColumn'].'px\"' : '').'&gt;'.$params['title'];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (!isset($params['orderby']) OR $params['orderby'])\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ Cleaning links\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (Tools::getValue($this-&gt;table.'Orderby') &amp;&amp; Tools::getValue($this-&gt;table.'Orderway'))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$currentIndex = preg_replace('\/&amp;'.$this-&gt;table.'Orderby=([a-z _]*)&amp;'.$this-&gt;table.'Orderway=([a-z]*)\/i', '', $currentIndex);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\u00a0\u00a0 \u00a0&lt;br \/&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;a href=\"'.$currentIndex.'&amp;'.$this-&gt;identifier.'='.$id_cat.'&amp;'.$this-&gt;table.'Orderby='.urlencode($key).'&amp;'.$this-&gt;table.'Orderway=desc&amp;token='.$token.'\"&gt;&lt;img border=\"0\" src=\"..\/img\/admin\/down'.((isset($this-&gt;_orderBy) AND ($key == $this-&gt;_orderBy) AND ($this-&gt;_orderWay == 'DESC')) ? '_d' : '').'.gif\" \/&gt;&lt;\/a&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;a href=\"'.$currentIndex.'&amp;'.$this-&gt;identifier.'='.$id_cat.'&amp;'.$this-&gt;table.'Orderby='.urlencode($key).'&amp;'.$this-&gt;table.'Orderway=asc&amp;token='.$token.'\"&gt;&lt;img border=\"0\" src=\"..\/img\/admin\/up'.((isset($this-&gt;_orderBy) AND ($key == $this-&gt;_orderBy) AND ($this-&gt;_orderWay == 'ASC')) ? '_d' : '').'.gif\" \/&gt;&lt;\/a&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\u00a0\u00a0 \u00a0&lt;\/th&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/* Check if object can be modified, deleted or detailed *\/\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if ($this-&gt;edit OR $this-&gt;delete OR ($this-&gt;view AND $this-&gt;view !== 'noActionColumn'))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\u00a0\u00a0 \u00a0&lt;th style=\"width: 52px\"&gt;'.$this-&gt;l('Actions').'&lt;\/th&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\u00a0\u00a0 \u00a0&lt;\/tr&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;tr style=\"height: 35px;\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;td&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if ($this-&gt;delete)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0--';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/td&gt;';\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/* Javascript hack in order to catch ENTER keypress event *\/\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$keyPress = 'onkeypress=\"formSubmit(event, \\'submitFilterButton_'.$this-&gt;table.'\\');\"';\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/* Filters (input, select, date or bool) *\/\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0foreach ($this-&gt;fieldsDisplay AS $key =&gt; $params)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$width = (isset($params['width']) ? ' style=\"width: '.(int)($params['width']).'px;\"' : '');\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&lt;td'.(isset($params['align']) ? '' : '').'&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (!isset($params['type']))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$params['type'] = 'text';\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$value = Tools::getValue($this-&gt;table.'Filter_'.(array_key_exists('filter_key', $params) ? $params['filter_key'] : $key));\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (isset($params['search']) AND !$params['search'])\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '--&lt;\/td&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0continue;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0switch ($params['type'])\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0case 'bool':\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;select name=\"'.$this-&gt;table.'Filter_'.$key.'\"&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;option value=\"\"&gt;--&lt;\/option&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;option value=\"1\"'.($value == 1 ? ' selected=\"selected\"' : '').'&gt;'.$this-&gt;l('Yes').'&lt;\/option&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;option value=\"0\"'.(($value == 0 AND $value != '') ? ' selected=\"selected\"' : '').'&gt;'.$this-&gt;l('No').'&lt;\/option&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/select&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0break;\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0case 'date':\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0case 'datetime':\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (is_string($value))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$value = unserialize($value);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (!Validate::isCleanHtml($value[0]) OR !Validate::isCleanHtml($value[1]))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$value = '';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$name = $this-&gt;table.'Filter_'.(isset($params['filter_key']) ? $params['filter_key'] : $key);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$nameId = str_replace('!', '__', $name);\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0includeDatepicker(array($nameId.'_0', $nameId.'_1'));\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo $this-&gt;l('From').' &lt;input type=\"text\" id=\"'.$nameId.'_0\" name=\"'.$name.'[0]\" value=\"'.(isset($value[0]) ? $value[0] : '').'\"'.$width.' '.$keyPress.' \/&gt;&lt;br \/&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0'.$this-&gt;l('To').' &lt;input type=\"text\" id=\"'.$nameId.'_1\" name=\"'.$name.'[1]\" value=\"'.(isset($value[1]) ? $value[1] : '').'\"'.$width.' '.$keyPress.' \/&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0break;\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0case 'select':\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (isset($params['filter_key']))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&lt;select onchange=\"$(\\'#submitFilter'.$this-&gt;table.'\\').focus();$(\\'#submitFilter'.$this-&gt;table.'\\').click();\" name=\"'.$this-&gt;table.'Filter_'.$params['filter_key'].'\" '.(isset($params['width']) ? 'style=\"width: '.$params['width'].'px\"' : '').'&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;option value=\"\"'.(($value == 0 AND $value != '') ? ' selected=\"selected\"' : '').'&gt;--&lt;\/option&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (isset($params['select']) AND is_array($params['select']))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0foreach ($params['select'] AS $optionValue =&gt; $optionDisplay)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&lt;option value=\"'.$optionValue.'\"'.((isset($_POST[$this-&gt;table.'Filter_'.$params['filter_key']]) AND Tools::getValue($this-&gt;table.'Filter_'.$params['filter_key']) == $optionValue AND Tools::getValue($this-&gt;table.'Filter_'.$params['filter_key']) != '') ? ' selected=\"selected\"' : '').'&gt;'.$optionDisplay.'&lt;\/option&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&lt;\/select&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0break;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0case 'text':\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0default:\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if (!Validate::isCleanHtml($value))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$value = '';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&lt;input type=\"text\" name=\"'.$this-&gt;table.'Filter_'.(isset($params['filter_key']) ? $params['filter_key'] : $key).'\" value=\"'.htmlentities($value, ENT_COMPAT, 'UTF-8').'\"'.$width.' '.$keyPress.' \/&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&lt;\/td&gt;';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if ($this-&gt;edit OR $this-&gt;delete OR ($this-&gt;view AND $this-&gt;view !== 'noActionColumn'))\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&lt;td&gt;--&lt;\/td&gt;';\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0echo '&lt;\/tr&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/thead&gt;';\r\n\u00a0\u00a0 \u00a0}\r\n\r\n}\r\n\r\n?&gt;<\/pre>\n<p>Le changement se situe \u00e0 ligne 45 ou le code existant :<\/p>\n<pre lang=\"php\" escaped=\"true\">echo $this-&gt;l('Page').' &lt;b&gt;'.$page.'&lt;\/b&gt; \/ '.$totalPages;<\/pre>\n<p>a \u00e9t\u00e9 remplac\u00e9 par le code suivant :<\/p>\n<pre lang=\"php\" escaped=\"true\">echo $this-&gt;l('Page').' &lt;input type=\"text\" id=\"changePage'.$this-&gt;table.'\" value=\"'.$page.'\" style=\"width:25px;text-align:center;\" onblur=\"getE(\\'submitFilter'.$this-&gt;table.'\\').value=this.value\"\/&gt; \/ '.$totalPages;<\/pre>\n<p>Si vous souhaitez ajouter facilement cette fonctionnalit\u00e9, vous pouvez au choix copier coller le contenu ci-dessus dans une classe \u00ab\u00a0AdminTab\u00a0\u00bb dans le dossier \u00ab\u00a0override\/classes\u00a0\u00bb, ou t\u00e9l\u00e9charger <a title=\"Module Pagination admin prestashop\" href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2013\/11\/pagination-v0.1.rar\">le module qui le fera tout seul<\/a> \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Voici un nouveau module pratique qui va nous permettre de naviguer plus facilement dans l\u2019administration des produits Prestashop. ( versions 1.4) Dans le cas\u00a0 ou certaines cat\u00e9gories contiennent beaucoup de produits, la navigation au sein de ces produits peut \u00eatre compliqu\u00e9e. Dans l&rsquo;exemple ci-dessus, pour atteindre la page 49 , il serait n\u00e9cessaire de cliquer [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[245,6],"tags":[258,104],"class_list":["post-528","post","type-post","status-publish","format-standard","hentry","category-prestashop-2","category-trucs-et-astuces","tag-pagination-prestashop","tag-prestashop"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/528","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=528"}],"version-history":[{"count":3,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/528\/revisions"}],"predecessor-version":[{"id":533,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/528\/revisions\/533"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}