Necesitas mi libro "Claves para abrir una tienda online y que venda" y lo sabes...


¿Quieres comprarlo en otro sitio?

Amazon | Casa del Libro

Incrementar seguridad acceso backoffice Prestashop

A raiz de la última e importante actualización de seguridad para Prestashop: https://www.prestashop.com/blog/es/actualizacion-de-seguridad-por-prestashop/ 
en sus versiones anteriores a 1.6.1.0 relacionada con una vulnerabilidad en la aleatoriedad del algoritmo de generación de contraseñas, que podría provocar que un hacker malicioso lograra acceder al backoffice de tu tienda.


Además de aplicar el parche de seguridad proporcionado por Prestashop en ese enlace o realizar la actualización manual de los archivos relacionados (classes/customer.php, classes/tools.php, controllers/admin/adminlogincontroller.php y controllers/front/passwordcontroller.php) -para más información recomiendo este enlace: http://capys.es/como-instalo-la-actualizacion-de-seguridad-de-prestashop-sin-actualizar/  - una de las recomendaciones es añadir un filtro adicional de seguridad en el acceso al backoffice de Prestashop usando la protección de directorios con el archivo .htpasswd

Para ello podemos seguir estos pasos para la instalación y configuración:


1) Crear un archivo llamado fullpath.php con este contenido y subirlo por FTP en el directorio del backoffice (ej: admin1234):

<?php
$dir = dirname(__FILE__);
echo "<p>Full path to this dir: " . $dir . "</p>";
echo "<p>Full path to a .htpasswd file in this dir: " . $dir . "/.htpasswd" . "</p>";
?>


2) Copiar y ejecutar (una vez subido al servidor) el archivo fullpath.php (http://www.mitienda.com/backoffice/fullpath.php) para conocer la ruta exacta donde estará el .htpasswd que necesitas editar en el .htaccess

3) Editar el archivo .htaccess con la ruta del .htpasswd

4) Editar el archivo .htpasswd con el usuario y contraseña encriptada (para esto último usar la web http://aspirine.org/htpasswd_en.html).

El usuario no puede ser el mismo que el usado en el backoffice, una dirección de correo electrónico, porque no puede usarse la arroba @ (por otra parte, independientemente de esta limitación, lo recomendable es que estos datos de acceso sean disintos).

5) Subir al directorio del backoffice (OJO: no al raíz de la tienda) los archivos .htaccess y .htpasswd

Ventana previa a login del Backoffice con htpasswd


Fatal error Rijndael con página en blanco al migrar instalación

Al trasladar una instalación existente a otro servidor puede aparecernos una página en blanco tanto en la parte pública de la tienda como en la administración o backoffice.

Si activamos la depuración de errores en el archivo config/config.inc.php cambiando el valor "off" por "on":

 @ini_set('display_errors', 'on')

nos aparecerá el tipo de error, en caso de ser el siguiente:

"Fatal error: Call to undefined function mcrypt_decrypt() in /home/.../public_html/pos/classes/Rijndael.php on line 61"


La solución está en editar un parámetro desde la base de datos accediendo con phpmyadmin por ejemplo, en la tabla "ps_configuration", el campo es PS_CIPHER_ALGORITHM y el valor debe estar como "0".

Para encontar rápidamente el parámetro puedes usar esta sql:

select * from ps_configuration where name ="PS_CIPHER_ALGORITHM"








Pixel de conversión de Facebook, Twitter y Adwords en Prestashop

Para insertar el código que genera el pixel de conversión que permite realizar el seguimiento entre el enlace origen (Facebook, Twitter, Adwords) y la finalización de una compra en la tienda es necesario modificar el archivo header.tpl (dentro de la carpeta themes/ y la plantilla que se esté utilizando) que es el que contiene las etiquetas <head> y </head> que se generan en la petición de cada página y dónde deben incluirse los respectivos códigos.

Si no se quiere o se sabe modificar este archivo, existen módulos para insertar el pixel de conversión de Facebook, Twitter y Google Adwords:

