📝 HelperForm — formularios legacy en el Admin

Actualizado: 2024-12-01

HelperForm es el sistema legacy de PrestaShop para crear formularios en el Back Office. Aunque PrestaShop 8+ promueve el uso de Symfony Forms, HelperForm sigue siendo valido y funcional, especialmente para modulos que necesitan compatibilidad con PS 1.7.

#Estructura basica de HelperForm

Estructura minima de un HelperForm
php
<?php

// En getContent() o en un AdminController
private function renderForm(): string
{
    $helper = new HelperForm();

    // Configuracion del helper
    $helper->table             = $this->name;
    $helper->name_controller   = $this->name;
    $helper->token             = Tools::getAdminTokenLite('AdminModules');
    $helper->currentIndex      = AdminController::$currentIndex . '&configure=' . $this->name;
    $helper->submit_action     = 'submit' . $this->name;
    $helper->default_form_language = $this->context->language->id;

    // Pre-rellenar campos con valores guardados
    $helper->fields_value = [
        'MY_MODULE_API_KEY'  => Configuration::get('MY_MODULE_API_KEY', ''),
        'MY_MODULE_ACTIVE'   => Configuration::get('MY_MODULE_ACTIVE', false),
        'MY_MODULE_MODE'     => Configuration::get('MY_MODULE_MODE', 'sandbox'),
    ];

    return $helper->generateForm([$this->getFormFields()]);
}

private function getFormFields(): array
{
    return [
        'form' => [
            'legend' => [
                'title' => $this->l('Configuracion del modulo'),
                'icon'  => 'icon-cogs',
            ],
            'input'  => [
                [
                    'type'     => 'text',
                    'label'    => $this->l('API Key'),
                    'name'     => 'MY_MODULE_API_KEY',
                    'required' => true,
                    'desc'     => $this->l('Clave de API proporcionada por el proveedor'),
                ],
                [
                    'type'   => 'switch',
                    'label'  => $this->l('Activar modulo'),
                    'name'   => 'MY_MODULE_ACTIVE',
                    'values' => [
                        ['id' => 'active_on',  'value' => 1, 'label' => $this->l('Si')],
                        ['id' => 'active_off', 'value' => 0, 'label' => $this->l('No')],
                    ],
                ],
                [
                    'type'    => 'select',
                    'label'   => $this->l('Modo'),
                    'name'    => 'MY_MODULE_MODE',
                    'options' => [
                        'query' => [
                            ['id' => 'sandbox',    'name' => $this->l('Pruebas (Sandbox)')],
                            ['id' => 'production', 'name' => $this->l('Produccion')],
                        ],
                        'id'   => 'id',
                        'name' => 'name',
                    ],
                ],
            ],
            'submit' => [
                'title' => $this->l('Guardar'),
                'class' => 'btn btn-default pull-right',
            ],
        ],
    ];
}

#Tipos de campo disponibles

TipoDescripcionOpciones especiales
textCampo de texto simplerequired, desc, suffix, prefix
textareaArea de texto multilinearows, cols, autoload_rte (TinyMCE)
switchToggle on/offvalues: array con id/value/label
selectLista desplegableoptions.query, options.id, options.name
checkboxCasilla de verificacionvalues: array de opciones
radioBotones de radiovalues: array de opciones
colorSelector de color (colorpicker)-
fileSubida de archivodisplay_image para imagenes
passwordCampo password (oculto)-
hiddenCampo oculto-

#Guardar con Configuration

Procesar y guardar el formulario en getContent()
php
<?php

public function getContent(): string
{
    $output = '';

    // Procesar submit
    if (Tools::isSubmit('submit' . $this->name)) {
        $apiKey = Tools::getValue('MY_MODULE_API_KEY');
        $active = (int) Tools::getValue('MY_MODULE_ACTIVE');
        $mode   = Tools::getValue('MY_MODULE_MODE');

        // Validacion
        if (empty($apiKey)) {
            $output .= $this->displayError($this->l('La API Key no puede estar vacia.'));
        } else {
            // Guardar en Configuration
            Configuration::updateValue('MY_MODULE_API_KEY', $apiKey);
            Configuration::updateValue('MY_MODULE_ACTIVE', $active);
            Configuration::updateValue('MY_MODULE_MODE', $mode);

            $output .= $this->displayConfirmation($this->l('Configuracion guardada correctamente.'));
        }
    }

    return $output . $this->renderForm();
}

#Diferencias con Symfony Form

AspectoHelperForm (legacy)Symfony Form (moderno)
CompatibilidadPS 1.5 - PS 9PS 1.7.6+ (PS 8 recomendado)
ComplejidadSimple, directoMas estructurado, mas codigo
ValidacionManual con Tools::getValueAutomatica con Constraints
UIBootstrap PS legacyIdentica al core de PS 8
CSRFToken manualAutomatico
Recomendado paraModulos PS 1.7 compatiblesModulos PS 8+ exclusivos
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.