Magento Configurar multiples stores y multiples websites.

Una de las caracteristicas de Magento es la capacidad de tener varias instacias de tienda dentro de una única instalación. En magento tenemos la estructura Website-Store-View.
Website- Es el nivel mas alto de definicion y es el padre de diferentes tiendas.
Store- Es el nivel de tienda, es hijo de un website , a este nivel se pueden gestionar las categorías y los productos. La tienda tiene que ir asociada a una categoría Root.Esto puede ser usado para tener diferentes estructuras de catalogo asociado a diferentes tiendas.
View-Un Store tiene que tener una View asociada, es la parte del frontend asociada a dicha tienda.Lo normal en Magento es utilizar las vistas para los diferentes idiomas.

El bootstrap de Magento es cargado desde el archivo index.php con la siguiente instrucción:
Mage::run($mageRunCode, $mageRunType);

El primer parámetro $mageRunCode es el código que indica si lo que vamos a cargar va a ser un Store o un website
El segundo parámetro es el código identificativo del store o website que deseamos cargar.

Desde la versión 1.4.x el equipo de desarrollo de Magento introdujo en el archivo index.php los siguiente parámetros que sirven de real utilizad.

/* Store or website code */
$mageRunCode = isset($_SERVER[‘MAGE_RUN_CODE’]) ? $_SERVER[‘MAGE_RUN_CODE’] : ”;

/* Run store or run website */
$mageRunType = isset($_SERVER[‘MAGE_RUN_TYPE’]) ? $_SERVER[‘MAGE_RUN_TYPE’] : ‘store’;

Estos parémetros pueden ser pasados mediante .htaccess o mediante la definición del website.
Estos parámetros serán pasado de la siguiente manera:
1)mediante el .htaccess:

  1. SetEnvIf Host .*tuhost.* MAGE_RUN_CODE="base";
  2. SetEnvIf Host .*tuhost.* MAGE_RUN_TYPE="website";

Entonces si accedieras a tu Magento con la url www.tuhost.com cargariamos el website que tenga el código base.
2)mediante la definición del virtual host:

  1. SetEnv MAGE_RUN_CODE "base" # código de tu website o store
  2. SetEnv MAGE_RUN_TYPE "website" # tipo (website o store)

Un ejemplo de definición del website sería el siguiente:

  1. DocumentRoot "C:\Program Files\Zend\Apache2/htdocs/local.prueba.com"
  2. ServerName local.prueba.com
  3. DirectoryIndex index.html index.php index.htm
  4. SetEnv MAGE_RUN_CODE "prueba" # código de tu website o store
  5. SetEnv MAGE_RUN_TYPE "website" # tipo (website o store)
  6. <Directory "C:\Program Files\Zend\Apache2/htdocs/local.prueba.com">
  7. AllowOverride All
  8. Options All
  9. Order allow,deny

Dependiendo del acceso que tengas a tu máquina implementarias una solución u otra, si tienes contratado un hosting que es compartido con diversas personas lo normal es que no tengas acceso a la definición del virtual host, con lo cual deberías hacerlo mediante el .htaccess.

Extaminando el archivo index.php podemos ver otra variable interesante de nombrar, esta la podremos ver en

  1. #Varien_Profiler::enable();
  2. if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) {
  3. Mage::setIsDeveloperMode(true);
  4. }
  5. #ini_set('display_errors', 1);

Esta variable nos sirve para poner Magento en Developer mode, es muy interesante para procesos de desarrollo.
Quizas sea un fallo, pero creo que el if anterior tiene mas lógica de la siguiente forma:

  1. if (isset($_SERVER['MAGE_IS_DEVELOPER_MODE'])) {
  2. Varien_Profiler::enable();
  3. Mage::setIsDeveloperMode(true);
  4. ini_set('display_errors', 1);
  5. }

Toda esta configuración tiene que ir acomplañada a la correspondiende configuración dentro del backend de Magento.
Espero que te haya servido de ayuda esta entrada.