Magento – Buy or Preorder – Comprar o Reservar bajo pedido – Parte II

En este post, explicaremos lo que dejamos en incertidumbre en el post Parte I.

Empezaremos por las partes previas a modificar los programas como es:

* Crear un atributo FECHA DE ENTREGA donde podemos definirlo como un texto abierto para poder poner una explicación a nuestros clientes tan extensa como queramos o definir los valores posibles de fecha de entrega.

* Editar la ficha de Producto y tener siempre documentada la fecha de entrega editada anteriormente en los casos de productos en reserva.

* En la ficha de producto también hay que tener en cuenta que el inventario en los productos sin stock tienen que ser cambiados y poner los siguientes parámetros cambiados:

  1. Disponibilidad en existencias – En Existencia (Stock Availability – In Stock)
  2. Pedidos de artículos sin existencias – Permitir por debajo de cero avisando o no según como se quiera (Backorders – Allow).

* Editar el fichero list.phtml de app\design\frontend\default\plantilla\template\catalog\product\ y el addtocart.phtml de httpdocs\app\design\frontend\default\plantilla\template\catalog\product\view\ para añadir el nuevo código con lo que podremos controlar si el producto está en stock y por tanto hacer visible o no la fecha de entrega.

En ambos ficheros habrá que definir 3 variables que nos dirá la situación del producto:

define("CUSTOM_BACKORDERS_YES", 1);
define("CUSTOM_BACKORDERS_YES_NOTIFY", 2);
define("CUSTOM_STOCK_INSTOCK", 1);

Por otro lado habrá que definir el botón con texto del estilo «Comprar» o «Reservar» según la situación. Se podría controlar con este código:

$rquantity = (int)Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product)->getQty();
$rbackorder = Mage::getModel('catalog/product')->load($_product->getId())->getStockItem()->getBackorders();
$rstockavailability = $_product->getStockItem()->getIsInStock(); ?>
<?php if (($rquantity <= 0) && (($rbackorder == CUSTOM_BACKORDERS_YES) || ($rbackorder == CUSTOM_BACKORDERS_YES_NOTIFY)) && ($rstockavailability == CUSTOM_STOCK_INSTOCK) ) { ?>
<?php $buttonTitle = $this->__('Preorder'); ?>
<?php } else { ?>
<?php $buttonTitle = $this->__('Add to Cart'); ?>
<?php }

* Editar el fichero de traducciones para traducir la palabra backorder en el checkout.

Magento – Buy or Preorder – Comprar o Reservar bajo pedido – Parte I

En todas las tiendas que compramos, creo que la mayoría nos gusta saber si lo que compramos está en stock o no y el tiempo que tarda en llegarnos.

Hay una forma de desarrollarlo en Magento a través del botón de compra y los atributos del inventario, a parte de tener informado a través de páginas de cuál es nuestra política de envío y de inventario.

Pasos que debemos tener en cuenta:
* Poner por ejemplo un botón de comprar o reservar según si está en stock o no.
* Definir un atributo fecha de entrega que dará más información a nuestros clientes.
* Gestionar nosotros el stock a través del inventario del producto.
* Dar de alta texto de traducciones para las reservas, si tenemos la tienda en multiidioma.

En el siguiente post informaremos de cómo se puede realizar esto editando los programas de Magento.

PageSpeed Insights (by Google) – Disponible para Chrome

Hoy en día los clientes cada día más se preocupan no sólo que su página esté desarrollada, también de los comentarios a su vez de sus clientes, de las opiniones de ellos y de una herramienta que ha sacado google hace ya bastante tiempo, PageSpeed Insights y que ahora está disponible para Chrome.

Para mi gusto hay que mezclar la herramienta web junto con la de Pc, bajo chrome para poder conseguir los mejores consejos y poderlos comprobar tú mismo.

Evalúa bloqueos de Javascripts, rendimientos de CSS, tamaño de imágenes, visibilidad desde pc ó móvil y el timeout de las páginas o caché, así como muchos aspectos más. Todo esto es importante para el rendimiento y el placer de poder visitar una página y atraer más o menos clientes, pero no se debe olvidar que el aspecto que a tí te parece el más «genial» del mundo, a unos clientes les gusta a tope y a otros no les gusta nada y es más, hay aspectos que pueden mejorar el rendimiento y ser muy poco atractivos y otros ser muy atractivos pero tener un rendimiento pésimo. Evaluar todo esto junto con el desarrollo de una tienda es una de las tareas más duras y difíciles de aconsejar, asesorar y ayudar. Los informáticos nunca tenemos la razón, 😉

