Category Archives: Prestashop

Uso de la clase PrestashopCollection

La clase PrestashopCollection

Hoy vamos a ver el uso de la clase PrestashopCollection, ya que os puede ser de utilidad en más de una ocasión, cuando necesitéis, por ejemplo  retocar o consultar masivamente registros de una tabla MySQL de Prestashop, pero para ello necesitemos utilizar un método que hemos implementado en el ObjectModel que define los campos de dicha tabla, y que además, no podamos acceder a el sin instanciar el objeto por no ser estática.

Ejemplo de uso de la clase PrestashopCollection

Pongamos por ejemplo, que queremos obtener todos los transportistas(carriers) asignados a cada producto mediante el método de la clase Product getCarriers.Para ello, definiremos la query que obtendrá los registros que se cargarán dentro del array.Veamos el ejemplo:

 

 

Cómo podréis comprobar en el ejemplo, nos podemos ahorrar varias líneas de código, utilizando esta clase. Una alternativa a esta clase, puede ser el método estático hydrateCollection del objeto ObjectModel, ya que a pesar de tener que utilizar más lineas de código, es bastante más personalizable, ya que podemos montar las queries directamente sobre strings y son necesidad de llamar a métodos de la propia clases para montar nuestra query.De todos modos, sigo recomendando el uso de la clase PrestashopCollection por encima de hydrateCollection si la query que queremos montar para obtener el array de objetos no es excesivamente compleja.

Si utilizáis otros métodos para cargar object models en vuestros desarrollos en Prestashop, no dudéis en dejar en comentario.Espero que os sea de utilidad

1 Star2 Stars3 Stars4 Stars5 Stars (2 votos, media: 5,00 de 5)
Loading...

Aumentar el memory limit en PHP para Prestashop

Aumentar memory limit en PHP para Prestashop

Dependiendo de la configuración de los parámetros por defecto de nuestro hosting o servidor donde tenemos alojada nuestra tienda Prestashop, podemos obtener errores de configuración PHP. Uno de los errores más comunes que me encuentro, es el error PHP Fatal error: Allowed memory size of bytes exhausted. Este error esta causado por que la memoria asignada a la ejecución de cada página no es suficiente para poder ejecutar todo el contenido de la página, como por ejemplo, debido a la cantidad de módulos instalados en nuestra tienda.El parámetro de php que determina la cantidad de memoria es el memory_limit, veamos como podemos cambiar este valor.

Consideraciones previas

Este parámetro no se puede aumentar a lo loco, tened en cuenta que cuanta más memoria asignéis a este parámetro, menos peticiones podrá gestionar el servidor simultáneamente.Por ejemplo, si el servidor en el que esta alojada nuestra tienda tiene 1 GB de RAM, y le asignamos 512 MB de RAM al memory_limit, no podrá atender más de 2 peticiones simultáneas. No esta de más decir que también que debemos tener en cuenta el número de visitas que tenemos al día, ya que si tenemos 4 visitas diarias, podremos aumentar un poco más el memory limit en PHP para Prestashop que si tuviésemos 400 visitas diarias.

Comprobar el valor del parámetro memory limit

Para ver el valor del memory limit que tenemos en nuestra tienda, tendremos que subir un fichero de pruebas vía FTP que llamaremos por ejemplo, test.php a la raíz de nuestra tienda con el siguiente contenido:

Llamaremos a este fichero desde nuestro navegador, que en mi caso seria http://localhost/mitienda/test.php. Y buscamos el valor del parámetro memory_limit

Parámetro memory limit en phpinfo()

Parámetro memory limit en phpinfo()

Tened en cuenta que para comprobar que los cambios han funcionado en los puntos posteriores, deberemos actualizar para saber si han funcionado los cambios de valores.

Aumentar el memory limit en PHP para Prestashop desde ficheros htaccess

Para utilizar este método, debemos ir la raíz de nuestra tienda prestashop y editar el fichero .htaccess que encontraremos ahí, siempre evitando editar dentro de las líneas marcadas en el fichero de las cuales no debemos introducir código, ya que sino Prestashop las borraría en posteriores ejecuciones de la página.Veamos el código a insertar:

