🏪 Multitienda en PrestaShop — introduccion
Actualizado: 2024-12-01
La multitienda de PrestaShop permite gestionar varias tiendas independientes (o semidependientes) desde una unica instalacion. Cada tienda puede tener su propio catalogo, tema, configuracion de precios, idiomas y metodos de pago.
#Que es la multitienda
| Caso de uso | Solucion multitienda |
|---|---|
| Tienda B2B y B2C separadas | 2 tiendas en mismo grupo |
| Tiendas por idioma/pais | 1 tienda por locale |
| Marca principal + outlet | 2 tiendas independientes |
| Franquicias | Grupo de tiendas compartiendo catalogo |
| Tienda de pruebas (staging) | Tienda oculta en mismo servidor |
#Estructura: tiendas y grupos
Jerarquia de la multitienda
bash
All Shops (contexto global)
├── Grupo A (compartir stock, clientes, pedidos)
│ ├── Tienda A1 (es.mitienda.com)
│ └── Tienda A2 (en.mitienda.com)
└── Grupo B (independiente)
└── Tienda B1 (outlet.mitienda.com)
# Cada nivel puede tener su propia configuracion
# Los datos se heredan de arriba hacia abajo
# Una tienda puede sobreescribir la config del grupo
#Los tres contextos
Detectar el contexto multitienda activo
php
<?php
// Verificar si la multitienda esta activada
if (!Shop::isFeatureActive()) {
// Instalacion de tienda unica — contexto simplificado
return;
}
// Los tres contextos posibles:
$context = Shop::getContext();
switch ($context) {
case Shop::CONTEXT_ALL:
// El admin esta en modo 'Todas las tiendas'
// Las modificaciones afectan a todas
break;
case Shop::CONTEXT_GROUP:
// El admin esta en un grupo de tiendas
$idGroup = Shop::getContextShopGroupID();
break;
case Shop::CONTEXT_SHOP:
// El admin esta en una tienda especifica
$idShop = Shop::getContextShopID();
break;
}
// Obtener IDs de tiendas del contexto actual
$shopIds = Shop::getContextListShopID();
#Impacto en modulos y queries
Como afecta la multitienda a las queries de los modulos
php
<?php
// ── CONFIGURATION (ya maneja multitienda) ──
// Leer config de la tienda activa
$value = Configuration::get('MY_KEY'); // automatico
// Leer config de tienda especifica
$value = Configuration::get('MY_KEY', null, null, $idShop);
// Guardar en tienda especifica
Configuration::updateValue('MY_KEY', $value, false, null, $idShop);
// ── QUERIES PROPIAS (debes manejar manualmente) ──
// Si tu tabla tiene id_shop:
$idShop = (int) Context::getContext()->shop->id;
$rows = Db::getInstance()->executeS(
'SELECT * FROM `' . _DB_PREFIX_ . 'mymodule_data`
WHERE `id_shop` = ' . $idShop
);
// Para consultas globales (todos los shops):
$rows = Db::getInstance()->executeS(
'SELECT * FROM `' . _DB_PREFIX_ . 'mymodule_data`'
// sin filtro id_shop
);
#Activar multitienda
| Paso | Ubicacion en el BO |
|---|---|
| 1. Activar la feature | BO > Parametros de la tienda > General > Activar multitienda |
| 2. Crear grupos | BO > Parametros avanzados > Multitienda > Añadir grupo |
| 3. Crear tiendas | BO > Parametros avanzados > Multitienda > Añadir tienda |
| 4. Configurar URLs | BO > Multitienda > URL de la tienda |
| 5. Asignar temas | BO > Diseno > Temas (por tienda) |
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.