prestashop-multistore-form · git:20260604.8ae1905 · 2026-06-04 · sha256 b45aae6f46350b9b

prestashop-multistore-form git:20260604.8ae1905A

Immutable. This exact content never changes and is served at /api/v1/blob/b45aae6f46350b9b.

---
name: prestashop-multistore-form
description: Skill for creating multi-store compatible configuration forms in PrestaShop 8 and 9 using Symfony components.
---

# PrestaShop Multi-store Form Skill

This skill explains how to build configuration forms that correctly handle PrestaShop's Multi-store (Multishop) feature, allowing settings to be defined per shop, per group, or globally.

## 1. Technical Guide

### The Multi-store Data Configuration
Instead of `DataConfigurationInterface`, use `AbstractMultistoreConfiguration`.

```php
final class MyModuleMultistoreConfig extends AbstractMultistoreConfiguration
{
    public function getConfiguration(): array
    {
        $shopConstraint = $this->getShopConstraint();
        return [
            'my_setting' => $this->configuration->get('MY_SETTING_KEY', null, $shopConstraint),
        ];
    }

    public function updateConfiguration(array $config): array
    {
        $shopConstraint = $this->getShopConstraint();
        // This helper handles the "Use default value" checkboxes automatically
        $this->updateConfigurationValue('MY_SETTING_KEY', 'my_setting', $config, $shopConstraint);
        
        return [];
    }
}
```

### Form Type with Multi-store Headers
To display the "Multi-store configuration" header (the one with the checkboxes to override values), your form needs to be aware of it.

```php
final class MySettingType extends TranslatorAwareType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('my_setting', TextType::class, [
            'label' => $this->trans('Setting', 'Modules.Mymodule.Admin'),
            'multistore_configuration_key' => 'MY_SETTING_KEY', // Links to the multishop override system
        ]);
    }
}
```

## 2. Professional Development Guide

### Shop Constraint
The `ShopConstraint` object encapsulates the current context (Single Shop, Group of Shops, or All Shops). `AbstractMultistoreConfiguration` provides this via `$this->getShopConstraint()`.

### Service Registration
```yaml
services:
    my_module.multistore_config:
        class: MyModule\Form\MyModuleMultistoreConfig
        arguments:
            - '@prestashop.adapter.legacy.configuration'
            - '@prestashop.adapter.shop.context'
```

## 3. User Guide

### How to use
When Multi-store is enabled:
1. The user selects a shop from the header drop-down.
2. The form loads values specifically for that shop.
3. Checkboxes appear next to fields allowing the user to "Use default value" (inherited from Group or All Shops) or override it.

## Rules & Best Practices
- **Persistence**: Never use `Configuration::get()` without the $id_shop parameter if the setting is shop-dependent.
- **UI consistency**: Always use the built-in form types that support the `multistore_configuration_key` option.
- **Defaults**: Ensure you have sensible global defaults for when a shop hasn't overridden a value yet.