En el tutorial de hoy, veremos cómo agregar nuevos campos a la dirección del cliente en Prestashop.
¡ACTUALIZAR! Si prefieres una solución simple, creé un módulo que automatiza el proceso y hace mucho más, búscalo aquí
Descargar archivos de proyecto
  • Versión utilizada: Prestashop 1.6 (compatible con Prestashop 1.5)

Plan de acción

Para agregar un nuevo campo al formulario de registro de dirección, agregaremos un par de anulaciones, además de crear un nuevo campo de base de datos y modificar el archivo de plantilla de dirección. Si no está familiarizado con las anulaciones de Prestashop, consulte mi artículo sobre cómo extender los objetos de Prestashop (aunque tendremos que usar una técnica ligeramente diferente).

La clase de dirección y la tabla de la base de datos

Lo primero es lo primero, necesitamos algo con qué jugar. Queremos que el cliente pueda completar un campo que no existe actualmente, por lo tanto, inicie sesión en la base de datos, acceda a la tabla ps_address y cree un nuevo campo: my_custom_field . Lo convertí en un campo VARCHAR largo de 64.
A continuación, necesitamos decirle al objeto de dirección (clase) que tiene un nuevo campo con el que lidiar. Cree un nuevo archivo dentro de override / classes / y llámelo Address.php . Agregue las siguientes etiquetas php internas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dieciséis
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Address extends AddressCore
{
 
    public $my_custom_field;
 
 
    public static $definition = array(
        'table' => 'address',
        'primary' => 'id_address',
        'fields' => array(
            'id_customer' =>         array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false),
            'id_manufacturer' =>        array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false),
            'id_supplier' =>         array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false),
            'id_warehouse' =>        array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false),
            'id_country' =>      array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true),
            'id_state' =>            array('type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId'),
            'alias' =>               array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 32),
            'company' =>             array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 64),
            'lastname' =>            array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32),
            'firstname' =>           array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32),
            'vat_number' =>          array('type' => self::TYPE_STRING, 'validate' => 'isGenericName'),
            'address1' =>            array('type' => self::TYPE_STRING, 'validate' => 'isAddress', 'required' => true, 'size' => 128),
            'address2' =>            array('type' => self::TYPE_STRING, 'validate' => 'isAddress', 'size' => 128),
            'postcode' =>            array('type' => self::TYPE_STRING, 'validate' => 'isPostCode', 'size' => 12),
            'city' =>                array('type' => self::TYPE_STRING, 'validate' => 'isCityName', 'required' => true, 'size' => 64),
            'other' =>               array('type' => self::TYPE_STRING, 'validate' => 'isMessage', 'size' => 300),
            'phone' =>               array('type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber', 'size' => 32),
            'phone_mobile' =>        array('type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber', 'size' => 32),
            'dni' =>                 array('type' => self::TYPE_STRING, 'validate' => 'isDniLite', 'size' => 16),
            'deleted' =>             array('type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false),
            'date_add' =>            array('type' => self::TYPE_DATE, 'validate' => 'isDateFormat', 'copy_post' => false),
            'date_upd' =>            array('type' => self::TYPE_DATE, 'validate' => 'isDateFormat', 'copy_post' => false),
            'my_custom_field' =>     array('type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 64),
 
        ),
    );
}