LNK Estimated Delivery, date de livraison estimée par transporteur et par zone
LNK Estimated Delivery est un module de délai de livraison pour PrestaShop. Il affiche une date de livraison estimée, par exemple « Livraison estimée entre le mardi 9 et le jeudi 11 juin ». La date est calculée à partir de votre délai de préparation, du transporteur choisi, de la zone de livraison, de vos jours ouvrés et de votre heure limite d'expédition. Les week-ends et les jours fériés sont exclus automatiquement, chaque année. Un client qui commande un vendredi soir lit ainsi une date précise à la place de « livré sous 3 à 5 jours ».
- Version 2.1.0 · PrestaShop 1.7.6 à 8.x
- Version 2.9.0 · PrestaShop 9
- PrestaShop 1.7.6 à 9.x
- PHP 7.1 à 8.4
- Aucun override
Points clés
- Date de livraison calculée par transporteur et par zone.
- Jours ouvrés et jours fériés de dix pays, fêtes mobiles calculées.
- Heure limite par transporteur, lue dans le fuseau de la boutique.
- Quatre présentations : badge, frise, compte à rebours, texte simple.
- Quatre emplacements indépendants : fiche produit, tunnel, pages de commande, PDF.
- Le délai réel de chaque transporteur à l'étape livraison.
- Suivi de commande avec dates réelles puis estimées.
- Apparence entièrement réglable en back-office.
- Compatible constructeurs de pages (Creative Elements et assimilés).
- Aucune surcharge du cœur, aucun appel à un service externe.
- PrestaShop 1.7, 8 et 9, back-office Symfony natif sur la 9.
- Traduit en français, prêt pour toute autre langue.
Délai de livraison calculé à partir de vos propres délais
La plupart des boutiques affichent une phrase fixe écrite dans le thème. Cette phrase ignore le jour de la commande et les jours fériés comme le 15 août. Elle annonce le même délai pour la Corse et pour le centre de Paris.
Le module s'appuie sur les informations que vous connaissez :
- le temps de préparation d'une commande, par transporteur ;
- le temps de transport, par transporteur et par zone ;
- l'heure à laquelle vous arrêtez d'expédier pour la journée ;
- vos jours travaillés et vos jours de fermeture.
Il en déduit une date avec le calcul que vous feriez à la main, refait à chaque affichage de page.
Date de livraison sur la fiche produit
Le client compare les offres sur la fiche produit, et le délai fait partie de sa comparaison. Le module s'y place dès l'installation, sur le point d'accroche standard de PrestaShop.
Quatre présentations sont proposées dans le back-office :
- badge en ligne, une ligne discrète avec l'icône de camion ;
- carte frise, avec les dates de commande, préparation, expédition et livraison ;
- compte à rebours, par exemple « Commandez dans les 02:14:37 pour une expédition aujourd'hui » ;
- texte simple, sans cadre, pour un thème sobre.
Délai de préparation et de transport par transporteur dans le tunnel de commande
À l'étape livraison du tunnel de commande, le module affiche la date sous chaque transporteur, avec son propre délai de préparation et son propre temps de transit. La plupart des modules n'exploitent pas cet emplacement.
Le client compare alors deux prix et deux dates. C'est à cette étape qu'il choisit l'option plus chère ou qu'il abandonne son panier.
Jours ouvrés et jours fériés par pays d'expédition
Le calcul se fait en jours ouvrés. Vous cochez les jours travaillés et le module saute les autres. Il saute aussi les jours fériés, avec un calendrier par pays d'expédition :
- France, Belgique, Luxembourg, Suisse, Allemagne, Espagne, Italie, Portugal, Pays-Bas, Royaume-Uni ;
- ou aucun calendrier, si vous préférez saisir vos propres dates.
Les fêtes mobiles (Pâques, Ascension, Pentecôte, Fête-Dieu) sont calculées chaque année. Elles restent justes en 2030 comme en 2026, sans mise à jour du module. Pour le Royaume-Uni, les jours fériés qui tombent un week-end sont reportés automatiquement, selon l'usage local.
Vos fermetures exceptionnelles (congés d'été, inventaire, pont) s'ajoutent en une ligne.
Heure limite de commande et cut-off d'expédition
Chaque transporteur a son heure limite. Une commande passée après cette heure part le jour ouvré suivant. Avec une heure limite à 14 h, la date affichée se met à jour d'elle-même à 14 h 01.
En présentation « compte à rebours », le client voit le temps qui lui reste. Si l'heure limite passe pendant qu'il consulte la page, le bloc affiche la nouvelle date sans rechargement. Le serveur calcule les deux états à l'avance et le navigateur passe de l'un à l'autre, la date affichée reste donc toujours exacte.
L'heure limite est lue dans le fuseau horaire de votre boutique. Le fuseau du serveur et celui du visiteur n'entrent pas dans le calcul, et un hébergement réglé en UTC ne décale donc rien.
Suivi de commande pour le client
Après la commande, le module affiche une frise de suivi sur la page de confirmation et sur le détail de la commande. Elle reprend les étapes commande, préparation, expédition et livraison.
Les étapes franchies portent les dates réelles, lues dans l'historique de la commande. Les étapes à venir portent la date estimée, calculée depuis la date de commande. Cette date reste identique d'une visite à l'autre et ne recule pas quand le client rafraîchit sa page.
Le client suit sa commande lui-même, ce qui vous évite une partie des courriels « où en est ma commande ? ».
Date de livraison sur la facture et le bon de livraison
Les PDF comportent une ligne avec la date estimée, remplacée par la date réelle une fois la commande livrée. Cet emplacement s'active ou se désactive comme les autres.
Réglage de l'apparence dans le back-office, sans CSS
Le back-office règle la couleur d'accent, la couleur du texte, le fond, la bordure, l'arrondi, les marges, la taille de police, la graisse, l'alignement, l'icône et la pleine largeur.
L'aperçu de la page de configuration est rendu par le serveur, avec les gabarits du front et votre transporteur par défaut. Il montre exactement ce que verra le client.
Aucun fichier n'est écrit sur le disque. Les réglages sont transmis en variables CSS posées sur le bloc. Le module fonctionne donc correctement en multiboutique, et un CDN ne peut pas servir un ancien habillage.
Compatibilité PrestaShop 1.7, 8 et 9
Deux paquets du même module, un par branche de PrestaShop :
| Branche | Version du module | PHP | Back-office |
|---|---|---|---|
| 9.0 → 9.x | 2.9.0 | 8.1 → 8.4 | contrôleur Symfony natif |
| 1.7.6 → 8.x | 2.1.0 (paquet séparé) | 7.1 → 8.1 | contrôleur classique |
Sur PrestaShop 9, la page de configuration est un contrôleur Symfony natif, avec le gabarit Twig et la mise en page du nouveau back-office. Le paquet 2.9.0 ne s'installe que sur PrestaShop 9 ; aucun fichier Symfony n'est livré aux boutiques 1.7 et 8.
Avant chaque publication, chaque version listée est installée, configurée, affichée puis désinstallée dans notre matrice d'intégration.
Module sans override du cœur PrestaShop
Ce module n'installe aucun override. Il ne contient pas de dossier override/ et se
branche uniquement sur les points d'accroche prévus par PrestaShop.
Pour une agence, cela écarte plusieurs problèmes :
- le conflit avec un autre module qui surchargerait la même classe ;
- les fichiers orphelins après une mise à jour de PrestaShop ;
- le dossier
override/à purger avant une migration.
Léger et rapide
Chiffres mesurés sur le module livré, compressé en gzip (niveau 9). En front : une feuille de style de 2 034 octets (2,0 Ko) et deux scripts sans jQuery. Le compte à rebours (1 144 octets, 1,1 Ko) ne se charge que si cette présentation est choisie, sur la fiche produit ou dans le tunnel ; sinon, aucune page n'en charge un octet. Celui qui place la date sous chaque transporteur (978 octets) ne se charge que dans le tunnel de commande. L'estimation est calculée par le serveur et écrite dans le HTML de la page : aucun appel externe, aucun CDN.
Questions fréquentes
Ce module est-il compatible avec ma version de PrestaShop ?
Oui, de PrestaShop 1.7.6 à PrestaShop 9, en deux paquets : la 2.9.0 pour PrestaShop 9 et la 2.1.0 pour 1.7.6 à 8.x. Sur PrestaShop 9, la page de configuration est un contrôleur Symfony natif, avec la mise en page du nouveau back-office. Avant chaque publication, chaque version est installée, configurée et désinstallée dans notre matrice d'intégration.
Le module contient-il un override du cœur ?
Aucun override. Ce module ne modifie pas le cœur de PrestaShop et ne contient pas de
dossier override/. Il ne peut donc entrer en conflit avec aucun autre module, et une mise à
jour de PrestaShop ne laisse aucun fichier orphelin.
Faut-il modifier mon thème ou toucher au code ?
Dans le cas standard, non. Le module se place sur les points d'accroche de PrestaShop, sur la fiche produit et dans le tunnel de commande. Si vous voulez la date à un endroit que votre thème n'expose pas, écrivez-nous : nous posons le point d'accroche pour vous, gracieusement. L'opération prend une quinzaine de minutes.
Le module fait-il des appels aux API des transporteurs ?
Non, c'est un choix. Le module calcule la date à partir de vos propres délais de préparation et de transport. Il ne demande ni clé d'API, ni quota, ni abonnement tiers. Surtout, il ne fait aucun appel réseau pendant l'affichage d'une fiche produit, et un service extérieur lent ne peut donc pas la ralentir.
Ce module ralentit-il ma boutique ?
Non. Le calcul est de l'arithmétique de dates, sans requête réseau ni écriture disque. Les délais sont lus une seule fois par page et gardés en mémoire. Deux petits scripts seulement : celui du compte à rebours, chargé uniquement si une présentation « compte à rebours » est active quelque part, et celui qui place la date sous chaque transporteur (moins d'1 Ko), chargé seulement dans le tunnel de commande.
Les jours fériés sont-ils à mettre à jour chaque année ?
Non. Les jours fixes sont dans le calendrier. Les jours mobiles (Pâques, Ascension, Pentecôte, Fête-Dieu) sont calculés à partir de la date de Pâques de l'année en cours. Ils resteront justes en 2030, sans mise à jour du module. Vous ajoutez seulement vos propres fermetures, comme les congés, l'inventaire ou un pont.
Je n'expédie pas depuis la France.
Dix calendriers nationaux sont fournis : France, Belgique, Luxembourg, Suisse, Allemagne, Espagne, Italie, Portugal, Pays-Bas, Royaume-Uni. Le calendrier britannique reporte au lundi les jours fériés qui tombent un week-end, selon l'usage local. Pour un pays non listé, choisissez « aucun » et saisissez vos jours fériés. Le reste du module fonctionne à l'identique.
Comment se comporte-t-il avec beaucoup de transporteurs et de zones ?
Les délais de transport sont chargés en une seule requête par page, puis gardés en mémoire. Dans le back-office, le détail des zones est replié par transporteur, et une boutique de vingt transporteurs et huit zones reste lisible.
Que reste-t-il si je désinstalle le module ?
Rien. La désinstallation supprime les deux tables du module, ses clés de configuration, son
entrée de menu et sa configuration Symfony. Le module n'a jamais placé de fichier dans le thème
ni dans override/, et il n'en laisse donc aucun.
Fonctionne-t-il en multiboutique et en multilingue ?
Oui. Le module est traduit en français et prêt pour toute autre langue. En multiboutique, il ne génère aucun fichier CSS. Les réglages d'apparence sont transmis en variables CSS posées sur le bloc, et une boutique ne peut donc pas écraser l'habillage d'une autre.
Le module pose-t-il des cookies ?
Non. Le module ne pose aucun cookie ni traceur et n'envoie aucune donnée à un tiers. Vous n'avez rien à déclarer dans votre bandeau de consentement.
La date de livraison est-elle envoyée à Google en données structurées ?
Non, c'est volontaire. Le balisage shippingDetails doit être fusionné dans le balisage
Product que votre thème produit déjà. Un second balisage en parallèle créerait deux entités
concurrentes pour le même produit et brouillerait vos résultats enrichis. Nous avons donc
écarté cette option, qui risquerait de dégrader votre référencement sans avertissement.
Journal des versions
-
Version 2.9.0 PrestaShop 9
Branche PrestaShop 9 (9.0 à 9.x, PHP 8.1 à 8.4). Les boutiques en PrestaShop 1.7.6 à 8.x ont leur propre paquet, la 2.1.0, aux mêmes fonctions et sans aucun fichier Symfony.
Modifications
- Configuration Symfony livrée en place.
config/routes.ymletconfig/services.ymlfont partie du paquet : le module ne copie plus rien dans son propre dossier à l'installation. - Back-office Symfony seul : l'onglet vise directement la route de configuration, le contrôleur classique n'est plus livré sur cette branche.
- Traductions françaises, anglaises et arabes régénérées depuis le code, accents relus.
- Adresses des fichiers CSS et JS du module versionnées par l'empreinte de leur contenu : après une mise à jour, ni un CDN ni le navigateur ne servent l'ancienne version.
- Page de réglages refaite : en-tête avec l'état du module, pastilles de résumé, panneaux Calendrier, Transporteurs, Emplacements et Apparence ; mini-calendrier du mois qui montre ce que le module compte (ouvré, non ouvré, fermeture) ; fermetures exceptionnelles en liste ; aperçu en direct des quatre emplacements (fiche produit, livraison, commande, PDF), calculé avec les réglages en cours avant enregistrement.
- Suivi de commande (confirmation et détail de commande du compte client) : frise plus lisible, un point par étape (creux à venir, plein franchi, halo pour l'étape en cours), trait de la couleur d'accent jusqu'à l'étape en cours, date sous chaque étape, couleurs secondaires du thème au contraste 4,5:1.
- Mise à jour depuis 2.0.0. Aucune donnée ne change : mêmes tables, mêmes réglages, mêmes hooks (un bloc déplacé par le marchand reste où il est), plus
displayAfterCarrierquand le tunnel montre la date sous chaque transporteur. L'onglet est rattaché à la route Symfony. Prouvé partests/upgrade-check.sh: estimations des fiches produit identiques en français, anglais et arabe, réglages et délais inchangés.
Corrections
- Date sous chaque transporteur, enfin dans le tunnel. Le cœur n'appelle
displayCarrierExtraContentque pour un transporteur module, et seulement auprès de son module : avec des transporteurs ordinaires, aucune date ne s'affichait. Le module s'appuie désormais surdisplayAfterCarrier: une ligne par transporteur, avec sa date, placée sous l'option de ce transporteur par un script de moins d'1 Ko chargé seulement dans le tunnel, et qui suit les rechargements en AJAX ; sans script, la liste se lit sous le bloc des transporteurs. Vérifié sur 1.7.6, 8.1 et 9.2 (Classic, Hummingbird), en changeant d'adresse et de transporteur.
- Configuration Symfony livrée en place.
-
Version 2.1.0 PrestaShop 1.7.6 à 8.x
Branche PrestaShop 1.7.6 à 8.x (PHP 7.1 à 8.1). Les boutiques en PrestaShop 9 ont leur propre paquet, la 2.9.0, aux mêmes fonctions.
Modifications
- Aucun code Symfony sur cette branche : le back-office est le contrôleur classique, et la copie de configuration Symfony de la 2.0.0 disparaît.
- Traductions par l'ancien système de PrestaShop (
translations/fr.php,ar.php), le seul que 1.7.6 et 1.7.7 chargent pour un module : le module est traduit dès 1.7.6. - Nom de l'onglet accentué dans chaque langue : « LNK Délais de livraison ».
- Adresses des fichiers CSS et JS du module versionnées par l'empreinte de leur contenu : après une mise à jour, ni un CDN ni le navigateur ne servent l'ancienne version.
- Suivi de commande (confirmation et détail de commande du compte client) : frise plus lisible, un point par étape (creux à venir, plein franchi, halo pour l'étape en cours), trait de la couleur d'accent jusqu'à l'étape en cours, date sous chaque étape, couleurs secondaires du thème au contraste 4,5:1.
- Page de réglages refaite : en-tête avec l'état du module, pastilles de résumé, panneaux Calendrier, Transporteurs, Emplacements et Apparence ; mini-calendrier du mois qui montre ce que le module compte (ouvré, non ouvré, fermeture) ; fermetures exceptionnelles en liste ; aperçu en direct des quatre emplacements (fiche produit, livraison, commande, PDF), calculé avec les réglages en cours avant enregistrement.
- Mise à jour depuis 2.0.0. Aucune donnée ne change : mêmes tables, mêmes réglages, mêmes hooks, plus
displayAfterCarrierquand le tunnel montre la date sous chaque transporteur. L'onglet est remis d'aplomb. Prouvé partests/upgrade-check.shsur 1.7.6, 1.7.8 et 8.1 : estimations des fiches produit identiques en français, anglais et arabe, réglages et délais inchangés.
Corrections
- Date sous chaque transporteur, enfin dans le tunnel. Le cœur n'appelle
displayCarrierExtraContentque pour un transporteur module, et seulement auprès de son module : avec des transporteurs ordinaires, aucune date ne s'affichait. Le module s'appuie désormais surdisplayAfterCarrier: une ligne par transporteur, avec sa date, placée sous l'option de ce transporteur par un script de moins d'1 Ko chargé seulement dans le tunnel, et qui suit les rechargements en AJAX ; sans script, la liste se lit sous le bloc des transporteurs. Vérifié sur 1.7.6, 8.1 et 9.2 (Classic, Hummingbird), en changeant d'adresse et de transporteur.
-
Version 2.0.0 PrestaShop 1.7.6 à 8.x
Première version distribuable. La 1.0.0 était un développement sur mesure pour une boutique ; cette version est portée sur les trois branches de PrestaShop et vendue.
Nouveautés
- Back-office Symfony natif pour PrestaShop 9 (
PrestaShopAdminController+ Twig), déployé à l'installation et seulement si la version le permet. - Calendriers de jours fériés par pays : France, Belgique, Luxembourg, Suisse, Allemagne, Espagne, Italie, Portugal, Pays-Bas, Royaume-Uni, ou aucun. Report au lundi des fériés tombant un week-end pour le Royaume-Uni. Le calendrier par défaut suit le pays de la boutique.
- Réglages d'apparence en back-office : couleur d'accent, couleur du texte, fond, bordure, arrondi, marges, taille, graisse, alignement, icône, pleine largeur. Ils voyagent en variables CSS posées sur le bloc, aucun fichier n'est généré.
- Aperçu rendu par le serveur dans la page de configuration, avec les vrais gabarits du front : il ne peut pas diverger du rendu réel.
- Présentation texte simple, sans cadre, pour les thèmes sobres.
- Liste de hooks proposés par emplacement, vérifiés présents de 1.7.0 à 9.x.
tests/test-estimator.php— 63 vérifications du moteur, exécutables sans boutique.- Documentation complète : installation, compatibilité, hooks, hooks sur mesure, fiche marketplace, FAQ.
Modifications
- Le calcul des jours fériés quitte
LnkDeliveryEstimatorpourLnkDeliveryHolidays.LnkDeliveryEstimator::frenchHolidays()et::easterDate()n'existent plus sous cette forme — sans effet pour l'utilisation normale du module. - La couleur unique de la 1.0.0 (
LNK_DELEST_COLOR) est reprise dans les nouveaux réglages d'apparence à la mise à jour. - Le script du compte à rebours n'est chargé que si une présentation « compte à rebours » est active quelque part.
Corrections
- Fuseau horaire codé en dur sur
Europe/Paris. L'heure limite est désormais lue dans le fuseau de la boutique. Un hébergement réglé en UTC décalait la bascule d'une à deux heures, et le compte à rebours affichait un délai faux. - Compte à rebours expiré. Le serveur rend maintenant les deux états — avant et après l'heure limite. Le navigateur ne fait que basculer de l'un à l'autre, il ne recalcule aucune date : une page servie par un cache de pages entières ne peut plus afficher une date fausse.
- Transporteur par défaut supprimé ou désactivé. Le module retombe sur le premier transporteur réellement disponible pour la zone au lieu de se taire sur toutes les fiches.
- Configuration dégénérée. Aucun jour ouvré coché ne fait plus tourner la boucle de recherche 400 fois par appel : le module ne rend rien plutôt que d'inventer une date.
- Désabonnement de hooks par effet de bord. Changer un placement ne peut plus retirer les hooks qui portent le suivi de commande ou les PDF.
- Semis à l'installation. Les délais par défaut sont insérés par lots ; une boutique de vingt transporteurs et huit zones déclenchait 180 requêtes.
- Fermetures exceptionnelles : les dates invalides sont ignorées au lieu de fausser le calendrier.
<style>injecté dans le<head>à chaque page : supprimé, la couleur passe par une variable CSS sur le bloc.
- Back-office Symfony natif pour PrestaShop 9 (
Voir la version précédente
-
Version 1.0.0 PrestaShop 1.7.6 à 8.x
Version initiale, développement sur mesure. Non distribuée.