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 – Exportar productos de una categorí... En según que versiones de Magento, la exportación de productos es complicado. Sobretodo si lo que quieres hacer es exportaciones específicas. Una opci...
Magento – Cambiar stocks y cantidades en múl... Aquí os dejo el script que consigue cambiar de forma rápida los stocks de múltiples productos en Magento. Pero sobretodo: os recomiendo que primero ha...
Magento – Unir ficheros CSS en uno solo Veamos la excelente opción de Magento para unir en un solo ficheo CSS todos los ficheros que carga individualmente. Es una de las exigencias de la may...
Generación menú principal en Magento En ocasiones, debemos modificar el menú principal haciendo que las opciones o submenús se muestren de forma diferente. Para ello, debemos tener en cue...

Deja un comentario

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

*