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

Curiosas pruebas de rendimiento de google – Google developer

Hace no mucho he revisado algunas de las páginas con el tests de rendimiento de google y curiosa la información que ofrece.

Muchas veces deduce que una imagen de 1k le puedes bajar el tamaño, que supongo que aún puedes, pero…¿esto mejora tanto el rendimiento?

La última es que en muchas de las webs, tiendas onlines, …el cliente quiere ver el número de visitas a través de la herramienta de google, llamada analitycs y que por ello google te ofrece como integrarla. Y …ahora os cuento lo curioso.

Se supone que google consigo mismo debería estar optimizado para web, ¿verdad?

Pues parece que no es así y sino..miren el resultado de las propias pruebas de rendimiento de google:

«Especificar caché de navegador

Establecer una fecha de caducidad o una edad máxima en las cabeceras HTTP de los recursos estáticos indica al navegador que cargue los recursos descargados previamente del disco local en lugar de hacerlo a través de la red.
Aprovechar el almacenamiento en caché del navegador de estos recursos almacenables en caché:

  • http://www.google-analytics.com/ga.js (2 horas)»

Este es el mensaje literal de las pruebas de rendimiento.

Tiene gracias que estas pruebas digan que el propio google no define bien sus javascripts en caché, no?

Tú puedes tener control sobre los programas de tu web, pero de los pluggins o programas incrustados de otros, ¿cómo tener control para que no te dañe el rendimiento de tu web?

Me da error la cuenta de correo – Texto fácil que me envían algunos clientes, ;)

Me sucede muy a menudo, incluso diría que más de lo que debería ser normal, que me llama un cliente diciendo que manda un correo a un cliente con cuenta en gmail y le sale que el cliente no existe, …

¿culpa del servidor? Me temo que no

¿ha pillado la cuenta en algún momento mal? Me temo que si

¿tenía una cuenta antigua en la caché del outlook o de otro gestor de mail? Creo que no me equivoco casi nada si aseguro que es este el problema o el anterior.

Esta es la conclusión que saca gmail si te pasa eso:

» Este error suele producirse cuando hay erratas en la dirección de correo electrónico del destinatario. Algunos de los errores más habituales:

1)Las comillas: <‘nombredeusuario@gmail.com’> o <«nombredeusuario@gmail.com»>

2)Puntos al final de la dirección: <nombredeusuario@gmail.com.>

3)Espacios delante o detrás de la dirección: < nombredeusuario@gmail.com>, <nombredeusuario@gmail.com >»

Puedes leer el artículo de google en el siguiente enlace que considero interesante para todos los clientes de informáticos, 😉

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!

Añadir una fuente nueva sin tener que diseñarla – Google

Hoy en día, google lo pone fácil definiendo tipos de letras diversos para incorporar en la web sin dañar el rendimiento de esta y sin tener que estar diseñando el tipo de letra.

Google fonts te ofrece una amplia variedad de fuentes que puedes ver aquí y de nuevo, hace de nuestro trabajo algo más sencillo.

Es importante recordar que las letras pueden ser muy bonitas, muy estilosas, pero si quieres que haya feedback en tu web o tienda online, tiene que ser principalmente legibles. Cansar a un cliente con la lectura supone venta perdida segura.

Para poder instalar una fuente de google, iremos al enlace arriba mencionado y elegiremos uno de los que vemos.
En este caso voy a poner un ejemplo para poder ayudar a la instalación aunque es de sobra sencillo.

1) Elegimos la Normal 400, Slabo 27px y pinchamos sobre la flecha que pone «Quick use».
Veremos rápidamente el impacto que tiene ese tipo de letra en nuestra web. Importante para no influir en el mal rendimiento de la página.
2) Elige en el segundo paso de este acceso, el estilo de caracteres que puedes llegar a usar. En la fuente que he elegido, hay 2 opciones, sólo, pero pueden ser muchas más.
3) Integra la fuente en tu web, al inicio de los tags

