🏪 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 usoSolucion multitienda
Tienda B2B y B2C separadas2 tiendas en mismo grupo
Tiendas por idioma/pais1 tienda por locale
Marca principal + outlet2 tiendas independientes
FranquiciasGrupo 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

PasoUbicacion en el BO
1. Activar la featureBO > Parametros de la tienda > General > Activar multitienda
2. Crear gruposBO > Parametros avanzados > Multitienda > Añadir grupo
3. Crear tiendasBO > Parametros avanzados > Multitienda > Añadir tienda
4. Configurar URLsBO > Multitienda > URL de la tienda
5. Asignar temasBO > Diseno > Temas (por tienda)
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.