Mostrando entradas con la etiqueta Override. Mostrar todas las entradas
Mostrando entradas con la etiqueta Override. Mostrar todas las entradas

martes, 3 de diciembre de 2013

Cantidad de productos por páginas

En este post quiero comentar la posibilidad de cambiar la cantidad de productos que podemos seleccionar desde el selector de paginación del product list.



No sé por qué PS no pone solución a esto pero lo que está claro es que tal cual viene por defecto (10, 20, 50) no ayuda a la usabilidad de nuestra tienda, ya que para una correcta visualización con esas opciones implicaría tener configurado una visualización de 2 o 5 productos por línea, si en tu caso usas una cantidad diferente de productos por línea verás que con las configuración de (10,20,50) irás dejando espacios finales en tu lista de productos.

Cualquiera que vea la siguiente imagen pensará que ya no existen más productos en esa categoría y puede dejar de seguir viendo o buscando productos, cuando en realizad hay muchas más páginas.



Lo primero que podemos hacer es cambiar la configuración desde el backoffice, pero esta configuración únicamente afecta a la visualización principal, pero se mantendrán las opciones de ver 10, 20, o 50 productos por página.



La solución es bien sencilla, un override que cambie esos valores por los que nosotros queramos.

Realizaremos un sencillo override a la función "public function pagination($nbProducts = 10)" de la clase "mitienda.com/classes/controller/FrontController.php"

Una vez tengamos preparado nuestro override donde toca "mitienda.com/override/classes/controller/FrontController.php" editaremos la función "public function pagination($nbProducts = 10)" que hemos copiado.

Es muy fácil ya que solo hemos de editar una sola línea

Bien buscamos la siguiente línea

$nArray = (int)Configuration::get('PS_PRODUCTS_PER_PAGE') != 10 ? array((int)Configuration::get('PS_PRODUCTS_PER_PAGE'), 10, 20, 50) : array(10, 20, 50);

Lo cambiaremos por

$nArray = (int)Configuration::get('PS_PRODUCTS_PER_PAGE') != 10 ? array((int)Configuration::get('PS_PRODUCTS_PER_PAGE'), (int)Configuration::get('PS_PRODUCTS_PER_PAGE')*2, (int)Configuration::get('PS_PRODUCTS_PER_PAGE')*3) : array(10, 20, 50);

¿Qué hemos hecho?
Para que PS calcule la cantidad que aparecerá en las opciones de productos por página hemos hecho que coja la variable "PS_PRODUCT_PER_PAGE" (Que configuramos en el backoffice) y la multiplique por "X" en este caso 2 y 3 ya está bien, de esta forma siempre tendremos en todas las opciones una cantidad acorde y nunca tendremos huecos vacíos.

Podéis descargaros el Override desde este enlace. Descargar





martes, 1 de octubre de 2013

Overrides en Prestashop



En el post de Rich Snippets tuvimos que hacer un Override a la clase Tools.php y no expliqué en detalle en que consiste y por qué es conveniente saber hacer un Override a la hora de hacer cambios en Prestashop.

Un Override es la fórmula que nos ofrece Prestashop para sobrescribir funciones y archivos sin tener que modificar los originales, la idea es que copiamos o creamos un archivo con el mismo nombre en la carpeta indicada para su propósito y Prestashop detectará dicho archivo y lo cargará obviando las funciones originales.

Existen distintos tipos de overrides que nos pueden ayudar a flexibilizar las personalizaciones y librarnos de quebraderos de cabeza frente a nuevas actualizaciones.

Desconozco desde que versión se empezaron a utilizar los overrides, pero al menos desde la versión 1.4.2 que es con la que descubrí Prestashop ya estaban disponibles.

Los tipos de Override que podemos hacer son de Core o de Módulo

Override de Core

Podemos modificar las Clases y Controladores, que principalmente son las funciones centrales de Prestashop.

Los Overrides se realizan desde la carpeta mitienda.com/override/(classes o controllers según necesitemos)

Partiendo de la carpeta Override, hay que respetar tanto la estructura interna de cada carpeta así como los nombres de archivo originales que queramos modificar.

Ej práctico.

Para realizar un Override a la Classe original Tools.php que está en “mitienda.com/classes/”, crearemos un archivo llamado Tools.php en la carpeta “mitienda.com/override/classes/”

Dicho archivo empezará con un código concreto para dar cuenta a Prestashop de que ese archivo contiene funciones que sustituyen las originales o tendrá nuevas funciones que amplían las capacidades de Prestashop.


Class Tools (Es el nombre de nuestra nueva clase) extends ToolsCore (Es la clase a la que apunta nuestra nueva clase)
Si luego creamos funciones con el mismo nombre que las que contiene ToolsCore las de ToolsCore se desactivarán y ejecutará las nuestras, si la función no existe será una nueva funcionalidad que podremos utilizar)

Ahora podemos copiar funciones originales de Tools.php y modificarlas a nuestro antojo, o crear nuevas funciones que utilizaremos sin miedo de perder las funcionalidades después de una actualización.
Del Override del Core únicamente veo una pequeña pega, es que por ahora no podemos realizar Overrides a los java script del core, así que habrá que modificar los originales si es necesario, lo mejor es hacer una copia antes de hacer nada.

Override de Módulo

Podemos modificar el aspecto de un módulo para adecualro a nuestro tema y necesidades, además realizar un Override de módulo es muy sencillo. Tan solo hemos de copiar el archivo original en la ruta que corresponda y modificarlo a nuestro antojo.

Las rutas a usar son las siguientes.


Plantillas (tpl)

mitienda.com/themes/mi-tema/modules/nombre-modulo/nombre-archivo.tpl

JavaScript (js)

mitienda.com/themes/mi-tema/js/modules/nombre-modulo/

Css (css)

mitienda.com/themes/mi-tema/css/modules/nombre-modulo/


Hasta aquí dejo la explicación de los Overrides, si tenéis cualquier duda comentar y haré lo que esté en mí mano.