DavidCKW Posted October 21, 2019 Share Posted October 21, 2019 Bonjour, Sur prestashop 1.7.6, pour des raisons spécifiques, j'ai besoin qu'un champ "Autres" soit disponible dans la partie adresses, côté front office pour l'utilisateur, mais ne soit pas visible sur la facture. Je suis donc allé dans le pays en question pour rajouter le champ autres dans la liste des champs disponibles pour l'adresse (champ proposé par défaut dans l'onglet adresse). Ce champ s'affiche donc bien en FO, lors de l'inscription ou d'une modification d'adresse. De plus dans une commande, il s'affiche de façon séparée sous l'adresse (en plus de s'afficher avec les autres champs de l'adresse). Dans le pdf de la facture, il s'affiche sous les autres champs, alors que je ne voudrais pas du tout qu'il s'affiche. Je suis allé voir dans le tpl du pdf (invoice.addresses-tab.tpl) et les champs adresses sont appelés par une seule variable globale qui en globe tous les champs : {$invoice_address} Il me faudrait donc avoir une variable par champs, ainsi je pourrai les séparer et n'afficher que ceux qui m'intéressent. J'ai bien tenté d'afficher par exemple {$invoice_address.firstname} mais ça n'a pas marché. Je me doute donc qu'il va peut être falloir faire une requête spéciale à passer via un override du fichier classes/order/OrderInvoice.php pour avoir des champs différents, mais là, je sèche un peu. Quelqu'un a--t-il une idée svp ? Merci d 'avance. Link to comment Share on other sites More sharing options...
lagui Posted October 21, 2019 Share Posted October 21, 2019 Bonjour, Quitte à passer par un override, essayez sur le fichier classes/AddressFormat.php, la fonction generateAddress(). Link to comment Share on other sites More sharing options...
DavidCKW Posted October 21, 2019 Author Share Posted October 21, 2019 Merci pour votre retour. J'ai bien trouvé la fonction dont le code complet est le suivant : public static function generateAddress(Address $address, $patternRules = array(), $newLine = self::FORMAT_NEW_LINE, $separator = ' ', $style = array()) { $addressFields = AddressFormat::getOrderedAddressFields($address->id_country); $addressFormatedValues = AddressFormat::getFormattedAddressFieldsValues($address, $addressFields); $addressText = ''; foreach ($addressFields as $line) { if (($patternsList = preg_split(self::_CLEANING_REGEX_, $line, -1, PREG_SPLIT_NO_EMPTY))) { $tmpText = ''; foreach ($patternsList as $pattern) { if ((!array_key_exists('avoid', $patternRules)) || (is_array($patternRules) && array_key_exists('avoid', $patternRules) && !in_array($pattern, $patternRules['avoid']))) { $tmpText .= (isset($addressFormatedValues[$pattern]) && !empty($addressFormatedValues[$pattern])) ? (((isset($style[$pattern])) ? (sprintf($style[$pattern], $addressFormatedValues[$pattern])) : $addressFormatedValues[$pattern]) . $separator) : ''; } } $tmpText = trim($tmpText); $addressText .= (!empty($tmpText)) ? $tmpText . $newLine : ''; } } $addressText = preg_replace('/' . preg_quote($newLine, '/') . '$/i', '', $addressText); $addressText = rtrim($addressText, $separator); return $addressText; } Malheureusement, je ne suis pas suffisamment calé en php pour modifier la fonction et en extraire une génération qui excluerai mon champ "other" Link to comment Share on other sites More sharing options...
lagui Posted October 23, 2019 Share Posted October 23, 2019 Créer le fichier override/classes/AddressFormat.php : class AddressFormat extends AddressFormatCore { public static function generateAddress(Address $address, $patternRules = array(), $newLine = self::FORMAT_NEW_LINE, $separator = ' ', $style = array()) { $addressFields = AddressFormat::getOrderedAddressFields($address->id_country); $addressFormatedValues = AddressFormat::getFormattedAddressFieldsValues($address, $addressFields); $addressText = ''; foreach ($addressFields as $line) { if ($line == 'other') // on passe le champs other continue; if (($patternsList = preg_split(self::_CLEANING_REGEX_, $line, -1, PREG_SPLIT_NO_EMPTY))) { $tmpText = ''; foreach ($patternsList as $pattern) { if ((!array_key_exists('avoid', $patternRules)) || (is_array($patternRules) && array_key_exists('avoid', $patternRules) && !in_array($pattern, $patternRules['avoid'])) ) { $tmpText .= (isset($addressFormatedValues[$pattern]) && !empty($addressFormatedValues[$pattern])) ? (((isset($style[$pattern])) ? (sprintf($style[$pattern], $addressFormatedValues[$pattern])) : $addressFormatedValues[$pattern]) . $separator) : ''; } } $tmpText = trim($tmpText); $addressText .= (!empty($tmpText)) ? $tmpText . $newLine : ''; } } $addressText = preg_replace('/' . preg_quote($newLine, '/') . '$/i', '', $addressText); $addressText = rtrim($addressText, $separator); return $addressText; } } A tester... 1 Link to comment Share on other sites More sharing options...
DavidCKW Posted October 23, 2019 Author Share Posted October 23, 2019 Génial lagui, ça marche !!!! Grâce à l'override, en activant le champ other pour la France, les utilisateurs peuvent renseigner ce champ en Front office. Je le vois dans la commande, mais il ne s'affiche pas dans l'adresse de la facture. C'est exactement ce que je souhaitais. Un grand MERCI à toi lagui, tu viens d'égayer ma journée et de m'enlever une épine du pied Link to comment Share on other sites More sharing options...
lagui Posted October 23, 2019 Share Posted October 23, 2019 😉 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