<head></head>

con el código que te aparece. En mi caso el siguiente

<link href='http://fonts.googleapis.com/css?family=Slabo+27px&subset=latin,latin-ext' rel='stylesheet' type='text/css'>

.

Ejemplo de la inseción:

<html>
  <head>
    <link href='http://fonts.googleapis.com/css?family=Slabo+27px&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
    <style>
      body {
        font-family: 'Slabo', latin;
        font-size: 27px;
      }
    </style>
  </head>
  <body>
    <div>Chupi!</div>
  </body>
</html>

4) Como último paso integra la fuenta en tu css en vez de ponerlo directamente en el .html para futuras modificaciones te ahorrá dolores de cabeza.
font-family: ‘Slabo 27px’, serif;
Por ejemplo:
h2 { font-family: ‘Slabo 27px’, serif; font-weight: 400; }

¿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?

Optimización de caché – Aumento de rendimiento agregando Headers de Expiración

A través de la herramienta de google que os comenté en otro post, se puede ver que es importante definir la caché de las páginas y de los tipos de ficheros tipo javascript, estilos, imágenes,…
Es en este punto es donde se debe saber que se habla de header de expiración que es donde indicamos cuando un fichero expira. Si el fichero ha expirado, se vuelve a cargar y si el fichero no ha expirado, no se carga de nuevo para poder optimizar las cargas al máximo. Por tanto, para ficheris que no cambian comúnmente como las imágenes, vídeos, javascript, hojas de estilo podríamos agregarle headers de expiración con lo cual solo se cargarán la primera vez que accedemos a la pagina.

Esto lo podemos definir a través del fichero .htaccess. Para el caso de la expiración se puede utilizar ExpiresDefault, para ello tenemos las siguientes directivas de tiempo: years, months, weeks, days, hours, minutes, seconds.

Lo recomendables es colocar una expiración mínima de una semana en los ficheros menos modificados (jpg, png, gif, swf, js, css), entonces podríamos agregar el siguiente código:

ExpiresActive On
ExpiresDefault A0

# expiracion de 1 semana para archivos estaticos

ExpiresDefault "access plus 1 weeks"

La expiración también se puede expresar en segundos. El ejemplo anterior quedaría (7 dias = 60*60*24*7 = 604800):

ExpiresActive On
ExpiresDefault A0

# expiracion de 1 semana para archivos estaticos

ExpiresDefault A604800

Otra forma para agregar la expiración es por tipo de fichero utilizando la directiva ExpiresByType. Por ejemplo:

ExpiresActive On
ExpiresDefault A0

ExpiresByType image/gif A604800
ExpiresByType image/png A604800
ExpiresByType text/css A604800
ExpiresByType text/javascript A604800

Scripts javascript – Async – Increase speed with script async

Las solucionas Javascript para incorporar módulos de facebook, twitter, zoopim o resto de programas que necesitamos para que nuestros clientes nos vean de diversas formas por la web están muy bien pero hay que tener en cuenta que son programas que se ejecutan en otro servidor y que si no se lanzan de forma asíncrona, ralentizan nuestra web.

Por ello es recomendable, en la medida de lo posible y siempre y cuando no sea un código que intervenga en la ejecución de los programas, el poner este tipo de scripts que se ejecuten de forma asíncrona.

Busca todo aquel código que se ejecute como script y evalúa cuál puedes cambiar. Por ejemplo, los de los módulos que he comentado al inicio son fácilmente ejecutados de forma asíncrona y harán que todo vaya mejor.

Para ello en las líneas donde empiecen de la siguiente forma:

<script.....>

se podrán cambiar por:

<script async...>

y veremos rápidamente el rendimiento.

Este tipo de temas se nota en gran medida cuando los servidores donde se encuentran las páginas de estos módulos no van bien o están dando fallos porque parece que nuestra propia página da errores.  Por tanto, es super recomendable ponerlo de forma asíncrona siempre que podamos.