Lionel_JDN Posted March 3, 2023 Share Posted March 3, 2023 Bonjour la communauté Presta ! 🙂 Je vous contacte car après des heures à éplucher le web je ne parviens pas à ajouter un champ dans la page Clients > Adresses du back-office. Mon besoin est d'ajouter un champ "Type" qui permettrait de savoir pour une adresse s'il s'agit d'une adresse de livraison ou d'une adresse de facturation. Le champ "type" integer est créé dans la table "ps_address" : valeur 1 pour livraison et valeur 2 pour facturation. Sur le front, je parviens bien à récupérer le champ "type" dans les adresses du client : J'ai suivi ce tuto pour la partie back-office : https://nemops.com/new-customer-address-fields-prestashop/#.ZAHyCh-ZND9 J'ai déclaré le champ dans Address.php et AdminAddressesController.php mais cela n'est pas pris en compte. Le champ ne s'ajoute pas sur le back-office et je n'ai aucune erreur en mode debug. Address.php class Address extends AddressCore { public $type; public static $definition = [ 'table' => 'address', 'primary' => 'id_address', 'fields' => [ 'id_customer' => ['type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false], 'id_manufacturer' => ['type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false], 'id_supplier' => ['type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false], 'id_warehouse' => ['type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId', 'copy_post' => false], 'id_country' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true], 'id_state' => ['type' => self::TYPE_INT, 'validate' => 'isNullOrUnsignedId'], 'alias' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'required' => true, 'size' => 32], 'company' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName', 'size' => 255], 'lastname' => ['type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 255], 'firstname' => ['type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 255], 'vat_number' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName'], 'address1' => ['type' => self::TYPE_STRING, 'validate' => 'isAddress', 'required' => true, 'size' => 128], 'address2' => ['type' => self::TYPE_STRING, 'validate' => 'isAddress', 'size' => 128], 'postcode' => ['type' => self::TYPE_STRING, 'validate' => 'isPostCode', 'size' => 12], 'city' => ['type' => self::TYPE_STRING, 'validate' => 'isCityName', 'required' => true, 'size' => 64], 'other' => ['type' => self::TYPE_STRING, 'validate' => 'isMessage', 'size' => 300], 'phone' => ['type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber', 'size' => 32], 'phone_mobile' => ['type' => self::TYPE_STRING, 'validate' => 'isPhoneNumber', 'size' => 32], 'dni' => ['type' => self::TYPE_STRING, 'validate' => 'isDniLite', 'size' => 16], 'deleted' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false], 'date_add' => ['type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false], 'date_upd' => ['type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false], 'type' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true], ], ]; } AdminAddressesController.php class AdminAddressesControllerCore extends AdminAddressesControllerCore { public function renderForm() { $this->fields_form = array( 'legend' => array( 'title' => $this->l('Addresses'), 'icon' => 'icon-envelope-alt' ), 'input' => array( array( 'type' => 'text_customer', 'label' => $this->l('Customer'), 'name' => 'id_customer', 'required' => false, ), array( 'type' => 'text', 'label' => $this->l('Identification Number'), 'name' => 'dni', 'required' => false, 'col' => '4', 'hint' => $this->l('DNI / NIF / NIE') ), array( 'type' => 'text', 'label' => $this->l('Type'), 'name' => 'type', 'required' => true, 'col' => '4', 'hint' => $this->l('Livraison / Facturation') ), array( 'type' => 'text', 'label' => $this->l('Address alias'), 'name' => 'alias', 'required' => true, 'col' => '4', 'hint' => $this->l('Invalid characters:').' <>;=#{}' ), array( 'type' => 'text', 'label' => $this->l('Home phone'), 'name' => 'phone', 'required' => false, 'col' => '4', 'hint' => Configuration::get('PS_ONE_PHONE_AT_LEAST') ? sprintf($this->l('You must register at least one phone number.')) : '' ), array( 'type' => 'text', 'label' => $this->l('Mobile phone'), 'name' => 'phone_mobile', 'required' => false, 'col' => '4', 'hint' => Configuration::get('PS_ONE_PHONE_AT_LEAST') ? sprintf($this->l('You must register at least one phone number.')) : '' ), array( 'type' => 'textarea', 'label' => $this->l('Other'), 'name' => 'other', 'required' => false, 'cols' => 15, 'rows' => 3, 'hint' => $this->l('Forbidden characters:').' <>;=#{}' ), ), 'submit' => array( 'title' => $this->l('Save'), ) ); $id_customer = (int)Tools::getValue('id_customer'); if (!$id_customer && Validate::isLoadedObject($this->object)) $id_customer = $this->object->id_customer; if ($id_customer) { $customer = new Customer((int)$id_customer); $token_customer = Tools::getAdminToken('AdminCustomers'.(int)(Tab::getIdFromClassName('AdminCustomers')).(int)$this->context->employee->id); } $this->tpl_form_vars = array( 'customer' => isset($customer) ? $customer : null, 'tokenCustomer' => isset ($token_customer) ? $token_customer : null ); // Order address fields depending on country format $addresses_fields = $this->processAddressFormat(); // we use delivery address $addresses_fields = $addresses_fields['dlv_all_fields']; $temp_fields = array(); foreach ($addresses_fields as $addr_field_item) { if ($addr_field_item == 'company') { $temp_fields[] = array( 'type' => 'text', 'label' => $this->l('Company'), 'name' => 'company', 'required' => false, 'col' => '4', 'hint' => $this->l('Invalid characters:').' <>;=#{}' ); $temp_fields[] = array( 'type' => 'text', 'label' => $this->l('VAT number'), 'col' => '2', 'name' => 'vat_number' ); } else if ($addr_field_item == 'lastname') { if (isset($customer) && !Tools::isSubmit('submit'.strtoupper($this->table)) && Validate::isLoadedObject($customer) && !Validate::isLoadedObject($this->object)) $default_value = $customer->lastname; else $default_value = ''; $temp_fields[] = array( 'type' => 'text', 'label' => $this->l('Last Name'), 'name' => 'lastname', 'required' => true, 'col' => '4', 'hint' => $this->l('Invalid characters:').' 0-9!&lt;&gt;,;?=+()@#"�{}_$%:', 'default_value' => $default_value, ); } else if ($addr_field_item == 'firstname') { if (isset($customer) && !Tools::isSubmit('submit'.strtoupper($this->table)) && Validate::isLoadedObject($customer) && !Validate::isLoadedObject($this->object)) $default_value = $customer->firstname; else $default_value = ''; $temp_fields[] = array( 'type' => 'text', 'label' => $this->l('First Name'), 'name' => 'firstname', 'required' => true, 'col' => '4', 'hint' => $this->l('Invalid characters:').' 0-9!&lt;&gt;,;?=+()@#"�{}_$%:', 'default_value' => $default_value, ); } else if ($addr_field_item == 'address1') { $temp_fields[] = array( 'type' => 'text', 'label' => $this->l('Address'), 'name' => 'address1', 'col' => '6', 'required' => true, ); } else if ($addr_field_item == 'address2') { $temp_fields[] = array( 'type' => 'text', 'label' => $this->l('Address').' (2)', 'name' => 'address2', 'col' => '6', 'required' => false, ); } elseif ($addr_field_item == 'postcode') { $temp_fields[] = array( 'type' => 'text', 'label' => $this->l('Zip/Postal Code'), 'name' => 'postcode', 'col' => '2', 'required' => true, ); } else if ($addr_field_item == 'city') { $temp_fields[] = array( 'type' => 'text', 'label' => $this->l('City'), 'name' => 'city', 'col' => '4', 'required' => true, ); } else if ($addr_field_item == 'country' || $addr_field_item == 'Country:name') { $temp_fields[] = array( 'type' => 'select', 'label' => $this->l('Country'), 'name' => 'id_country', 'required' => false, 'col' => '4', 'default_value' => (int)$this->context->country->id, 'options' => array( 'query' => Country::getCountries($this->context->language->id), 'id' => 'id_country', 'name' => 'name' ) ); $temp_fields[] = array( 'type' => 'select', 'label' => $this->l('State'), 'name' => 'id_state', 'required' => false, 'col' => '4', 'options' => array( 'query' => array(), 'id' => 'id_state', 'name' => 'name' ) ); } } // merge address format with the rest of the form array_splice($this->fields_form['input'], 3, 0, $temp_fields); return AdminController::renderForm(); } } Quelque chose doit m'échapper mais je ne sais quoi ! 🙄 Si vous avez un conseil à me donner, je suis preneur. Merci infiniment pour vos lumières ! ☺️ Bien à vous, Lionel Link to comment Share on other sites More sharing options...
Eolia Posted March 3, 2023 Share Posted March 3, 2023 Là vous l'avez ajouté dans le renderFrom (pour modifier une adresse) mais pas dans le renderList. Vous ne le voyez pas dans le formulaire de création/modification ? Link to comment Share on other sites More sharing options...
Lionel_JDN Posted March 3, 2023 Author Share Posted March 3, 2023 Bonjour Eolia, Merci pour votre réponse rapide. Non le champ n'est pas présent dans les deux cas que vous décrivez. Je vais regarder du côté de renderList. Encore merci. Bien à vous, Lionel Link to comment Share on other sites More sharing options...
Eolia Posted March 3, 2023 Share Posted March 3, 2023 Caches vidés ? (Parce que avec la 1.7 il faut le faire systématiquement dès qu'on modifie un fichier) Link to comment Share on other sites More sharing options...
Lionel_JDN Posted March 3, 2023 Author Share Posted March 3, 2023 Eolia, Oui cache vidé et dossier /dev et /prod supprimés dans /var/cache. Merci. Bien à vous, Lionel Link to comment Share on other sites More sharing options...
Eolia Posted March 3, 2023 Share Posted March 3, 2023 Alors ils ont du modifier un truc en 1.7 car en 1.6 ça fonctionne... Link to comment Share on other sites More sharing options...
Eolia Posted March 3, 2023 Share Posted March 3, 2023 D'ailleurs c'est mieux avec un select Link to comment Share on other sites More sharing options...
Lionel_JDN Posted March 3, 2023 Author Share Posted March 3, 2023 Eolia, Oui merci c'est actuellement le fonctionnement que j'ai sur une version 1.6 mais que je ne parviens pas encore à dupliquer sur 1.7. Je continue de chercher ! ☺️ Merci. Bien à vous, Lionel Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now