Magento: cambiar entre las múltiples vistas de tiendas

En varios casos creamos en una misma instalación de Magento varias vistas de la tienda. esto nos servirá para tener ‘varias tiendas’ en el mismo Magento. Un ejemplo que es muy utilizado es la creación de varias vistas, cada una de ellas mostrando un precio diferente de los productos. Otro ejemplo sería la traducción a varios idiomas de la tienda: para cada idioma una vista de tienda nueva.

Aquí podéis ver cómo crear las diferentes vistas de tienda:
Artículo en Template Monster

Sigamos con el ejemplo de los precios. Supongamos que tenemos dos vistas creadas: zona1 y zona2. Cada una de ellas mostrará un precio diferente según la zona escogida (por ejemplo por código postal).

1. Creamos las vistas (zona1 y zona2) siguiendo el artículo anterior

2. Asignamos a cada producto el precio que le corresponde a su tienda
2.1 Para ello vamos a editar el producto y en la parte superior izquierdo veremos que podemos escoger las vistas que hemos creado.
2.2 Escogemos la zona1 , vamos al precio del producto y le ponemos el precio que queremos, ejemplo 10
2.3 Escogemos la zona2 , vamos al precio del producto y le ponemos el precio que queremos, ejemplo 20

Vale, ya tenemos las dos vistas y los productos con los precios según la vista (zonas en este caso).

Ahora viene lo importante y lo que seguro que estás buscando:

¿En la tienda Magento, el usuario como cambia entre las múltiples vistas?

Según el código postal que inserte el usuario, le mostraremos una zona u otra. Para ellos trabajaremos con cookies para saber en todo momento en que zona estamos.

Código a añadir en el footer.phtml de nuestra plantilla

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
// Si no existe cookie de zona, se crea amb dades inicials
if (!isset($_COOKIE['TiendaZona'])) {
    // Si cookie no está creada, la creamos asignando la tienda base
    setcookie("TiendaZona", 'base', time()+7200);
    ?>
    <!-- Modal -->
    <div id="cpModal" class="modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
            <form id="cpform" action="http://www.mitienda.com" method="POST">
                <div class="modal-header">
                  <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                  <h4 class="modal-title" id="myModalLabel">C&oacute;digo postal</h4>
                </div>
                <div class="modal-body">
                    <label for="cp">C&oacute;digo postal</label>
                    <input type="text" id="cp" name="cp" />
                    <input type="hidden" id="zona" name="zona" />
                </div>
                <div class="modal-footer">
                    <button id="cpbutton" type="button" class="btn btn-primary">Enviar</button>
                </div>
            </form>
        </div>
      </div>
    </div>
    <script type="text/javascript">
        // Mostramos la ventana modal para pedir Código postal
        jQuery("#cpModal").modal('show');
 
        // Tratamos el envío del formulario segun el código postal, modificamos el contenido de la cookie
        jQuery("#cpbutton").click(function() {
                if ( jQuery("#cp").val()==="08080" ){
                    // document.cookie= "CestasMartiZona=zona1";
                    valor= 'zona1';
                } else {
                    // document.cookie= "CestasMartiZona=base";
                    valor= 'base';
                }
                Mage.Cookies.set('CestasMartiZona',valor);
                jQuery("#cpform").submit();
        });
    </script>
    <?php
}
?>

Este código, si no existe la cookie donde almacenamos la tienda en la que estamos (zona), la creamos con la tienda base por defecto. Además, de no existir, muestra el formulario que pide el código postal. Cuando se envía el formulario, se actualiza el contenido de la cookie después de tratar el valor añadido.

Ya está? eso es todo? Ni mucho menos.

index.php de Magento

Vale, ahora tenemos una cookie que nos indica con que tienda trabajar. Ahora trabajemos el index.php para indicar, según la cookie, que tienda mostrar

index.php de Magento

Al final del fichero encontraremos el código:

1
2
3
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';
Mage::run($mageRunCode, $mageRunType);

Hay que modificarlo por:

1
2
3
4
5
6
7
8
9
10
11
12
if (isset($_COOKIE['TiendaZona'])) {
    if ($_COOKIE['TiendaZona'] == 'base') {
        $mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
        // Si existeix
    } else {
        $mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : $_COOKIE['TiendaZona'];
    }
} else {
    $mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';
}
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';
Mage::run($mageRunCode, $mageRunType);

Este nuevo código trata el contenido de la cookie y actúa en consecuencia.

Resumiendo: en el footer.phtml de la plantillar creamos cookie y tratamos el formulario. En el index.php de la raíz de Magento tratamos el contenido de la cookie para mostrar la tienda que queramos.

Atención: todo el trabajo de crear cookies debe hacerse fuera del index.php. Sino, dará error. No puede haber ninguna salida antes de crear las cookies.

Ahí queda el artículo sobre Magento. Supongo que de aquí unos meses o años cuando lo vuelva a leer, pensaré que cómo me atreví…

Artículos relacionados

Magento – Limpiar Base de datos Qué tablas podemos vaciar sin que esto afecte a nuestro Magento? Principalmente todas las que trabajan con los logs y algunos índices. Como siempre, t...
Magento – Añadir campo al registro del clien... Os detallo cómo añadir un nuevo campo en el formulario de registro de un usuario en Magento. Vaya por delante que no es tarea sencilla. Intentaré ir p...
Magento – Reindexar desde consola (remotamen... Como sabéis, Magento al añadir productos, categorías... necesita reindexar la base de datos. Para ello, desde el panel de administración podemos ir a ...
Magento – Cambiar los sku de los productos p... Por diferentes motivos, nos puede interesar el SKU de productos dentro de nuestro Magento. Cuando solo es un par de ellos, no hay problem, pero cuando...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*