En la información comercial de estos módulos no se especifica que se controla sólo la página de confirmación de pedido, por lo que entiendo que automatizan la modificación del header anteriormente comentada y por tanto  afecta a TODAS las páginas de la tienda.

La mejor opción es meter los scripts únicamente en la página de confirmación para asegurarse de que aparece el píxel de seguimiento sólo en la cabecera de la página de confirmación del pedido, esto es, la página de conversión,  y no en todas las páginas web en el sitio web.

Para ello, habría que hacer esta modificación en el header.tpl (antes del cierre de </head>):


{if $page_name=="order-confirmation"}
{literal}

<!--- START CODIGO DE FB, TWITTER Y ADWORDS -->
<script>

<!--Códigos de FB, Twitter y Adwords -->

</script>
<!--- END CODIGO DE FB, TWITTER Y ADWORDS -->

{/literal}
{/if}



Por cierto, ¿te he dicho ya que mi libro sigue de los más vendidos en Amazon?


Enlaces relacionados:

https://www.prestashop.com/forums/topic/349437-ayuda-pasos-a-seguir-para-pixel-de-conversion-de-facebook/
http://www.mixedwaves.com/2013/10/how-to-track-facebook-ads-order-conversion-tracking-in-prestashop-store/
https://www.facebook.com/help/286208984874814/
https://support.twitter.com/articles/20171278-seguimiento-de-conversion-para-sitios-web


Alinear productos con tamaños distintos de título

Si los títulos de los artículos de tu tienda son muy diferentes en longitud, ocupando de 1 a 4 líneas en la vista cuadrícula o grid, habrás observado que se la presentación se queda descuadrada.

Para solucionar esto, en global.css de la plantilla utilizada localizar el estilo aplicado al título o nombre de artículo (ej: "product-name") y añadir:

"min-height: 75px; height: 75px;"

Ejemplo:

ul.product_list.grid li.ajax_block_product h5.product-name{float: left;margin: 0;text-align: left; min-height: 75px; height: 75px; }



ANTES

DESPUÉS

Error Prestashop al aplicar descuentos en categorias

PROBLEMA: los descuentos por categoría en grupos de clientes no se aplican en Prestashop.

Si hay un descuento aplicado de forma general a un grupo de clientes sí se aplican, pero si se quiere segmentar todavía más estableciendo un descuento específico por categoría para un grupo de clientes, este descuento no se aplica.

Parece que es un bug común a varias versiones pero que no es muy conocido debido aparentemente a que este nivel de parametrización no lo demandan muchos usuarios.

En el caso de la versión 1.4.7 no me han servido las soluciones propuestas en (las incluyo también por si a alguien sí le sirvieran...):


Aunque sí me pusieron en la pista para crear mi propio parche, modificar classes/Product.php (lineas 1901-1912)

// Group reduction
if ($use_groupReduction)
{
//Descuentos por categoria
$sql = 'SELECT `reduction` FROM `'._DB_PREFIX_.'group_reduction`
WHERE `id_group` = '.$id_group.' AND `id_category` = '.$_GET["id_category"];
if ($row = Db::getInstance()->getRow($sql))
   $price = $price *= ((100 - $row['reduction']) / 100);
else // apply group reduction if there is no group reduction for this category
$price *= ((100 - Group::getReductionByIdGroup($id_group)) / 100);
}

Con esta modificación, todo funciona como debería:

  • Grupo con descuento sin especificar categorías -> Se aplica el descuento general del grupo
  • Grupo con o sin descuento general pero especificando categorías -> Sólo se aplica el descuento de categoría

Como curiosidad, el error salió al revisar un mantenimiento externo de grupos de clientes para asociarles un código de apadrinamiento que pudieran utilizar en el momento del registro, y así asociarlos desde el inicio al grupo y por tanto que pudiera beneficiarse de los descuentos del mismo en su primera compra, sin esperar a que tener que ser asociado "a mano" a un grupo posteriormente desde el backoffice.