Los 128M, son a modo de ejemplo, poned un número acorde a las necesidades de vuestra tienda.

Por último, una vez guardado el fichero, comprobad  en el fichero test.php que hemos creado ver si cambia la cantidad el valor del parámetro.

Aumentar el memory limit en PHP para Prestashop desde el fichero php.ini

Para cambiar el valor del parámetro a través de este método, es necesario localizar la ubicación del fichero php.ini en vuestra instalación de PHP, puesto que en función del sistema operativo y de las configuraciones de PHP, dicha ubicación puede varios.Por ejemplo de mi instalación de Ubuntu, este fichero esta en /etc/php5/apache2 .En este caso,editad vuestro fichero como root (sudo), buscad en el fichero las siguientes líneas y cambiad el valor:

Tened en cuenta que no es necesario reiniciar vuestro servidor web para que los cambios del valor del parámetro surtan efecto.

Aumentar el memory limit en PHP para Prestashop desde el fichero config.inc.php

El último método que veremos hoy,  será el de hacerlo directamente desde los ficheros PHP de la instalación de Prestashop, con la función ini_set de PHP.Id a la raiz de vuestra tienda Prestashop ,editad el fichero ubicado en /config/config.inc.php, añadiendo la siguiente línea al principio del fichero, justo después de acuerdo de licencia de Prestashop:

Último recurso

Si ninguno de estos método os funciona y siguen sin reflejarse los cambios del parámetro en el fichero test.php que hemos creado,en caso de tener un hosting contratado, poneros en contacto con él, indicando que os aumente el memory limit de PHP.

1 Star2 Stars3 Stars4 Stars5 Stars (1 votos, media: 5,00 de 5)
Loading...

PHPUnit en Prestashop

PHPUnit en Prestashop

PHPUnit es una potente herramienta para garantizar que nuestro código es estable a través de tests unitarios.Hoy os mostraré cómo utilizar PHPUnit en Prestashop con las clases que vienen incorporadas en su core, ya sea, por ejemplo, para probar nuestros overrides de las clases o controladores, o para probar que nuestros módulos son estables a medida que los vamos desarrollando.

Tened en cuenta que la versión mínima para poder trabajar con PHPUnit en Prestashop tiene que ser la 1.6.0.1, que fue desde la que se incluyeron estas clases, y por si no fuese obvio, tened instalado PHPUnit en nuestras máquinas,podéis ver las instrucciones de instalación aquí (en inglés).

Estructura de directorios para trabajar con PHPUnit en Prestashop

La carpeta con la que trabajaremos con los tests unitarios será la carpeta /tests en esta captura dejo la estructura que tienen los directorios de la versión 1..6.0.14.

 

Estructura de directorios para utilizar PHPUnit en Prestashop

Estructura de directorios para utilizar PHPUnit en Prestashop

Veamos por encima cual es la funcionalidad de los principales directorios y ficheros de esta clase:

  • Classes: aquí están las clases creadas por Prestashop para facilitarnos las tareas de tests unitarios que extienden de la clase de PHPUnit PHPUnit_Framework_TestCase.Para realizar tests unitarios de componentes que creemos de Prestashop, deberemos utilizar las clases aquí contenidas.
  • Config: en este directorio, están los ficheros de configuración con los que lanzaremos los tests unitarios.
  • Unit: aquí encontraremos las distintas carpetas en las que dejaremos nuestros ficheros de test.Un aspecto a tener en cuenta al crear los ficheros de tests unitarios, debemos respetar la misma estructura de directorios y nomenclatura que tenemos en Prestashop.Tened en cuenta que las carpetas que están aquí dentro son las equivalentes al core de prestashop, por lo que serán sobre las que podremos realizar los tests.

Ficheros de Prestashop para trabajar con PHPUnit

