Tamaño de imágenes personalizado en la tienda

 

Entre la muchas funcionalidades que ofrece la plataforma Tiendy una de ellas es la posibilidad de personalizar al 100% el aspecto de la tienda, poniéndo a disposición del desarrollador/diseñador todos los archivos HTML, CSS, Javascript, etc.

Hoy veremos que además del conjunto de tamaños estándar que ofrece, también podemos crear nuestros propios tamaños de imagen personalizados para que se adapten al máximo a nuestro diseño o para ofrecer distintas versiones según el dispositivo desde el que se accede.

Los tamaños estándar en Tiendy

Cuando se sube la imagen de un producto, el sistema la procesa y crea varias versiones de la imagen en los siguientes tamaños:

IdentificadorTamaño en pixels (ancho x alto)
icon 32x32
thumb 50x50
small 100x100
compact 160x160
medium 240x240
large 500x500
huge 600x600
1024x1024 1024x1024
orginal Tamaño original como máximo 4472x4472

 

Mostrar la imagen de un producto en la plantilla

Para mostrar la imagen de un producto en la plantilla, se usa el filtro "product_img_url" aplicado a la imagen deseada, indicando el tamaño (identificador) para la imagen.

Por ejemplo:

<img src="{{ product.featured_image|product_img_url('large') }} alt="producto fantástico" />

De esta forma, aparecería la imagen principal del producto en el tamaño 500x500 pixels (large).

Pero también podemos mostrarla en un tamaño no estándar y como veremos, además podremos especificar la calidad con la que se genera la imagen.

Para ello usamos también el mismo filtro (product_img_url), pero en vez de proporcionar un identifcador estándar proporcionamos el tamaño y calidad de la imagen deseada siguiente el patrón:

ANCHOxALTOxCALIDAD

El parámetro calidad será un número de 0 a 100, siendo 100 la máxima calidad.

Por ejemplo:

<img src="{{ product.featured_image|product_img_url('800x650x90') }} alt="producto fantástico" />

 Mostraría la imagen en tamaño 800 pixels de ancho por 650 pixels de alto con una calidad del 90% (relación calidad/compresión del formato JPEG).

Algo importante a tener en cuenta es que el sistema no deforma la imagen al cambiarla de tamaño sino que respeta sus proporciones originales por lo que puede que la imagen resultante no sea exactamente del tamaño que le hemos especificado.

Y por supuesto no debemos olvidarnos que a mayor tamaño y calidad, mayor peso del archivo final. Debemos intentar reducir ese peso siempre que sea posible, sobretodo cuando nos dirigimos a dispositivos móviles.

 

 

Dejar un comentario…


Twig avanzado

Javier Eguiluz ha realizado una excelente presentación sobre el uso avanzado de Twig. Como sabéis, nuestras plantillas usan Twig. Os recomendamos que les echéis un vistazo:

Gracias a Javier Eguiluz por su excelente trabajo.

Dejar un comentario…


Crear un formulario de contacto en tiendy

¿Te estás preguntando si se puede añadir un formulario a tu tiendy? Pues te respondemos rápido: :)

La siguiente pregunta es ¿cómo? Pues vamos a intentar explicarlo lo mejor posible.

Por regla general, no solemos incluir el formulario de contacto en las plantillas que ofrecemos por defecto. Esto lo hacemos por un motivo muy simple: el spam.
Pero como tiendy es flexible y nos permite modificar el código de nuestra web, el poder está en nuestras manos :)

Para empezar con este ejemplo, vamos a crear una página en nuestra tienda que se llame "Contacto":

 Crear una página de contacto en tiendy

 

En tiendy, cómo aparecen las páginas lo determina la plantilla "page.tpl" que podéis encontrar en el editor de plantilla. La abrimos, y en el sitio donde queramos mostrar nuestro formulario ponemos:

{% if 'contacto' == page.handle %}
  <!-- aquí el código del formulario -->
  <h2>Formulario de contacto</h2>
  {% form %}
  	{% if form.sent_successfully %}
  		<p><strong>Formulario enviado correctamente</strong></p>
  	{% elseif form %}
  		<p><strong>Ha ocurrido un error al intentar enviar el formulario. Por favor compruebe que ha rellenado correctamente los campos.</strong></p>
  	{% endif %}
  <table>
    <tr>
      <td><label for="nombre">Nombre:</label></td>
      <td><input type="text" name="nombre" /></td>
    </tr>
    <tr>
      <td><label for="nombre">Email:</label></td>
      <td><input type="text" name="email" /></td>
    </tr>
    <tr>
      <td><label for="mensaje">Mensaje:</label></td>
      <td><textarea name="mensaje" cols="40" rows="7"></textarea></td>
    </tr>
    <tr>
    	<td colspan="2">
    		<input type="submit" value="Enviar" />
    	</td>
    </tr>
  </table>
  {% endform %}
  <!-- fin código formulario -->
  {% endif %}

Vamos a ir desgranando un poco este código.

Para empezar, hemos metido todo el bloque dentro de una condicion if: "sólo mostraremos ese bloque, si el atributo handle de la página que estamos viendo ahora mismo, es 'contacto'". Esto hará que nuestro formulario sólo aparezca cuando entremos en la página de contacto que hemos creado y no en el resto de páginas que hayamos creado para nuestra tienda.

Tenemos una etiqueta que marca el inicio y el fin del formulario {% form %} y {% endform %}. Estas etiquetas se encargan de generar todo el código necesario para que el formulario pueda ser enviado por tiendy.

