Veuillez noter que cette question concerne le coût d'expédition, et non le prix. Il y a une différence importante, c'est-à-dire quel est le coût de la méthode d'expédition encourue par le propriétaire du magasin, par opposition à ce qui est payé par le client.Accès aux frais de port dans le panier et/ou la commande de Magento
La table de base de données comprend un champ shipping_tablerate
cost
, qui est rempli dans l'objet Mage_Shipping_Model_Carrier_Tablerate
au cours du procédé collectRates
. Cependant, ce champ n'est accessible nulle part ailleurs dans la pile, par ex. de l'adresse d'un devis.
J'ai besoin d'accéder à cette valeur sur la page du panier, et je ne trouve pas de toute façon pour y parvenir, autre que d'instancier un objet Mage_Shipping_Model_Rate_Request
à passer en collectRates()
. Cela semble inutilement inefficace étant donné que les données sont déjà chargées depuis la table et devraient être accessibles.
J'ai essayé d'observer l'événement <shipping_carrier_tablerate_load/>
, mais il semble que l'événement _load
n'est pas généré pour ce modèle.
J'ai également essayé d'accéder au taux de la citation:
$quote = Mage::getSingleton('checkout/cart')->getQuote();
$address = $quote->getShippingAddress();
$rate = $address->getShippingRateByCode($code ='tablerate_bestway');
je peux voir la valeur calculée price
, mais cost
est pas présent dans ce modèle.
À ce stade, je suis à court d'idées. Toutes les suggestions reçues avec gratitude!
Merci, Jonathan
Merci Alan, bonne réponse.Mon souci de revenir à la base de données était que ce modèle ne semble pas passer par le processus de chargement automatique standard, d'où l'absence de l'événement '$ model_load'. J'aime l'idée d'utiliser le 'Mage :: register' pour stocker la valeur. Est-ce que 'Mage :: register' stocke globalement ou juste pour ce' checkout/session'? Si c'est global, alors j'ai besoin de vérifier que le taux qui est enregistré inclut le 'dest_zip' utilisé pour le calculer. Mais c'est un détail de mise en œuvre. –
P.S. La charge de base de données pour 'tablerate' est effectuée dans' Mage_Shipping_Model_Mysql4_Carrier_Tablerate_Collection :: __ construct() 'et est raisonnablement complexe car elle implique trois tables dans la jointure. –
Ah, j'ai mal compris la question. Je pensais que vous vouliez l'utiliser pour la même demande. Je suis sûr que Mage :: register est une chose par requête .. les variables globales sans violer la portée globale. Aussi, FWIW, je viens de chercher ma base de code locale 1.4 et 1.4.1 et je n'ai pas trouvé l'évènement shipping_carrier_tablerate_load n'importe où. –