Alles wat u wilt weten voordat u installeert.
Een gedetailleerde blik op hoe Internationaal telefoonnummerveld PrestaShop: landvlaggen & E.164-normalisatie werkt, waarom we het zo gebouwd hebben en de gedachte achter de bovenstaande functies.
Het probleem: telefoonnummers die onleesbaar, onvergelijkbaar en onbereikbaar zijn
In een webshop die meerdere landen bedient, komen telefoonnummers in alle denkbare formaten in de database terecht: 06 33 54 78 64, 0633547864, plus 33 6 33 54 78 64, 0033 6 33 54 78 64, 33-633-547-864. Het gevolg: dubbele klanten zijn niet te herkennen, exports naar een CRM of ERP moeten handmatig worden opgeschoond, diensten voor transactionele sms weigeren één op de drie nummers, en verkoopteams verliezen tijd met herformatteren vóór elk internationaal gesprek.
De oplossing: één formaat, een heldere gebruikservaring en een garantie aan de serverzijde
De module voegt een landnummerkiezer met vlag rechtstreeks toe aan de velden telefoon en mobiele telefoon, overal waar die verschijnen: registratieformulier, adresbeheer, checkout in 5 stappen of op één pagina. De klant ziet meteen welk landnummer wordt toegepast, kan het met twee klikken wijzigen, en de lijst filtert zich met direct zoeken. In de database krijgt u, wat de klant ook intikt, altijd een schoon, genormaliseerd en meteen bruikbaar formaat.
Automatische synchronisatie met het bezorgland
Wanneer de klant zijn land in het adresformulier kiest, verandert het landnummer in de telefoonkiezer automatisch mee. België kiezen schakelt naar plus 32, Duitsland naar plus 49, zonder handmatige ingreep. Die synchronisatie werkt ook bij het herladen van de native PrestaShop-checkout via AJAX (het event updatedAddressForm). Voor sterk aangepaste thema's dient een MutationObserver met debounce als vangnet.
Gegarandeerde E.164-normalisatie aan de serverzijde
Normalisatie in de browser beveiligt de gebruikservaring, maar volstaat niet. Wordt een bestelling aangemaakt via de REST API van PrestaShop, via de backoffice, via een CSV-import of via een andere module die de klasse Address manipuleert, dan wordt de JavaScript van het formulier nooit uitgevoerd. Daarom haakt de module ook in op actionObjectAddressAddBefore en actionObjectAddressUpdateBefore: vóór elke INSERT of UPDATE op de tabel ps_address gaan de velden phone en phone_mobile door de normalisatie aan de serverzijde. Er is geen enkele omweg mogelijk.
Toegepaste normalisatieregels
Voor een adres dat aan een land met landnummer plus 33 hangt: een nummer dat met plus begint blijft ongewijzigd (alleen spaties en scheidingstekens worden verwijderd). Bij een nummer dat met 00 begint wordt de 00 door plus vervangen. Bij een nummer dat met 0 begint (de nationale trunk prefix) wordt die 0 verwijderd en vervangen door plus gevolgd door het landnummer. Een nummer dat al met het landnummer begint maar zonder plus, krijgt gewoon de plus erbij. Die regels volgen de internationale E.164-norm die alle telecomoperatoren en professionele sms-diensten hanteren.
Voorkeurslanden en de gebruikservaring van de kiezer
Standaard staan Frankrijk, België, Luxemburg, Zwitserland, het Verenigd Koninkrijk, de Verenigde Staten, Duitsland, Spanje, Italië en Nederland bovenaan de lijst vastgezet. Die lijst is volledig instelbaar vanuit de backoffice (ISO-codes gescheiden door komma's). De overige landen verschijnen eronder in alfabetische volgorde. Met een zoekbalk vindt u een land meteen op naam, ISO-code of landnummer. De hele lijst wordt opgebouwd uit de landen die in uw winkel geactiveerd zijn, rechtstreeks gelezen uit de native kolom ps_country.call_prefix.
Nul afhankelijkheden, native Unicode-vlaggen
De module bevat geen enkele externe bibliotheek. Geen intl-tel-input om te onderhouden, geen jQuery-plugin, geen zwaar CSS-framework. De vlaggen zijn Unicode-emoji's (Regional Indicator Symbols) die alle moderne browsers en besturingssystemen native ondersteunen. Het stylesheet weegt minder dan 4 kB, het script minder dan 16 kB. Geen extra netwerkaanroep, geen externe CDN en geen gegevenslek naar een derde partij.
Er zijn nog geen beoordelingen.