Magento cache clear – cron

Si seguimos manteniendo el sistema. Otra labor importante a realizar de forma automática y sin necesidad de estar entrando en Magento es la “limpieza” de caché. Esto es muy recomendable si estamos actualizando de continuo el sistema.

Para ponerlo de forma planificada en el sistema, se puede poner en el panel de control, en tareas programadas el siguiente comando:

rm -rf /var/www/vhosts/webtoclearcache/httpdocs/var/cache/*

Mucho cuidado! Cómo verás es un puro borrado de directorio y ficheros. No te vayas a equivocar de directorio!!! Podrías tener una sorpresa desagradable al día siguiente!

Magento reindex manually – cron

Siguiendo con el post de ayer, supongo que ya todos habéis deducido que puidiendo programarlo a una hora en cuestión, lo mejor es dejarlo preparado para ello y olvidarnos de realizar esta tarea en Magento.

Los índices, sobre todo los de búsqueda, van desactualizándose según el grado de modificaciones de la tienda, con lo que es conveniente, mínimo una vez a la semana realizar esta labor y cómo no, mejor dejarlo programado por las noches cuando hay menos clientes accediendo ya que afecta al rendimiento.

Por todos estos motivos, iremos a nuestro panel de control, a las tareas programadas y pondremos a realizar el siguiente comando todas las noches.

Otra recomendación más: Realizarlo antes del backup.

Comando:

php /var/www/vhosts/webaindexar/httpdocs/shell/indexer.php -reindexall

Magento reindex manually

Aquí estamos viendo cómo reindexar los índices de las tablas de Magento cuando se quedan un poco “pillados” o a través del administrador de Magento no se dejan.

1) Vamos a la línea de comando, abriendo un ssh.

2) nos posicionamos en el directorio shell que se encuentra en:
/var/www/vhosts/nombre_web/httpdocs/shell

3) en ese directorio podrás ejecutar lo siguiente:
php indexer.php –reindexall

El resultado de la ejecución será algo del estilo siguiente:

Product Attributes index was rebuilt successfully
Product Prices index was rebuilt successfully
Catalog URL Rewrites index was rebuilt successfully
Product Flat Data index was rebuilt successfully
Category Flat Data index was rebuilt successfully
Category Products index was rebuilt successfully
Catalog Search Index index was rebuilt successfully
Stock Status index was rebuilt successfully
Tag Aggregation Data index was rebuilt successfully

Ahora podrás comprobar en el administrador de Magento que ya han sido actualizados.

en algunos foros recomiendan truncar ciertas tablas, pero en mi caso no ha hecho falta. Las tablas que recomiendan truncar son las siguientes:
catalog_product_flat_1
catalog_product_flat_2
catalog_product_flat_3
catalog_product_flat_cl

Particularmente yo lo probaría si no queda otra y habiendo hecho una previa copia en otra tabla

Reports Magento

Algunos reports de Magento no son del todo útiles o les falta un poquito de chicha.

Estoy en la deliciosa labor de poder encontrar dónde se guardan y poder modificarlos a mi antojo y para ello voy a poner un ejemplo sencillo que he tenido que elaborar.

Imaginemos que queremos añadir en el informe de artículos pedidos, donde sólo viene registrado el nombre de producto y la cantidad, el sku y el precio del artículo.

En el administrador de Magento, mirando la línea del navegador, veremos que pone nombredetienda.es/nombreadmin/report_product/sold. Esto nos da pistas para saber localizar el programa de ese report.

En filezilla o cualquier herramienta de transferencia de ficheros, podemos ir al directorio /httpdocs/app/code/core/Mage/Adminhtml/Block/Report/Product/Sold que es donde encontraremos el desarrollo del report con nombre Grid.php y al editarlo podremos ver que sólo imprime el nombre y la cantidad.

Pero cuidado de modificarlo en el directorio core! Recordad hacerlo en el local para que las nuevas versiones de Magento no machaquen el desarrollo

Para añadir el SKU y el precio por ejemplo, añadiremos estas 2 líneas de código:

        $this->addColumn('sku', array(
            'header'    =>Mage::helper('reports')->__('Product SKU'),
            'sortable'  =>false,
            'index'     =>'sku'
        ));
        $baseCurrencyCode = $this->getCurrentCurrencyCode();

        $this->addColumn('price', array(
            'header'        => Mage::helper('reports')->__('Price'),
            'width'         => '120px',
            'type'          => 'currency',
            'currency_code' => $baseCurrencyCode,
            'index'         => 'price',
            'rate'          => $this->getRate($baseCurrencyCode),
        ));

Magento Compilation – ssh Compile, Clear, Enable and Disable – Compilación Magento a través de ssh

Upss, desastre y ya no sabemos que hacer porque no accedemos a Magento y necesitamos cómo se desactiva la compilación desde ssh.

Solución sencilla accediendo a nuestro servidor a través de ssh y ejecutando complier.php.

Un pequeño tutorial aquí mismo:

$ php shell/compiler.php
Usos:  php -f compiler.php -- [options]
state         Muestra el estado de la compilación, activa o no
compile       Ejecuta la comilación
clear Desactiva la compilación y borra los ficheros
enable Activa la compilación
disable      Desactiva la compilación
help         Ayuda!

¿Cómo traducir una extensión de Magento? – How to translate a Magento extension?

¿qué opináis de si un trabajo está hecho y funciona, para qué volverlo a hacer?

En muchas ocasiones, hay desarrolladores de Magento que comparten sus trabajos con un coste que vale la pena pagar ya que el hecho de empezarlo de cero supone más esfuerzo y coste.

Hace no demasiado me encontré con uno de estos fabulosísimos trabajos con la excepción de que las traducciones al español no estaban ni pensadas y ahí fue dónde se me ocurrió poner este post donde explico cómo hacer que una extensión que no está traducida, empiece a estarlo.

Instaláis la extensión y….ta chan! sólo en inglés!
Debéis ir a app/code/community/directorios_extension/etc/config.xml y buscar dentro una referencia al fichero “.csv” o un tag <translate>

Pueden ocurrir dos cosas:
1.- No está ningún enlace a un fichero .csv
2.- Si está, pero no traduce tampoco

Vamos a explicarlo como si no estuviera y a partir de ahí, avanzamos hasta el caso 2 donde simplemente está pero no traduce.

Pasos a realizar:
1) Buscar el fichero config.xml en app/code/community donde normalmente se instalan las extensiones, en el propio directorio etc de la extención. Imaginemos que está dentro de app/code/community/extensionguay/masprogram/etc

2) coger el fichero config.xml que hemos comentado, editarlo e insertarle un trozo de código de este estilo, entre los tags de <frontend></frontend>

<translate>
            <modules>
                <advancedsearchsuggests>
                    <files>
                        <default>extensionguay_masprogram.csv</default>
                    </files>
                </advancedsearchsuggests>
            </modules>
</translate>

3) Generar ese fichero .csv en el directorio /app/locale/en_US con las líneas de los textos en inglés-inglés como de costumbre.

4) Generar ese fichero .csv en el directorio /app/locale/es_ES con las líneas de los textos en inglés-español como de costumbre y pongo un ejemplo por si no se sabe: “Price: “,”Precio: ”

Y….c’est tout!

* Es importante recordar que los textos a traducir son literales, con espacios y todo. Es decir, no es lo mismo traducir “Price:” que “Price: “. Recordarlo porque suele dar unos cuantitos quebraderos de cabeza.

Bien sencillo, ¿verdad? Pues si estamos en el caso 2, sólo abrá que hacer el cuarto paso, pero..eso ya lo sabéis todos, verdad?

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.

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’);