Prestashop 1.6 – Ordenar categorías en el bloque de navegación por facetas

Por defecto, el bloque de navegación por facetas ordena las subcategorías por posición. Esto puede ser desesperante para el usuario si el árbol de categorías y subcategorías de la tienda es muy extenso y tiene que buscar alguna en concreto.

Para poder ordenar las subcategorías por orden alfabético se tiene que hacer un override al módulo blocklayered, tal y como indican en la web de Prestashop : http://build.prestashop.com/howtos/module/how-to-override-modules/

El archivo a modificar es blocklayered.php, donde tenemos que buscar la consulta que devuelve las subcategorías y modificar el orden. Ésta se encuentra más o menos en la línea 2328, donde al final de la consulta nos encontramos con :

GROUP BY c.id_category ORDER BY c.nleft, c.position';

que debemos sustituir por:

GROUP BY c.id_category ORDER BY cl.name';

Una vez hecho esto recargaremos la página y las categorías y subcategorías estarán ordenadas.

Como enviar mensajes HTML largos con PHP (funcion mail)

Después de dos días dando vueltas como un loco por foros, blogs y manuales, he dado por fin con una función que permite enviar correos electrónicos en formato HTML sin importar el tamaño. En mi caso, cuando tenía que enviar bastantes fotos no enviaba el mensaje, por lo que empecé a investigar y descubrí que el estandar RFC2822 sólo permite 998 caracteres por linea y por lo tanto, dado que enviaba bastantes más caracteres fallaba. Para solucionar este problema basta con incluir la codificación base64 en el header del mensaje :

“Content-Transfer-Encoding: base64\r\n”

y después codificarlo y partirlo en bonitos trozos antes de enviarlo:

chunk_split(base64_encode($content))

La función, que no es mía, la encontré aquí y la explicación al problema aquí. Y aquí la función:

<?php

// Example

$HTML         = “<b>This is a test</b>”;
$from         = “test@test.com”;
$to           = “this@that.com”;
$subject     = “I’m sending a test HTML email”;

sendHTMLemail($HTML,$from,$to,$subject);

function sendHTMLemail($HTML,$from,$to,$subject)
{
// First we have to build our email headers
// Set out “from” address

$headers = “From: $from\r\n”;

// Now we specify our MIME version

$headers .= “MIME-Version: 1.0\r\n”;

// Create a boundary so we know where to look for
// the start of the data

$boundary = uniqid(“HTMLEMAIL”);

// First we be nice and send a non-html version of our email

$headers .= “Content-Type: multipart/alternative;”.
“boundary = $boundary\r\n\r\n”;

$headers .= “This is a MIME encoded message.\r\n\r\n”;

$headers .= “–$boundary\r\n”.
“Content-Type: text/plain; charset=ISO-8859-1\r\n”.
“Content-Transfer-Encoding: base64\r\n\r\n”;

$headers .= chunk_split(base64_encode(strip_tags($HTML)));

// Now we attach the HTML version

$headers .= “–$boundary\r\n”.
“Content-Type: text/html; charset=ISO-8859-1\r\n”.
“Content-Transfer-Encoding: base64\r\n\r\n”;

$headers .= chunk_split(base64_encode($HTML));

// And then send the email ….

mail($to,$subject,””,$headers);

}

?>