Syd Posted July 12, 2012 Share Posted July 12, 2012 (edited) Hay algún módulo para product list que permita que se muestren unos cuantos productos por página? Por ejemplo, yo tengo 30 productos y quiero que se muestren 8, y para ver el resto que tenga que avanzar página y se muestren otros 8 productos, con opciones de ir al último, al primero, siguiente, etc... Espero haberme explicado bien Esto surge especialmente por la idea de mantener la estructura del diseño de la página, sin que se extienda hacia abajo provocado por la inclusión de los productos. Saludos Edited July 13, 2012 by Syd (see edit history) Link to comment Share on other sites More sharing options...
Syd Posted July 13, 2012 Author Share Posted July 13, 2012 (edited) Hola, muchas gracias, pero cómo se hace lo de la paginación? O mejor dicho, cómo se pone la paginación a 8 productos? Edited July 13, 2012 by Syd (see edit history) Link to comment Share on other sites More sharing options...
Syd Posted July 13, 2012 Author Share Posted July 13, 2012 (edited) Esto tengo en el pagination.tpl <!-- Pagination --> <div id="pagination" class="pagination"> {if $start!=$stop} <ul class="pagination"> {if $p != 1} {assign var='p_previous' value=$p-1} <li id="pagination_previous"><a href="{$link->goPage($requestPage, $p_previous)}">« {l s='Previous'}</a></li> {else} <li id="pagination_previous" class="disabled"><span>« {l s='Previous'}</span></li> {/if} {if $start>3} <li><a href="{$link->goPage($requestPage, 1)}">1</a></li> <li class="truncate">...</li> {/if} {section name=pagination start=$start loop=$stop+1 step=1} {if $p == $smarty.section.pagination.index} <li class="current"><span>{$p|escape:'htmlall':'UTF-8'}</span></li> {else} <li><a href="{$link->goPage($requestPage, $smarty.section.pagination.index)}">{$smarty.section.pagination.index|escape:'htmlall':'UTF-8'}</a></li> {/if} {/section} {if $pages_nb>$stop+2} <li class="truncate">...</li> <li><a href="{$link->goPage($requestPage, $pages_nb)}">{$pages_nb|intval}</a></li> {/if} {if $pages_nb > 1 AND $p != $pages_nb} {assign var='p_next' value=$p+1} <li id="pagination_next"><a href="{$link->goPage($requestPage, $p_next)}">{l s='Next'} »</a></li> {else} <li id="pagination_next" class="disabled"><span>{l s='Next'} »</span></li> {/if} </ul> {/if} Y esto en el css /* pagination.tpl */ div.pagination { padding: 1em 0 } ul.pagination { list-style: none; float: left } ul.pagination li { display: inline; float: left; margin-right: 0.3em } ul.pagination li, ul.pagination a, ul.pagination span { font-weight: bold; color: #374853 } ul.pagination a, ul.pagination span { border: 1px solid #888; padding: 0em 0.4em; display: block; line-height: 17px; background: #73417C url('../img/pagination_bg.gif') repeat-x top right } ul.pagination a { text-decoration: none } ul.pagination .current span { background-color: #595a5e; background-image: url('../img/pagination-bg-current.gif'); color: white; border: 1px solid #595a5e } ul.pagination li.truncate { padding: 0.3em; background: none } #pagination_previous a, #pagination_previous span, #pagination_next a, #pagination_next span { background-image: url('../img/pagination-prevnext-bg.gif'); border: none; line-height: 19px; border-color: #d0d1d5; border-style: solid; border-width: 0 1px } #pagination_previous { background: transparent url('../img/pagination-prev-border.gif') no-repeat top left; padding-left: 6px } #pagination_previous a, #pagination_previous span { border-left: none } #pagination_next { background: transparent url('../img/pagination-next-border.gif') no-repeat top right; padding-right: 6px } #pagination_next a, #pagination_next span { border-right: none } li.disabled span { color: #888; background-color: #f1f2f4 Edited July 13, 2012 by Syd (see edit history) Link to comment Share on other sites More sharing options...
nadie Posted July 13, 2012 Share Posted July 13, 2012 Tema movido a discusión general Link to comment Share on other sites More sharing options...
nadie Posted July 13, 2012 Share Posted July 13, 2012 Hola, muchas gracias, pero cómo se hace lo de la paginación? O mejor dicho, cómo se pone la paginación a 8 productos? Pestaña Preferencias -> Productos Revisa la opción llamada: Productos por pagina 1 Link to comment Share on other sites More sharing options...
Syd Posted July 13, 2012 Author Share Posted July 13, 2012 Ooh, jaja, y yo mirando el código por todas partes, muchas gracias Link to comment Share on other sites More sharing options...
nadie Posted July 13, 2012 Share Posted July 13, 2012 Ooh, jaja, y yo mirando el código por todas partes, muchas gracias Un placer ayudarte y servirte! Un saludo y recuerda que estaremos por el foro, para guiarte por este mundo oscuro y tenebroso. Link to comment Share on other sites More sharing options...
achura Posted August 21, 2012 Share Posted August 21, 2012 (edited) Ok, muy bien! pero yo tengo una duda sobre esto, he modificado FrontController para cambiar los articulos por pagina a 20, 40 y 80, pero me gustaria incluir un valor al fina "Ver todos" que me imagino que será poniendo un valor alto (un cuarto valor) pero, donde tendría que poner "Ver todos" para que saliera en el select? El codigo es: public function pagination($nbProducts = 20) { if (!self::$initialized) $this->init(); $nArray = (int)(Configuration::get('PS_PRODUCTS_PER_PAGE')) != 20 ? array((int)(Configuration::get('PS_PRODUCTS_PER_PAGE')), 20, 40, 80) : array(20, 40, 80); // Clean duplicate values $nArray = array_unique($nArray); asort($nArray); $this->n = abs((int)(Tools::getValue('n', ((isset(self::$cookie->nb_item_per_page) AND self::$cookie->nb_item_per_page >= 20) ? self::$cookie->nb_item_per_page : (int)(Configuration::get('PS_PRODUCTS_PER_PAGE')))))); $this->p = abs((int)(Tools::getValue('p', 1))); if (!is_numeric(Tools::getValue('p', 1)) || Tools::getValue('p', 1) < 0) Tools::redirect('404.php'); $current_url = tools::htmlentitiesUTF8($_SERVER['REQUEST_URI']); //delete parameter page $current_url = preg_replace('/(\?)?(&)?p=\d+/', '$1', $current_url); $range = 25; /* how many pages around page selected */ if ($this->p < 0) $this->p = 0; if (isset(self::$cookie->nb_item_per_page) AND $this->n != self::$cookie->nb_item_per_page AND in_array($this->n, $nArray)) self::$cookie->nb_item_per_page = $this->n; if ($this->p > (($nbProducts / $this->n) + 1)) Tools::redirect(preg_replace('/[&?]p=\d+/', '', $_SERVER['REQUEST_URI'])); $pages_nb = ceil($nbProducts / (int)($this->n)); $start = (int)($this->p - $range); if ($start < 1) $start = 1; $stop = (int)($this->p + $range); if ($stop > $pages_nb) $stop = (int)($pages_nb); self::$smarty->assign('nb_products', $nbProducts); $pagination_infos = array( 'products_per_page' => (int)Configuration::get('PS_PRODUCTS_PER_PAGE'), 'pages_nb' => $pages_nb, 'p' => $this->p, 'n' => $this->n, 'nArray' => $nArray, 'range' => $range, 'start' => $start, 'stop' => $stop, 'current_url' => $current_url ); self::$smarty->assign($pagination_infos); } Edited August 21, 2012 by achura (see edit history) Link to comment Share on other sites More sharing options...
nadie Posted August 21, 2012 Share Posted August 21, 2012 Ok, muy bien! pero yo tengo una duda sobre esto, he modificado FrontController para cambiar los articulos por pagina a 20, 40 y 80, pero me gustaria incluir un valor al fina "Ver todos" que me imagino que será poniendo un valor alto (un cuarto valor) pero, donde tendría que poner "Ver todos" para que saliera en el select? El codigo es: public function pagination($nbProducts = 20) { if (!self::$initialized) $this->init(); $nArray = (int)(Configuration::get('PS_PRODUCTS_PER_PAGE')) != 20 ? array((int)(Configuration::get('PS_PRODUCTS_PER_PAGE')), 20, 40, 80) : array(20, 40, 80); // Clean duplicate values $nArray = array_unique($nArray); asort($nArray); $this->n = abs((int)(Tools::getValue('n', ((isset(self::$cookie->nb_item_per_page) AND self::$cookie->nb_item_per_page >= 20) ? self::$cookie->nb_item_per_page : (int)(Configuration::get('PS_PRODUCTS_PER_PAGE')))))); $this->p = abs((int)(Tools::getValue('p', 1))); if (!is_numeric(Tools::getValue('p', 1)) || Tools::getValue('p', 1) < 0) Tools::redirect('404.php'); $current_url = tools::htmlentitiesUTF8($_SERVER['REQUEST_URI']); //delete parameter page $current_url = preg_replace('/(\?)?(&)?p=\d+/', '$1', $current_url); $range = 25; /* how many pages around page selected */ if ($this->p < 0) $this->p = 0; if (isset(self::$cookie->nb_item_per_page) AND $this->n != self::$cookie->nb_item_per_page AND in_array($this->n, $nArray)) self::$cookie->nb_item_per_page = $this->n; if ($this->p > (($nbProducts / $this->n) + 1)) Tools::redirect(preg_replace('/[&?]p=\d+/', '', $_SERVER['REQUEST_URI'])); $pages_nb = ceil($nbProducts / (int)($this->n)); $start = (int)($this->p - $range); if ($start < 1) $start = 1; $stop = (int)($this->p + $range); if ($stop > $pages_nb) $stop = (int)($pages_nb); self::$smarty->assign('nb_products', $nbProducts); $pagination_infos = array( 'products_per_page' => (int)Configuration::get('PS_PRODUCTS_PER_PAGE'), 'pages_nb' => $pages_nb, 'p' => $this->p, 'n' => $this->n, 'nArray' => $nArray, 'range' => $range, 'start' => $start, 'stop' => $stop, 'current_url' => $current_url ); self::$smarty->assign($pagination_infos); } Para mantener una mayor organización en el foro, abre un tema nuevo para tu duda. Link to comment Share on other sites More sharing options...
Recommended Posts