- Mais, dans le fichier port.html, j’ai besoin d’utiliser la fonction getTotal()->getValue() également présente dans template/checkout/cart/total/default.phtml pour déterminer le montant que mon client doit encore payer pour avoir la livraison offerte :
montant restant = montant pour livraison offerte - montant total déjà au panier (çàd : getTotal()->getValue())
Ben çà marche pas car, j’imagine, il n’y a pas de fichier .php associé à port.phtml et Magento ne trouve pas les fonctions.
Le fichier code/core/Mage/Checkout/Block/Cart/Totals.php permet de générer les montants totaux. J’ai donc copié/collé son contenu dans un fichier Port.php que j’ai placé dans le même rep.
Ben çà marche toujours pas.
> Ma question : comment dire à Magento d’aller chercher un .php que je crée moi-même ? J’ai bien réussi à ajouter des fonctions dans des .php existant…
Merci pour vos réponses qui seront très utiles car répondre à ce cas précis me permettra d’envisager des fonctionnalités à ajouter sur mon site et également de m’auto-répondre sur le sujet des cadeaux offerts aux clients (voir le thread ici).
Je suppose que tu connais include(), require(), require_once(), include_once(), get_included_files(), readfile(), virtual() et include_path mais je te le dis au cas ou; sans quoi -> php.net, désolé de pas pouvoir t’aider plus :/
ça signifie que tu choisis d’utiliser le block Core/Block/Template.php.
C’est l’attribut type qui définit ça :
type="core/template"
Donc, si tu souhaites appeler le block Checkout/Block/Cart/Totals.php, il faut configurer :
type="checkout/cart_totals"
Le “checkout” indique le module, puis on met un slash ("/"), puis on met la liste des répertoires permettant d’accéder au fichier block (Checkout/Block/Cart/Totals.php) en ignorant le répertoire Block (et tout en minuscule, séparés par des underscores).
Rappel : ne pas faire de modifs dans les fichiers du core de Magento, sinon tu perdras tout lors de la prochaine mise à jour.
Bon, tout çà à l’air de marcher. Merci ! Je vais maintenant tenter d’appeler les fonctions en question dans mon nouveau fichier .php et là je serai fixé.
Bon, tout çà à l’air de marcher. Merci ! Je vais maintenant tenter d’appeler les fonctions en question dans mon nouveau fichier .php et là je serai fixé.
Si ton développement fonctionne, je suis intéressé par ta méthode.
Après quelques essais, j’ai réussi mais je ne garantis pas que ce que je propose soit optimisé !
Dans le fichier template/checkout/cart.phtml
J’ai ajouté la ligne
<?php echo $this->getChildHtml('port') ?>
pour appeler la page “port.phtml”
Dans le dossier template/checkout/cart/
J’ai ajouté un fichier nommé port.html et qui contient le code :
<?php echo $this->renderTotals('footer'); ?>
Dans le dossier template/checkout/
J’ai ajouté un dossier port/ dans lequel j’ai placé un fichier nommé default.phtml
Ce fichier contient le code permettant d’afficher l’info que je veux dans mon module “port” et fait donc appel aux css nouvellement créées (.free-shipping, not-reached, .reached). A vous de faire les vôtres !
Le voici pour exemple :
<?php $montantPortOffert = 100; /*Cart total amount to reach to get free shipping*/ $montantComplementPlancher = 25; /*Value from which we display the message in order not to display too high amounts*/ $grandTotal = $this->getTotal()->getValue(); $complementPanier = $montantPortOffert-$grandTotal; /*Amount remaining to buy to get free shipping */ ?> <?php if($complementPanier <= $montantComplementPlancher && $grandTotal < $montantPortOffert): ?> <div class="box free-shipping"> <div class="not-reached"> <?php echo $this->__('Continue shopping for') . ' ' . Mage::helper('core')->currency($complementPanier) . ' ' . $this->__('to get free shipping!'); ?> </div> </div> <?php endif; ?>
<?php if($grandTotal >= $montantPortOffert): ?> <div class="box free-shipping"> <div class="reached"> <?php echo $this->__('Shipping is free for your order!'); ?> </div> </div> <?php endif; ?>
Dans le dossier locale/fr_FR
J’ai créé un fichier Mage_Port.csv contenant les traductions :
"Continue shopping for","Compléter votre panier avec " "to get free shipping!","pour profiter de la livraison offerte."
Dans le fichier layout/checkout.xml
J’ai appelé mon module “port” dans le handle ‘default’
Juste une petite suggestion d’amélioration : Il est possible d’ajouter un texte au milieu d’un libellé à traduire.
Par exemple, dans ton cas, tu aurais un seul libellé au lieu de 2 pour la phrase “Compléter votre panier avec [...] pour profiter de la livraison offerte.”
Il faut pour cela utiliser un libellé comme ça : “Compléter votre panier avec %s pour profiter de la livraison offerte.”
Et en remplaçant
Ce module n’est pas un vrai “module”. Il n’est effectivement pas (pour l’instant) implémenté dans le back-office.
C’est quelque-chose que je dois apprendre à faire afin de renseigner les variables dans le back-office et que le PHP aille les chercher pour activer ou non le port offert.
Les variables sont toutefois modifiables directement dans le PHTML (template/.../checkout/port.phtml dont je parle dans le post au-dessus) :
<?php $montantPortOffert = 100; /*Cart total amount to reach to get free shipping*/ $montantComplementPlancher = 25; /*Value from which we display the message in order not to display too high amounts*/ $grandTotal = $this->getTotal()->getValue(); $complementPanier = $montantPortOffert-$grandTotal; /*Amount remaining to buy to get free shipping */ ?>
- $montantPortOffert : montant à atteindre par le client pour profiter du port offert
- $montantComplementPlancher : est le montant “reste à acheter pour profiter du port offert” plancher pour que le message “il vous reste… à acheter” s’affiche. En gros et pour caricaturer : s’il reste 500 euros à acheter pour profiter du port offert, on évite de l’afficher… çà fait un peu tiré par les cheveux. Dans mon exemple, j’ai mis 25. Ainsi, le message s’affiche s’il reste 25 euros ou moins à acheter pour profiter du port offert.
- $grandTotal : le montant du panier
- $complementPanier : le montant restant à acheter pour profiter du port offert.
Voilà, en attendant que je fasses des progrès pour en faire un vrai module
@VR…
Pour la création d’une extension Magento Connect, il y a un tuto :
http://www.magentocommerce.com/wiki/packaging_a_magento_extension
Pour ajouter du paramétrage dans le back office, je te conseille de regarder des modules simples comme Mage_Contacts
Regarde les fichiers :
- etc/config.xml pour la configuration par défaut
- etc/system.xml pour afficher des menus et paramètres supplémentaires dans le back office.
- dans Helper/Data.php : un exemple de récupération du paramétrage pour le store : Mage::getStoreConfig( self::XML_PATH_ENABLED );
J’ai créer un Tutoriel parce que j’étais en galére pour trouver de la doc moi aussi quand j’ai commencé a développer sous Magento, tu peux aller voir ce tutoriel si tu veux. J’ai essayé de faire au plus simple.
Si il y a une estimation des frais de livraison, le grand total le prends en compte.
Or, c’est idiot d’avoir ce genre de calcul
$montantPortOffert = 60;
- Sous total : 50€
- Frais de port : 10€
- Grand total : 60€
Eh bien le bloc pour frais de port gratuits s’affichera alors que c’est grace aux frais de port de 10€ que le montant est atteint.
Bref, il faudrait avoir le grand total mais en enlevant les frais de port.
Mon problème est que toutes les méthodes que je peux trouver permettent d’obtenir les frais de port HT.
Or, j’aimerais offerir les frais de port a partir de 60€ TTC (comme un peu tout le monde en fait, j’imagine mal faire ce genre de discours marketing en se basant sur le HT) (Sauf si c’est du B2B).
J’ai donc besoin de récupérer les frais de port TTC, mais je n’y arrive pas. Quelqu’un à une idée ?