Pixie Cabanyaler Posted December 25, 2016 Share Posted December 25, 2016 (edited) Buenos días y feliz navidad de nuevo a todos. Quisera conocer como puedo añadir nuevos criterios de ordenación al DropBox o Lista Desplegable "Ordenar por" de los productos agrupados en las categorias. Por defecto,la plantilla trae los criterios de (Precio más baratos/caros primero, nombre A..Z/Z..A, En inventario, etc), pero ¿que ocurre si lo quiero ordenar por ejemplo por 'peso', 'tamaño', alguna a característica común de los productos como 'made in', o cualquier otra?. Sería añadir opciones al desplegable. ¿Alguién lo ha realizado? Gracias. Edited January 5, 2017 by Pixie Cabanyaler (see edit history) Link to comment Share on other sites More sharing options...
Sergio Ruiz Posted December 25, 2016 Share Posted December 25, 2016 (edited) Tienes guías de algunas versiones de Prestashop (creo que antiguas, pero quizas puedas ver la forma de adaptarlo teniendo la idea de las guias), donde se comentan como añadir una nueva columna en los filtros de ordenación (Te dejo enlaces) http://nemops.com/sort-by-sales-prestashop/#.WF-je2ThDIUhttp://blog.belvg.com/how-to-create-custom-sorting-in-prestashop-1-5.htmlhttps://dh42.com/blog/prestashop-sort-date/ Por otro lado tambien tienes la posibilidad de usar el modulo "Navegacion por facetas" que tiene multiples filtros desde caractericticas, peso, atributos, ect.. Edited December 25, 2016 by Sergio Ruiz (see edit history) Link to comment Share on other sites More sharing options...
Alvaro Tarela Posted December 27, 2016 Share Posted December 27, 2016 El modulo "Navegacion por facetas" es el más adecuado para lo que necesitas. Salvo que te coloca los filtros en la columna izquierda. Pero los puedes colocar en horizontal como los de Ordenar, con un "poco" de CSS y mucho sudor (te lo digo por experiencia). Link to comment Share on other sites More sharing options...
Pixie Cabanyaler Posted December 28, 2016 Author Share Posted December 28, 2016 (edited) Tienes guías de algunas versiones de Prestashop (creo que antiguas, pero quizas puedas ver la forma de adaptarlo teniendo la idea de las guias), donde se comentan como añadir una nueva columna en los filtros de ordenación (Te dejo enlaces) http://nemops.com/sort-by-sales-prestashop/#.WF-je2ThDIU http://blog.belvg.com/how-to-create-custom-sorting-in-prestashop-1-5.html https://dh42.com/blog/prestashop-sort-date/ Por otro lado tambien tienes la posibilidad de usar el modulo "Navegacion por facetas" que tiene multiples filtros desde caractericticas, peso, atributos, ect.. Gracias Sergio. Me armé de valor para meterme en el código, pero no lo he conseguido. Con esta documentación: http://nemops.com/so...p/#.WF-je2ThDIU Esta es la más completa a seguir paso a paso, pero en el primer punto respecto a modificar la plantilla "product-sort.tpl" no se muestran las opciones nuevas añadidas. Por lo que lo siguiente aunque si lo hubiese implementado no tendría sentido al no poder seleccionar las nuevas opciones. http://blog.belvg.co...tashop-1-5.html Esta también es completa en cuanto a "lo que se debe hacer", pero está incompleta en tanto "al como hacerlo" Indica que debo crear un modulo y registrarlo en el hook, pero tampoco indica como hacer el módulo y registrarlo al hook Indica también que debemos sobreescribir el comportamiento de las funciones getProducts de la class Category y la function productSort de CategoryController. (Esto más o menos está claro). Respecto a modificar la plantilla "product-sort.tpl" no se muestran las opciones nuevas añadidas. Por lo que lo anterior aunque si lo hubiese implementado no tendría sentido al no poder seleccionar las nuevas opciones. https://dh42.com/blo...shop-sort-date/: Sólo muestra como modificar la plantilla tpl añadiendo las líneas que deberían aparecer en lalista despleglable, pero aún añadiéndolas ni siquiera de se muestran en la lista en el FrontOffice. Faltaría (creo) la parte del código que se ejecutaría en caso de seleccionar las opciones deseadas a ser añadidas a la lista desplegable, que como indico y repito, tampoco se visualizan. Por ello no lo he podido modificar o ampliar, de momento me apaño con lo de la navegación por facetas, pero no es lo que buscaba en concreto. Quizá sea la versión de PS que utilizo 1.6.1.10. No lo sé, pero ni siquiera he podido llegar a hacer la modificación de la plantilla product-sort.tpl Edited December 28, 2016 by Pixie Cabanyaler (see edit history) Link to comment Share on other sites More sharing options...
ventura Posted December 29, 2016 Share Posted December 29, 2016 El modulo "Navegacion por facetas" es el más adecuado para lo que necesitas. Salvo que te coloca los filtros en la columna izquierda. Pero los puedes colocar en horizontal como los de Ordenar, con un "poco" de CSS y mucho sudor (te lo digo por experiencia). Cambiandolo de hook a uno personalizado mas bien Link to comment Share on other sites More sharing options...
Pixie Cabanyaler Posted December 29, 2016 Author Share Posted December 29, 2016 Cambiandolo de hook a uno personalizado mas bien La navegación por facetas no es lo que busco. Seguiré dandole vueltas poco a poco a modificar el código, las plantillas, etc, ya que busco añadir criterios de ordenación. y no filtros que ofrecen las facetas, o eso entiendo desde mi más honesta modestia de aprendiz de prestashop. Link to comment Share on other sites More sharing options...
ventura Posted December 29, 2016 Share Posted December 29, 2016 La navegación por facetas no es lo que busco. Seguiré dandole vueltas poco a poco a modificar el código, las plantillas, etc, ya que busco añadir criterios de ordenación. y no filtros que ofrecen las facetas, o eso entiendo desde mi más honesta modestia de aprendiz de prestashop. Si quieres añadir mas parámetros deberás hacerlo sobreescribiendo la función getproducts en la classe Product.php y añadirlos luego al archivo \themes\tu_tema\product-sort.tpl Link to comment Share on other sites More sharing options...
Pixie Cabanyaler Posted December 29, 2016 Author Share Posted December 29, 2016 Si quieres añadir mas parámetros deberás hacerlo sobreescribiendo la función getproducts en la classe Product.php y añadirlos luego al archivo \themes\tu_tema\product-sort.tpl Si gracias, esta tarde si puedo buscaré algún manual avanzadode prestashop en línea o guia en post , paso a paso, para hacerlo. Un saludo. Cuando lo saque, si lo consigo, lo reportaré, como guia de cada uno de los pasos. Link to comment Share on other sites More sharing options...
Pixie Cabanyaler Posted January 3, 2017 Author Share Posted January 3, 2017 Si quieres añadir mas parámetros deberás hacerlo sobreescribiendo la función getproducts en la classe Product.php y añadirlos luego al archivo \themes\tu_tema\product-sort.tpl Gracias ventura, estoy con esto, pero tengo una duda sobre la sobreescritura de getproducts He hecho lo siguiente sobre la plantilla product-sort.tpl: He modificado la tpl para que salga en la lista desplegable las opciones de ordenar por Fabricante asc o des con las lineas:Añadiendo al array $orderby el valor id_manufacturer en su última posición <option value="{if $page_name != 'best-sales'}{$orderbydefault|escape:'html':'UTF-8'}:{$orderwaydefault|escape:'html':'UTF-8'}{/if}"{if !in_array($orderby, array('price', 'name', 'quantity', 'reference', 'id_manufacturer')) && $orderby eq $orderbydefault} selected="selected"{/if}>--</option> Añadiendo las opciones de la lista desplegable: <option value="id_manufacturer:desc" {if $orderby eq 'id_manufacturer' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Fabricantes: A a Z'}</option> <option value="id_manufacturer:asc" {if $orderby eq 'id_manufacturer' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Fabricantes: Z a A'}</option> He compilado la plantilla y sale bien en el FrontOffice, con las dos opciones añadidas. Para la sobreescrutura o en este caso entiendo extensión de la clase Product.php de ../htdocs/classes/product.php, he hecho lo siguiente : He creado una clase denominada Product.php en ../htdocs/override/classes Y he extendido la superclase Product.php con la sentencia: Class Product extends ProductCore He copiado integramente la funcion getProducts(....) a esta nueva subclase Y aquí, en este paso es donde tengo la duda. ¿Donde y como le debo indicar que si la opción seleccionada es el Fabricante, establezca el orden por Fabricante? Porque veo que se lo asigna en estas líneas pero no veo como incluir el del Fabricante. if (!Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way)) { die(Tools::displayError()); } if ($order_by == 'id_product' || $order_by == 'price' || $order_by == 'date_add' || $order_by == 'date_upd') { $order_by_prefix = 'p'; } elseif ($order_by == 'name') { $order_by_prefix = 'pl'; } elseif ($order_by == 'position') { $order_by_prefix = 'c'; } Muchas gracias por tu tiempo. Link to comment Share on other sites More sharing options...
ventura Posted January 4, 2017 Share Posted January 4, 2017 Para el fabricante por nombre haría falta añadir elseif ($order_by == 'name') $order_by_prefix = 'm'; Link to comment Share on other sites More sharing options...
Pixie Cabanyaler Posted January 4, 2017 Author Share Posted January 4, 2017 Para el fabricante por nombre haría falta añadir elseif ($order_by == 'name') $order_by_prefix = 'm'; Muchas gracias, enseguida pueda lo pruebo. ¿Entiendo pues que las líneas por tí indicadas deben sustituir a las actualmente existentes?: } elseif ($order_by == 'name') { $order_by_prefix = 'pl'; Link to comment Share on other sites More sharing options...
ventura Posted January 4, 2017 Share Posted January 4, 2017 Muchas gracias, enseguida pueda lo pruebo. ¿Entiendo pues que las líneas por tí indicadas deben sustituir a las actualmente existentes?: } elseif ($order_by == 'name') { $order_by_prefix = 'pl'; No, debes añadirla a las que ya hay. Esa que indicas es el name de la tabla pl ( product_lang) y queremos añadir el name de la tabla m ( manufacturer) Link to comment Share on other sites More sharing options...
Pixie Cabanyaler Posted January 4, 2017 Author Share Posted January 4, 2017 (edited) No, debes añadirla a las que ya hay. Esa que indicas es el name de la tabla pl ( product_lang) y queremos añadir el name de la tabla m ( manufacturer) Gracias de nuevo, pero estoy confundido: Al ya existir la linea de elseif elseif ($order_by == 'name') { $order_by_prefix = 'pl'; si le añado, otra para el nombre del fabricante con un elseif identico elseif ($order_by == 'name') { que asigna el prefijo de la tabla manufacturer o fabricante con la sentencia: $order_by_prefix = 'm'; al encontrar en primer lugar el primerelseif de $order_by_prefix = 'pl'; nunca llegará a ejecutar el elseif que intento añadir siguiendo tus indicaciones ¿no es así?. Es decir según lo que entiendo añadirlo quedaría como está mostrado a continuación y al encontrar el primer elseif en negrita, nunca llegaría a ejecutar elcódigo azul añadido. Por eso decía lo de la sustitución. if (!Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way)) { die(Tools::displayError()); } if ($order_by == 'id_product' || $order_by == 'price' || $order_by == 'date_add' || $order_by == 'date_upd') { $order_by_prefix = 'p'; } elseif ($order_by == 'name') { $order_by_prefix = 'pl'; } elseif ($order_by == 'position') { $order_by_prefix = 'c'; } elseif ($order_by == 'name') { $order_by_prefix = 'm'; Edited January 4, 2017 by Pixie Cabanyaler (see edit history) Link to comment Share on other sites More sharing options...
ventura Posted January 4, 2017 Share Posted January 4, 2017 tienes razón, prueba con manufacturer_name Link to comment Share on other sites More sharing options...
Pixie Cabanyaler Posted January 4, 2017 Author Share Posted January 4, 2017 tienes razón, prueba con manufacturer_name Uff!! No consigo que me funcione, me reporta los productos pero no me los ordena por fabricante, me los mezcla, y lo peor no conozco cual es el criterio de orden que aplica. El valor del $order_by si en la plantilla lo he establecido así como id_manufacturer como muestro en las siguientes lineas He hecho lo siguiente sobre la plantilla product-sort.tpl: He modificado la tpl para que salga en la lista desplegable las opciones de ordenar por Fabricante asc o des con las lineas: Añadiendo al array $orderby el valor id_manufacturer en su última posición <option value="{if $page_name != 'best-sales'}{$orderbydefault|escape:'html':'UTF-8'}:{$orderwaydefault|escape:'html':'UTF-8'}{/if}"{if !in_array($orderby, array('price', 'name', 'quantity', 'reference', 'id_manufacturer')) && $orderby eq $orderbydefault} selected="selected"{/if}>--</option> Añadiendo las opciones de la lista desplegable: <option value="id_manufacturer:desc" {if $orderby eq 'id_manufacturer' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Fabricantes: A a Z'}</option> <option value="id_manufacturer:asc" {if $orderby eq 'id_manufacturer' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Fabricantes: Z a A'}</option> ¿Debería $order_by valer 'id_manufacturer' en la subclase Producto.php, para ser evaluada en el elseif asi:? } elseif ($order_by == 'id_manufacturer') { $order_by_prefix = 'm'; ¿No? Link to comment Share on other sites More sharing options...
ventura Posted January 4, 2017 Share Posted January 4, 2017 Revisa la classe Manufacturer.php como ejemplo, misma funcion getproducts (), pero con un where al id_manufacturer. Alli se establece un alias y un order_by para poder tomar el name de la tabla manufacturer. Link to comment Share on other sites More sharing options...
Pixie Cabanyaler Posted January 5, 2017 Author Share Posted January 5, 2017 SOLUCIONADO. Primero agradecer a los colaboradores de este hilo: Sergio Ruiz: Por ponerme sobre la pista con los enlaces Albaro Tarela: Por decirme lo de las facetas ventura: por guiarme y por sus aportes concretos Como lo he hecho?? Desde el BackOficce opciones Parametros avanzados/Rendimieto/Smarty, estableciendo quese compilasen las tpl cuando fuesen modificadas Añadiendo en la tpl Product_sort.tpl las dos líneas de la lista desplegable del nombre de fabricante, con especial atención al valor marcado en negrita <option value="id_manufacturer:desc" {if $orderby eq 'manufacturer_name' AND $orderway eq 'desc'}selected="selected"{/if}>{l s='Fabricantes: A a Z'}</option> <option value="id_manufacturer:asc" {if $orderby eq 'manufacturer_name' AND $orderway eq 'asc'}selected="selected"{/if}>{l s='Fabricantes: Z a A'}</option> Estos valores corresponden con uno de los valores asignados a la variable "order_by_values" en la clase de ..htdocs/classes/controller/frontcontroller.php en su posición 5 Ahora voy a ver lo de la traducción de esas dos nuevas opciones a cada uno de los idiomas, pero imagino que eso ya será mucho más fácil. me ha costado, pero he aprendido mucho en este hilo, con el pho, el smarty, y la estructura de ficheros de prestashop, sus clases y plantillas. Link to comment Share on other sites More sharing options...
Recommended Posts