A continuación, comentaremos la funcionalidad de los principales ficheros para trabajar con PHPUnit en Prestashop:

  • bootstrap.php: Aquí está la configuración mínima de Prestashop para poder cargar las funcionalidades básicas y así poder realizar los tests.Esta clase debemos incluirla en el parámetro con el mismo nombre al lanzar nuestros tests con PHPUnit(el parámetro bootstrap de PHPUnit).
  • classes/PrestaShopPHPUnit.php: esta es la clase base que extiende de la clase PHPUnit_Framework_TestCase y podemos utilizarla en las tanto en las clases y controladores del core de Prestashop, como en los overrides de estos mismos.A continuación, os hago una breve descripción de los métodos que trae esta clase:

    • invoke: con este método podremos ejecutar métodos que no sean visible de alguna de las clases que queramos testear(privados o protegidos).
    • getProperty: este método sirve para que podamos obtener valores de variables de la clase que le pasemos por parámetro aunque dichas variables sean privadas o protegidas.
    • setProperty: este método sirve para que podamos obtener valores de variables de la clase que le pasemos por parámetro aunque dichas variables sean privadas o protegidas.
  • classes/ModulePrestaShopPHPUnit.php: esta clase extiende de PrestaShopPHPUnit y contiene tres métodos que nos ayudaran a hacer pruebas del módulo que queramos testear:
    • setUp: aquí esta la configuración que se ejecutará al inicio de todos los tests.En este caso, se asigna un employee al Context con perfil de administrador.
    • testInstall: este método testea que el módulo a testear se puede instalar correctamente.
    • testUninstall: este método testea que el módulo se puede desinstalar correctamente.

Configuración del fichero phpunit.xml

Para poner el fichero de configuración phpunit.xml, os recomiendo que lo dejéis a la altura del directorio /tests .Si os interesa ejecutar solamente los tests que hayáis realizado vosotros, os pongo un ejemplo fichero de configuración phpunit.xml y los comento punto por punto:

  •  bootstrap=’bootstrap.php’: aquí pondremos la ruta al fichero bootstrap.php desde el que carga la configuración básica de Prestashop
  • testsuite name=’My_tests’: declararemos este tag para que se ejecuten solamente los tests que nos interesen a nosotros ya que si no declaramos un test suite, se ejecutarán todos los tests que contiene la carpeta /tests/unit y la ejecución de los tests tardará mucho tiempo si en realidad, tan solo queremos que ejecutar sobre los que estamos realizando cambios.
  • directory: este tag contiene el directorio el cual contiene los tests que queremos ejecutar.Declara este tag tantas veces como sea necesario para añadir los  directorios de tests que nos interese ejecutar.

Ejemplo de funcionamiento de PHPUnit en Prestashop

Cogiendo el ejemplo del fichero xml de lanzamiento de PHPUnit comentado anteriormente, vamos a hacer una prueba simple sobre el módulo blockuserinfo. Para empezar, vamos a la carpeta /tests/unit/modules/blockuserinfo y vamos a abrir el fichero blockuserinfo.php.

Como prueba simple, vamos a testear que la variable name del módulo es la que debería ser (blockuserinfo). Vamos a insertar el siguiente método en la clase.

 

Vamos a ejecutar la PHPUnit en Prestashop desde la linea de comandos.Nos ponemos a la altura del directorio /tests de la instalación de Prestashop y ejecutamos lo siguiente:

El resultado que obtendremos , será algo parecido a esto:

Resultado de la ejecución de PHPUnit en Prestashop

Resultado de la ejecución de PHPUnit en Prestashop

 

Yo he ejecutado el comando en Ubuntu, pero es igualmente válido en Windows o Mac.

Vemos que se han ejecutado 3 tests, es decir , el que hemos definido nosotros, más los dos que incluía la clase ModulePrestaShopPHPUnit para testar la instalación(podéis comprobarlo en la captura, ya que cada test es un punto que aparece en el resultado de la ejecución). Como podéis ver, los tests se han ejecutado correctamente.

Os animo, a que empecéis a utilizar PHPUnit en vuestros desarrollos de Prestashop, pues son muy útiles y a la larga, aunque inicialmente os consuma más tiempo dejar vuestro desarrollo bien cubierto con tests, a la larga veréis el tiempo que ahorráis en el mantenimiento de este módulo.

1 Star2 Stars3 Stars4 Stars5 Stars (1 votos, media: 5,00 de 5)
Loading...

Copyright © 2017. Powered by WordPress & Romangie Theme.