VíctorAlonsoGarcía Posted July 13, 2013 Share Posted July 13, 2013 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 More sharing options...
VíctorAlonsoGarcía Posted July 13, 2013 Author Share Posted July 13, 2013 Ah! por cierto, la url de la web en cuestión es www.dobleplacer.com, no apta para menores!!! Link to comment Share on other sites More sharing options...
Verito Posted February 21, 2014 Share Posted February 21, 2014 Hola, Víctor. Me pasaba exactamente igual que a ti y con tus modificaciones se me ha solucionado el problema. Muchas gracias. Link to comment Share on other sites More sharing options...
FERMB Posted March 3, 2014 Share Posted March 3, 2014 Ah! por cierto, la url de la web en cuestión es www.dobleplacer.com, no apta para menores!!! 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 More sharing options...
Recommended Posts