---
title: "Context en multitienda — Shop::getContext()"
section: multistore
slug: context
description: "Como manejar el contexto de tienda en PrestaShop multitienda: Shop::getContext(), Shop::getContextShopID(), filtrar queries por tienda y checkboxes del BO."
keywords: prestashop multitienda contexto Shop getContext getContextShopID filtrar queries modulo
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/multistore/context"
---

# Context en multitienda — Shop::getContext()

> Como manejar el contexto de tienda en PrestaShop multitienda: Shop::getContext(), Shop::getContextShopID(), filtrar queries por tienda y checkboxes del BO.

Cuando la multitienda esta activa, el administrador puede estar trabajando en el contexto 'Todas las tiendas', en un grupo o en una tienda especifica. Los modulos deben detectar este contexto para guardar y mostrar los datos correctos.

## Shop::getContext() — los tres estados

*Detectar y manejar los tres contextos multitienda*

```php
<?php

// Solo relevante si la multitienda esta activa
if (!Shop::isFeatureActive()) {
    $idShop = (int) Context::getContext()->shop->id;
    // Instalacion simple — usar id_shop directamente
    return;
}

$shopContext = Shop::getContext();

if ($shopContext === Shop::CONTEXT_SHOP) {
    // ── TIENDA ESPECIFICA ──
    $idShop = Shop::getContextShopID();
    // Mostrar/guardar datos solo para esta tienda

} elseif ($shopContext === Shop::CONTEXT_GROUP) {
    // ── GRUPO DE TIENDAS ──
    $idGroup = Shop::getContextShopGroupID();
    $shops   = Shop::getShops(true, $idGroup);  // todas las tiendas del grupo
    // Mostrar/guardar datos para todas las tiendas del grupo

} elseif ($shopContext === Shop::CONTEXT_ALL) {
    // ── TODAS LAS TIENDAS ──
    $shops = Shop::getShops(true);  // todas las tiendas activas
    // Mostrar/guardar datos para TODAS las tiendas
}
```

## Obtener IDs de tiendas del contexto

*Metodos para obtener los IDs del contexto actual*

```php
<?php

// ID de la tienda actual (solo en CONTEXT_SHOP)
$idShop  = Shop::getContextShopID();

// ID del grupo actual (en CONTEXT_GROUP o CONTEXT_SHOP)
$idGroup = Shop::getContextShopGroupID();

// Lista de IDs de todas las tiendas del contexto actual
$shopIds = Shop::getContextListShopID();
// En CONTEXT_SHOP:  [3]
// En CONTEXT_GROUP: [2, 3, 4]
// En CONTEXT_ALL:   [1, 2, 3, 4, 5]

// Todas las tiendas activas (independiente del contexto)
$allShops = Shop::getShops(true);  // array de arrays con datos de cada tienda

// Ejemplo: guardar configuracion para todas las tiendas del contexto
foreach (Shop::getContextListShopID() as $shopId) {
    Configuration::updateValue('MY_KEY', $value, false, null, (int) $shopId);
}
```

## Filtrar queries por tienda

*Añadir filtro de tienda en queries SQL propias*

```php
<?php

/**
 * Para tablas propias con id_shop, el filtrado es manual.
 * Usar Shop::addSqlAssociation() para tablas del core que usan
 * el sistema de asociacion de tiendas.
 */

// ── QUERY SIMPLE CON FILTRO DE TIENDA ──
if (Shop::isFeatureActive() && Shop::getContext() === Shop::CONTEXT_SHOP) {
    $shopFilter = ' AND id_shop = ' . Shop::getContextShopID();
} else {
    $shopFilter = '';  // Mostrar de todas las tiendas
}

$items = Db::getInstance()->executeS(
    'SELECT * FROM `' . _DB_PREFIX_ . 'mymodule_items`
     WHERE active = 1' . $shopFilter
);

// ── PARA OBJETOS ObjectModel con id_shop ──
// Si tu ObjectModel tiene id_shop en su definicion,
// PrestaShop maneja el filtrado automaticamente si activas:
// 'multishop_fields' => ['id_shop' => []]
// en el array $definition['fields']
```

## Checkboxes de multitienda en el BO

*Mostrar checkboxes de aplicar-a-tiendas en HelperForm*

```php
<?php

// En HelperForm, activar los checkboxes de multitienda:
$helper = new HelperForm();
// ...

// Para que aparezcan los checkboxes de 'Aplicar a todas las tiendas'
// en los campos, añadir en cada campo:
$fields_form = [[
    'form' => [
        'input' => [
            [
                'type'    => 'text',
                'name'    => 'MY_KEY',
                'label'   => 'Mi ajuste',
                // Este flag activa el checkbox de multitienda para este campo
                'multistore_override' => ['MY_KEY'],  // claves de Configuration
            ],
        ],
    ],
]];

// En getContent(): leer el checkbox de aplicar a todas las tiendas
if (Tools::isSubmit('submitMymodule')) {
    $value  = Tools::getValue('MY_KEY');
    $applyAll = (bool) Tools::getValue('multishop_override_MY_KEY');

    if ($applyAll) {
        // Guardar para todas las tiendas
        foreach (Shop::getShops(true) as $shop) {
            Configuration::updateValue('MY_KEY', $value, false, null, (int) $shop['id_shop']);
        }
    } else {
        // Solo la tienda activa
        Configuration::updateValue('MY_KEY', $value);
    }
}
```


---

*Fuente: [https://ayudaprestashop.es/multistore/context](https://ayudaprestashop.es/multistore/context). Version Markdown generada automaticamente para consumo por LLMs.*
