Jump to content

(SOLUCIONADO) La ordenación de productos no funciona! (product-sort.tpl)


Recommended Posts

Hola compañeros, ayer tuve un problema con la ordenación de productos derivada de product-sort.tpl, el error es que por mas que selecciono un orden de productos... me ignora y no recarga, digamos que haciendo pruebas solo lo ejecuta la primera vez que carga la página, luego nada, un adorno. No consigo entender muy bien porque dejó de funcionar inexplicablemente, de todos modos conseguí remendarlo, pero me sigue el come-come de porqué no funcionaba, y si alguien supiera explicármelo se lo agradecería.

 

 

de todas formas os paso mi solución, primeramente os paso el código original, el cuál dejó de funcionar, y si ahora lo repongo, tampoco funciona la ordenación:

{if isset($orderby) AND isset($orderway)}
<!-- Sort products -->
{if isset($smarty.get.id_category) && $smarty.get.id_category}
{assign var='request' value=$link->getPaginationLink('category', $category, false, true)}
{elseif isset($smarty.get.id_manufacturer) && $smarty.get.id_manufacturer}
{assign var='request' value=$link->getPaginationLink('manufacturer', $manufacturer, false, true)}
{elseif isset($smarty.get.id_supplier) && $smarty.get.id_supplier}
{assign var='request' value=$link->getPaginationLink('supplier', $supplier, false, true)}
{else}
{assign var='request' value=$link->getPaginationLink(false, false, false, true)}
{/if}
<script type="text/javascript">
//<![CDATA[
$(document).ready(function()
{
$('#selectPrductSort').change(function()
{
 var requestSortProducts = '{$request}';
 var splitData = $(this).val().split(':');
 {if Module::isInstalled('blocklayered')}
  reloadContent();
 {else}
  document.location.href = requestSortProducts + ((requestSortProducts.indexOf('?') < 0) ? '?' : '&') + 'orderby=' + splitData[0] + '&orderway=' + splitData[1];
 {/if}
});
});
//]]>
</script>
<form id="productsSortForm" action="{$request|escape:'htmlall':'UTF-8'}">
<select id="selectPrductSort">
 <option value="{$orderbydefault|escape:'htmlall':'UTF-8'}:{$orderwaydefault|escape:'htmlall':'UTF-8'}" {if $orderby eq $orderbydefault}selected="selected"{/if}>{l s='--'}</option>
 {if !$PS_CATALOG_MODE}
  <option value="price:asc" {if $orderby eq 'price' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Price: lowest first'}</option>
  <option value="price:desc" {if $orderby eq 'price' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Price: highest first'}</option>
 {/if}
 <option value="name:asc" {if $orderby eq 'name' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Product Name: A to Z'}</option>
 <option value="name:desc" {if $orderby eq 'name' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Product Name: Z to A'}</option>
 {if !$PS_CATALOG_MODE}
  <option value="quantity:desc" {if $orderby eq 'quantity' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='In-stock first'}</option>
 {/if}
</select>
<label for="selectPrductSort">{l s='Sort by'}</label>
</form>
<!-- /Sort products -->
{/if}

 

Con el anterior no conseguía nada, con lo que utilizando un poco la lógica, y el código existente... todo hay que decirlo, me limité a forzar un document.location.href en el onchange del select#selectPrductSort. En resumen le puse un parche y me resultó efectivo, no sé si es lo mas idóneo, pero el resultado es el deseado:

{if isset($orderby) AND isset($orderway)}
<!-- Sort products -->
{if isset($smarty.get.id_category) && $smarty.get.id_category}
{assign var='request' value=$link->getPaginationLink('category', $category, false, true)}
{elseif isset($smarty.get.id_manufacturer) && $smarty.get.id_manufacturer}
{assign var='request' value=$link->getPaginationLink('manufacturer', $manufacturer, false, true)}
{elseif isset($smarty.get.id_supplier) && $smarty.get.id_supplier}
{assign var='request' value=$link->getPaginationLink('supplier', $supplier, false, true)}
{else}
{assign var='request' value=$link->getPaginationLink(false, false, false, true)}
{/if}
<script type="text/javascript">
//<![CDATA[
$(document).ready(function()
{
$('#selectPrductSort').change(function()
{
 var requestSortProducts = '{$request}';
 var splitData = $(this).val().split(':');
 {if Module::isInstalled('blocklayered')}
  reloadContent();
 {else}
  document.location.href = requestSortProducts + ((requestSortProducts.indexOf('?') < 0) ? '?' : '&') + 'orderby=' + splitData[0] + '&orderway=' + splitData[1];
 {/if}
});
});
//]]>
</script>
<form id="productsSortForm" action="{$request|escape:'htmlall':'UTF-8'}">
<script type="text/javascript" language="javascript">  /*Modificado*/
 function ordena(orden){	/*Modificado*/
  var requestSortProducts = '{$request}';	/*Modificado*/
  var splitData = $(orden).val().split(':');	/*Modificado*/
  document.location.href = requestSortProducts + ((requestSortProducts.indexOf('?') < 0) ? '?' : '&') + 'orderby=' + splitData[0] + '&orderway=' + splitData[1];	/*Modificado*/
 }	/*Modificado*/
</script>	<!--/*Modificado*/-->
<select id="selectPrductSort" onchange="ordena(this)">  <!--/*Modificado*/-->
 <option class="ac_even" value="{$orderbydefault|escape:'htmlall':'UTF-8'}:{$orderwaydefault|escape:'htmlall':'UTF-8'}" {if $orderby eq $orderbydefault}selected="selected"{/if}>{l s='--'}</option>  <!--/*Modificado*/-->
 {if !$PS_CATALOG_MODE}
  <option class="ac_odd" value="price:asc" {if $orderby eq 'price' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Price: lowest first'}</option>  <!--/*Modificado*/-->
  <option class="ac_even" value="price:desc" {if $orderby eq 'price' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Price: highest first'}</option>  <!--/*Modificado*/-->
 {/if}
 <option class="ac_odd" value="name:asc" {if $orderby eq 'name' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Product Name: A to Z'}</option>  <!--/*Modificado*/-->
 <option class="ac_even" value="name:desc" {if $orderby eq 'name' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Product Name: Z to A'}</option>  <!--/*Modificado*/-->
 {if !$PS_CATALOG_MODE}
  <option class="ac_odd" value="quantity:desc" {if $orderby eq 'quantity' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='In-stock first'}</option>  <!--/*Modificado*/-->
 {/if}
</select>
<label for="selectPrductSort">{l s='Sort by'}</label>
</form>
<!-- /Sort products -->
{/if}

 

Nota los class ac_even y ac_odd, los añadí por alternar el color de las filas, no tiene nada que ver con la solución.

 

Bueno, espero que esto ayude a alguien en algún momento.

 

Saludos y gracias!!

 

VicWeb

Link to comment
Share on other sites

  • 7 months later...
  • 2 weeks later...

Ah! por cierto, la url de la web en cuestión es www.dobleplacer.com, no apta para menores!!! :D

Hola Victor.

Ya veo que tu web, ya no está disponilbe para verla, pero aun así gracias por el aporte, funcionó perfectamente para ps 1.5.6 que tenia el mismo error. Ahora sólo hay que añadir la traducción y listo.

Muchas gracias.

Link to comment
Share on other sites

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