Cuando ya se ha enviado el formulario, tiendy pone a disposición de la plantilla el objeto "form". Este objeto tiene la propiedad "sent_successfully" que indica si el formulario se ha enviado correctamente o no. Este objeto además, contiene como propiedades a todas las variables que hemos enviado con el fomulario, por lo que en caso de error, podemos dejar esos valores en el formulario, evitando que el usuario tenga que volver a rellenarlos:

<input type="text" name="nombre" value="{{ form.nombre|escape }}" />

Además, en caso de haber errores, también nos indica qué campo ha fallado en la propiedad "errors":

<input type="text" name="nombre" value="{{ form.nombre|escape }}" {% if 'nombre' in form.errors %} class="error"{% endif %} />

De esta forma, podríamos aplicar un estilo diferente al input para mostrar al usuario dónde está el error de forma visual (por ejemplo poniéndole un borde rojo).

Y llegado a este punto, nos podemos preguntar ¿y cuándo falla un formulario de contacto? Buena pregunta :). Normalmente el envío de un email es un proceso sencillo que no suele fallar, pero como habíamos dicho al principio, tenemos el poder :)

Tiendy te ofrece la posibilidad de especificar qué campos del formulario son obligatorios y por lo tanto si el usuario no los rellena, el envío fallará. Para especificar estos campos, debemos crear un input de tipo hidden que se llame "mandatory_fields" con la lista de campos que queremos que sean obligatorios:

<input type="hidden" name="mandatory_fields" value="nombre,email,mensaje" />

De esta forma, cuando se envíe el formulario tiendy comprobará que los valores "nombre", "email" y "mensaje" no estén vacíos y en caso contrario, nos pondrá en la propiedad "errors" del objeto "form", la lista de campos que están vacíos. 

Y por si esto fuera poco, si el nombre de uno de los "mandatory_fields" es "email", tiendy también comprobará que se trata de un email válido.

Pero cuidado, los formularios de contacto tienen un peligro latente. Y es que en cuanto son descubiertos por los spammers, podemos sufrir y mucho. Solución: Stop spam, read books :) O dicho de otra forma, "Recaptcha".

Para añadir Recaptcha a nuestro formulario, sólo tenemos que añadir el siguiente código:

...
<tr>
    	<td colspan="2">
    		{% recaptcha %}
    	</td>
    </tr>
...

Esto hará que se muestre un widget Recaptcha y que el usuario que envíe el formulario deba rellenarlo correctamente para poder enviarlo.

La etiqueta {% recaptcha %} tiene dos parámetros que nos pueden ayudar si queremos personalizar su aspecto "lang" y "theme". Las opciones para "theme" son: red, white, blackglass y clean. Y para "lang": en, es, it, fr, de, etc.

{% recaptcha lang "es" theme "clean" %}

Y por hoy, lo dejamos aquí. Por supuesto, estamos encantados de responder a todos las dudas que os puedan surgir.

Dejar un comentario…


Productos relacionados

Ahora que se acerca la campaña de Navidad, aprovechamos para recomendaros el uso de la función de "Productos relacionados" que tiendy pone a vuestra disposición.

Se ha demostrado que añadir esta información en la ficha del producto y en el carrito de la compra puede ayudar a incrementar el número de compras y el volumen de éstas.

¿Cómo se implementa en vuestra plantilla?

Es muy simple. Por ejemplo, en el archivo product.tpl:

<h2>Clientes que compraron este producto también han comprado</h2>
<ul>
{% for r in product|related_products(4) %}
<li><a href="{{ r.url }}">{{ r.title }}</a></li>
{% endfor %}
</ul>

O en el archivo cart.tpl:

<h2>Clientes que compraron estos productos también compraron</h2>
<ul>
{% for r in cart|related_products(4) %}
<li><a href="{{ r.url }}">{{ r.title }}</a></li>
{% endfor %}
</ul>

Donde 4 es el número de productos que queréis mostrar (con un máximo de 10).

El filtro "related_products" aplicado a un producto o al carrito de la compra os dará una lista de elementos de tipo "product". Podéis tomar de esa lista los elementos que necesitéis para realizar un diseño adecuado para vuestra tienda. Podéis ver un ejemplo de implementación en la web de Santa Elena Ibéricos:

Por supuesto, nos tenéis como siempre a vuestra disposición para resolver todas las dudas que se os plantéen o trasladarnos vuestras sugerencias.

Dejar un comentario…


Elegimos Twig

Una de las ideas base del proyecto tiendy, es la de dar completa libertad al desarrollador / diseñador para adaptar completamente el diseño de la tienda a sus necesidades e imagen corporativa. Para conseguir esto, la forma más sencilla fue la de optar por un lenguaje de plantillas, de forma que diéramos el máximo control sobre qué, cómo y dónde aparece un dato en cada sitio web.

Nuestra primera elección, basándonos sobretodo en que es bastante madura y muy conocida por la comunidad PHP, fue Smarty.

Pero justo por esas fechas, apareció una nueva opción desarrollada por el creador del Framework Symfony llamada Twig que prometía mayor velocidad de ejecución y una gran sencillez en la sintaxis. Así que la probamos y el resultado fue, que nos quedamos ella :)

Para que os hagais una idea, así es como había que recorrer una lista de enlaces con Smarty en tiendy:

<ul>
{foreach from=$linklists.menu_principal.links item=link key=i}
<li><a href="{$link.url}">{$link.title}</a></li>
{/foreach}
</ul>

y así es como se recorre con Twig:

<ul>
{% for link in linklists.menu_principal.links %}
<li><a href="{{ link.url }}">{{ link.title }}</a></li>
{% endfor %}
</ul>

Como podéis ver la sintaxis es parecida, pero mucho más simple y elegante en el caso de Twig.

Podéis conocer más sobre cómo modificar plantillas de Twig en su página de documentación.

Dejar un comentario…