Ahondando en la herramienta que ha sacado Google para Chrome diré que es la maravilla para adentrarse en cada una de las peculiaridades de la programación y eso sí, la forma de pasar las horas muertas haciendo que una web pueda estar lo más óptima que se pueda.

A sudar, queridos, con esta herrmienta y a descubrir un nuevo universo! PageSpeed Insights (by Google)!

Comprimir .js o .css

¿alguna vez os habéis acordado de algún programador por no haber indentado un programa?

¿os habéis planteado que ocurre muy habitualmente en los .js y .css?

Es una práctica recomendada por google ahora y consiste en eliminar todo tipo de código de programación inútil como blancos, tabulaciones, indentados, controles de carro,…y dejar únicamente el código útil.

Es sencillo porque hay dos compresores que te ayudan a ello y no es necesario desarrollar nada. Por ello, os dejo aquí el enlace a ese compresor demo que te ayuda poniendo el código y llevando el resultado a tu web.

A los programadores de antes, nos gusta tener el código bien indentado, con lo que yo suelo dejarme la copia indentada para que sea más cómoda cualquier modificación.

También es posible hacerse una llamada a la función como explican en la web: http://www.phpied.com/cssmin-js/

Ahora vayamos a hacer la demo y veréis que rápido es! Para ello, habrá que acceder al siguiente enlace:

http://tools.w3clubs.com/cssmin/

En la primera casilla pondremos nuestro código .js o .css y en la segunda casilla nos pondrá como queda optimizado.

Increase the Magento Speed with mod_deflate – Incrementar la velocidad de Magento con mod_deflate

Hay varias tácticas para aumentar la velocidad de tu tienda de Magento y una de ellas es utilizar el módulo de PHP mod_deflate.

Para averiguar si está instalado en nuestra tienda, recordad que lo podemos averiguar realizando un fichero .php para llamar a la función phpinfo(); como describía en el post siguiente: http://www.patriciaseuba.es/2014/07/ioncube-o-cualquier-configuracion-de-tu-servidor/

<?
phpinfo();
?>

Si no está, deberemos ponerlo en el servidor para utilizar las funcionalidades que vienen a continuación.

Para revisar si la web utiliza el mod_deflate podemos acceder a una web que nos lo “chivará”: Accede a http://www.whatsmyip.org/http-compression-test/ y pon en la casilla la URL de la tienda. Si no pone OK, sabremos que no está utilizando el módulo mod_deflate.

Para utilizarlas, iremos al .htaccess del web site y donde aparezca lo siguiente o nada si buscamos el mod_deflate:

<IfModule mod_deflate.c> ############################################ ## enable apache served files compression ## http://developer.yahoo.com/performance/rules.html#gzip # Insert filter on all content ###SetOutputFilter DEFLATE # Insert filter on selected content types only #AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript # Netscape 4.x has some problems... #BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.06-4.08 have some more problems #BrowserMatch ^Mozilla/4\.0[678] no-gzip # MSIE masquerades as Netscape, but it is fine #BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # Don't compress images #SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary # Make sure proxies don't deliver the wrong content #Header append Vary User-Agent env=!dont-vary </IfModule>

lo cambiaremos por lo siguiente:

<IfModule mod_deflate.c>

    AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
    AddOutputFilterByType DEFLATE application/xml application/xhtml+xml application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript application/x-javascript
    #AddOutputFilterByType DEFLATE application/x-httpd-php

    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.(?:pdf|doc)$ no-gzip dont-vary
    SetEnvIfNoCase Request_URI \.(?:avi|mov|mp3|mp4|rm)$ no-gzip dont-vary

</IfModule>

Espero que os sirva pero de todas formas si queréis oirlo en inglés a través de un youtube os dejo aquí el enlace:
http://youtu.be/g6dXt6gyUTk

Error Enabled Compilation before Running a Compile Magento – Error al activar compilación antes de compilar Magento

Desastre! Desastre! Hemos ejecutado la compilación antes de compilar Magento y ahora no podemos acceder a la tienda.

Queríamos solucionar un tema de rendimiento y ahora hemos ido un paso atrás! Ni el cliente ni nosotros podemos acceder!

