s.elettronew Posted February 28, 2022 Share Posted February 28, 2022 Salve ragazzi, Ho la necessità di modificare il CAP al momento della registrazione dell'indirizzo al checkout (il modulo in questione è OnePageCheckOut. Lo scopo è fare un semplice str_replace() del CAP a seconda del paese dell'indirizzo prima che i dati vengano salvati in wp_address. Ho provato a dare uno sguardo alle classi (sono neofita di prestashop), e l'unica classe che mi salta all'occhio dove potrei intervenire è : -ManufacturerAddressFormDataHandler.php => Potrei aggiungere una condizione recuperando il codice ISO del paese in questione, nello specifico : private function fillCommandWithData(EditManufacturerAddressCommand $command, array $data) { if (null !== $data['post_code']) { $command->setPostCode($data['post_code']); } -Address.php => Intervenire nella funzione setAddress(). Soluzione già sperimentata, ma apparentemente non è successo nulla... public function setPostCode($postCode) { switch (getCountryCode()) { case 15: $this->postCode = str_replace("-","",$postCode); break; Qualcuno ha delle idee dove potrei verificare? Grazie Link to comment Share on other sites More sharing options...
Codencode Posted February 28, 2022 Share Posted February 28, 2022 Quello che chiedi lo puoi fare in 2 modi diversi, entrambi sfruttano gli hook. Il primo modo è quello di utilizzare l'hook actionSubmitCustomerAddressForm, questo hook viene chiamato sono nel front-office e viene eseguito prima del salvataggio. come parametro viene passato l'indirizzo come classe Address Il secondo modo richiede l'utilizzo dei seguenti metodi: actionObjectAddBefore / actionObjectUpdateBefore actionObjectAddressAddBefore / actionObjectAddressUpdateBefore questi 4 hook vengono chiamati direttamente dalla classe ObjectModel e passano come parametro l'indirizzo come classe Address. Ovviamente non devi utilizzare tutti e 4, ma devi utilizzarne solo 2 la differenza è che utilizzando i primi due (actionObjectAddBefore / actionObjectUpdateBefore), nel tuo metodo devi controllare se il parametro passato è un indirizzo, mentre con gli altri due (actionObjectAddressAddBefore / actionObjectAddressUpdateBefore) sai già che si sta creando/aggiornando un indirizzo. Ci sarebbe anche un terzo metodo, che funziona solo per l'admin, che sfrutta gli hook relativi a Symfony, ma ovviamente funzionano solo se nella tua versione di Prestashop, la parte admin degli indirizzi è stata migrata a Symfony, in questo caso gli hook sono: dei nuovi actionAddressFormBuilderModifier: chiamato in fase di creazione del form actionAfterUpdateAddressFormHandler: chimato in fase di salvataggio dei dati 1 Link to comment Share on other sites More sharing options...
s.elettronew Posted March 1, 2022 Author Share Posted March 1, 2022 (edited) Grazie ! Edited March 1, 2022 by s.elettronew (see edit history) Link to comment Share on other sites More sharing options...
s.elettronew Posted March 1, 2022 Author Share Posted March 1, 2022 PS Tutto è funzionantem l'unico problema che sussiste è che quando inserisco il CAP poi non mi mostra le compagnie di spedizione (sui paese dove ho inserito il CAP da modificare)..Come mai? Link to comment Share on other sites More sharing options...
Codencode Posted March 1, 2022 Share Posted March 1, 2022 Le spedizioni si basano sulle zone, per poter utilizzare il cap bisogna farlo mediante un modulo o uno sviluppo ad hoc Link to comment Share on other sites More sharing options...
s.elettronew Posted March 1, 2022 Author Share Posted March 1, 2022 No io non voglio utilizzare il CAP, voglio continuare ad utilizzare le zone. Semplicemente quando aggiungo il cap nel form , che modifico con un replace prima che l'hook che mi hai menzionato viene attivato, non mi vengono proposte le possibilità di spedizione. Quindi in ps_address tutto viene salvato correttamente, ma il montante totale è falso perchè non mi da possibilità di aggiungere il prezzo di spedizione Link to comment Share on other sites More sharing options...
Codencode Posted March 2, 2022 Share Posted March 2, 2022 Molto probabilmente hai un modulo per le spedizioni che richiede il CAP per il calcolo della spedizione, di base Prestashop non usa il CAP per il calcolo della spedizione, quindi devi verificare bene tra i moduli che hai installato. Link to comment Share on other sites More sharing options...
s.elettronew Posted March 2, 2022 Author Share Posted March 2, 2022 Non ho nessun modulo particolare per le spedizioni. Ho trovato in onepagecheckoutps.ps questo pezzo di codice, potrebbe influire? if ($country->need_zip_code && !empty($country->zip_code_format)) { if (empty($address->postcode) || $address->postcode == $default_value || !$country->checkZipCode($address->postcode)) { $this->errors = $this->l('You need to place a post code to show shipping options.'); } } e la funzione checkZipCode è la seguente public function checkZipCode($zipCode) { if (empty($this->zip_code_format)) { return true; } $zipRegexp = '/^' . $this->zip_code_format . '$/ui'; $zipRegexp = str_replace('N', '[0-9]', $zipRegexp); $zipRegexp = str_replace('L', '[a-zA-Z]', $zipRegexp); $zipRegexp = str_replace('C', $this->iso_code, $zipRegexp); return (bool) preg_match($zipRegexp, $zipCode); } Link to comment Share on other sites More sharing options...
Codencode Posted March 3, 2022 Share Posted March 3, 2022 Penso sia questo, devi analizzarlo bene, magari usare il debug che aiuta tanto in modo da capire meglio cosa accade. Link to comment Share on other sites More sharing options...
s.elettronew Posted March 3, 2022 Author Share Posted March 3, 2022 Come posso usare il debug su prestashop ? Essendo abitutato a debuggare (lo so, non è bene) con dei var dump... Link to comment Share on other sites More sharing options...
Codencode Posted March 3, 2022 Share Posted March 3, 2022 Il debug non è legato a Prestashop, ma al linguaggio di programmazione, nel caso di PRestashop è PHP. Il debug lo esegui mediante l'IDE ma ovviamente devi installare una estensione di PHP per poterlo far funzionare. Puoi utilizzare xdebug https://xdebug.org/ Ovviamente il tutto conviene farlo in locale che sicuramente è più agevole. Link to comment Share on other sites More sharing options...
s.elettronew Posted March 3, 2022 Author Share Posted March 3, 2022 Ok grazie! Ci tenevo veramente a ringraziarti, perchè mi hai aiutato a risolvere un bel problema! Link to comment Share on other sites More sharing options...
Codencode Posted March 3, 2022 Share Posted March 3, 2022 Sono felice di averti aiutato! 1 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