Jump to content

[Solucionado]módulo para product list que permita que se muestren unos cuantos productos por página?


Syd

Recommended Posts

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 by Syd (see edit history)
Link to comment
Share on other sites

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 by Syd (see edit history)
Link to comment
Share on other sites

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

  • Like 1
Link to comment
Share on other sites

  • 1 month later...

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 by achura (see edit history)
Link to comment
Share on other sites

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

Guest
This topic is now closed to further replies.
×
×
  • Create New...