Todo tiene solución! tranquilos! Vamos a desactivar la compilación:

1.- Ir a la carpeta «includes» de tu web. ¿dónde? var/www/tuweb/includes

2.- Editar el fichero «config.php»

3.- Comentar la siguiente linea siguiente:

define(‘COMPILER_INCLUDE_PATH’, dirname(FILE).DIRECTORY_SEPARATOR.’src’);

Ioncube o cualquier configuración de tu servidor

¿cómo saber qué módulos de php tienes configurado en tu servidor? Por ejemplo, saber si tienes ioncube.

Aquí dejo un pequeño programa que puedes dejarte en cualquiera de tus dominios para verificar la instalación de PHP así como si tienes ioncube.

El trozo de programa lo puedes meter en el raiz de tu dominio, por ejemplo con nombre info.php

Para ejecutarlo y comprobar el estado de tus módulos, sólo debes poner en el navegador: www.tudominio.com/info.php

La función primera te saca un listado de los módulos instalados. El if simplemente te comprueba si tienes Ioncube instalado por si sólo quisieras saber esa información.

<?
phpinfo();

if(extension_loaded("IonCube Loader")) {     
 echo "Ioncube loaded";
}
else {
 echo "Ioncube not loaded";
}
?>

Magento – Layout call static block CMS – Llamar desde Layout a Bloque CMS

Dentro de Magento tenemos la facilidad de poder llamar a un bloque estático o Cms Block/Bloque CMS desde un layout porque necesitemos incorporar una nueva funcionalidad por ejemplo en la apariencia de una plantilla.

Sólo es necesario un par de pasos:

1.- Crear el bloque CMS al que queremos llamar. En este caso llamaremos «bloqueCMS»

2.- Desde el layout donde lo queremos incorporar pondremos la llamada teniendo en cuenta la colocación con el atrbuto after o before. He puesto un nombre distintos en el atributo «name» para que nos demos cuenta que lo que cuenta es el id del bloque o identificador y no el título de él.

<block type="cms/block" name="Bloque-CMS-R2D2" before="contacto_dcha">
 <action method="setBlockId"><block_id>bloqueCMS</block_id></action>
 </block> 

Magento – Llamar a un Bloque CMS desde un Bloque CMS

Dentro de Magento tenemos la facilidad de poder llamar a un bloque estático o Cms Block/Bloque CMS desde otro bloque estático o desde una página.

Sólo es necesario un par de pasos:

1.- Crear el bloque CMS al que queremos llamar. En este caso llamaremos «llamada»

2.- Desde el bloque que va a ser el llamador o la página llamadora escribir lo siguiente.

 {{block type="cms/block" block_id="llamada"}}

Magento – Modificar mensaje de bienvenida – Modify wellcome message

Modificar o incluir en la plantilla el mensaje de Bienvenida de Magento no es complicado.
Lo primero y más sencillo es ver como incluirlo en la plantilla, normalmente en el header.phtml que te puedes encontrar en /app/design/frontend/default/plantilla/template/page/html
Ahí, puedes incluir la siguiente línea:

<p class="welcome-msg"><?php echo $this->getWelcome() ?> <?php echo $this->getAdditionalHtml() ?></p>

Esto, cogerá la combinación entre lo que tienes en el administrador y lo que tienes en el core.

Pongamos el caso de que cuando el cliente no está conectado quiero que salga «Bienvenido» y cuando está conectado, que le ponga «Bienvenido, Pepito Pérez».

Para ello no tocaríamos el código de core y en el administrador podríamos poner en Sistema-> Diseño->Cabecera: Bienvenido

Si no quiero que aparezca nada cuando no está conectado, el texto del administrador de Magento lo borraremos.

Ahora, hemos decidido ser más amigables y cambiar el texto de Bienvenida y ponerlo sólo con nombre o saludando con «Hola…».

Iremos a app/code/core/Mage/Page/Block/Html/Header.php y sin editarlo en ese sitio ya que perderíamos con los cambios de versiones, lo copiamos a app/code/local/Mage/Page/Block/Html/.

En la función getWelcome() es donde deberíamos la línea:
$this->escapeHtml(Mage::getSingleton(‘customer/session’)->getCustomer()->getName()));
por:
$this->escapeHtml(Mage::getSingleton(‘customer/session’)->getCustomer()->getFirstname()));