⚙️ Configuration multitienda — por tienda y por grupo
Actualizado: 2024-12-01
La API Configuration de PrestaShop soporta multitienda de forma nativa. Puedes guardar valores diferentes para cada tienda y leer el valor de la tienda activa con la misma llamada Configuration::get(). Los valores se heredan del nivel superior si no se han sobreescrito.
#Configuration::get() en multitienda
Leer configuracion con soporte multitienda
php
<?php
// Lee el valor del contexto actual (tienda activa)
// Si la tienda no tiene valor propio, hereda del grupo/global
$value = Configuration::get('MY_MODULE_KEY');
// Leer valor de una tienda especifica
$value = Configuration::get(
'MY_MODULE_KEY',
null, // id_lang (null = sin idioma)
null, // id_shop_group (null = ignorar)
5 // id_shop = 5
);
// Leer valor de un grupo de tiendas
$value = Configuration::get(
'MY_MODULE_KEY',
null,
2, // id_shop_group = 2
null
);
// Con valor por defecto
$value = Configuration::get('MY_MODULE_KEY') ?: 'valor_default';
// Obtener todos los valores por tienda (array id_shop => valor)
$allValues = Configuration::getMultiShopValues('MY_MODULE_KEY');
#Configuration::updateValue() por tienda
Guardar configuracion para una tienda especifica
php
<?php
// Guardar globalmente (para todas las tiendas / herencia)
Configuration::updateValue('MY_MODULE_KEY', 'valor_global');
// Guardar para una tienda especifica
Configuration::updateValue(
'MY_MODULE_KEY',
'valor_tienda_1',
false, // html (false = sin HTML)
null, // id_shop_group
1 // id_shop = 1
);
// Guardar para un grupo de tiendas
Configuration::updateValue(
'MY_MODULE_KEY',
'valor_grupo_2',
false,
2, // id_shop_group = 2
null
);
// Guardar para todas las tiendas activas
foreach (Shop::getShops(true) as $shop) {
Configuration::updateValue(
'MY_MODULE_KEY',
'valor_' . $shop['id_shop'],
false, null,
(int) $shop['id_shop']
);
}
#Herencia de valores entre contextos
| Nivel donde se guarda | Quien lo hereda |
|---|---|
| Global (sin id_shop, sin id_group) | Todas las tiendas que no tienen valor propio |
| Grupo (id_shop_group) | Tiendas del grupo que no tienen valor propio |
| Tienda (id_shop) | Solo esa tienda (maxima especificidad) |
#Patron: guardar para el contexto actual
Guardar configuracion segun el contexto activo del BO
php
<?php
/**
* Guardar configuracion respetando el contexto multitienda activo.
* Llamar en postProcess() o processConfigForm().
*/
private function saveConfiguration(string $key, $value): void
{
if (!Shop::isFeatureActive()) {
// Tienda simple — guardar globalmente
Configuration::updateValue($key, $value);
return;
}
$context = Shop::getContext();
if ($context === Shop::CONTEXT_ALL) {
// Modo 'Todas las tiendas' — guardar globalmente
Configuration::updateValue($key, $value);
} elseif ($context === Shop::CONTEXT_GROUP) {
// Por grupo
Configuration::updateValue($key, $value, false, Shop::getContextShopGroupID(), null);
} elseif ($context === Shop::CONTEXT_SHOP) {
// Por tienda especifica
Configuration::updateValue($key, $value, false, null, Shop::getContextShopID());
}
}
#ObjectModel con campos multitienda
Definir un ObjectModel con soporte multitienda
php
<?php
class MyModuleItem extends ObjectModel
{
public $id_shop;
public $name;
public $active;
public static $definition = [
'table' => 'mymodule_item',
'primary' => 'id_mymodule_item',
'multishop' => true, // Activa el soporte multitienda
'fields' => [
'id_shop' => ['type' => self::TYPE_INT],
'name' => [
'type' => self::TYPE_STRING,
'required' => true,
'size' => 255,
],
'active' => ['type' => self::TYPE_BOOL],
],
// Campos que se almacenan separados por tienda (en tabla _shop)
'multilang_shop' => false,
];
}
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.