J'essaie d'obtenir l'identifiant d'incrément de commande dans Magento, sur la page success.phtml, afin de pouvoir l'utiliser pour le suivi des affiliés.
J'utilise le code suivant, mais il donne une erreur sur la deuxième ligne.
$order = Mage::getSingleton('sales/order')->getLastOrderId();
$lastOrderId = $order->getIncrementId();
L'erreur lit:
Erreur fatale: Appelez une fonction membre getIncrementId () sur un non-objet à la ligne 34: $ LastOrderId = $ order-> getIncrementId ();
Je me demandais si quelqu'un avait des idées sur la façon d'obtenir l'identifiant d'incrément de commande? C'est le numéro de référence vu dans l'admin, généralement quelque chose comme: # 1000123
Si vous le faites spécifiquement sur la page de réussite de la commande - dans success.phtml -, le code permettant d'obtenir l'ID d'incrément de commande est déjà disponible dans le modèle puisqu'il est affiché au client.
Vous avez juste besoin des éléments suivants:
$orderId = $this->getOrderId();
Notez que cela ne fonctionnera pas sur les autres pages, vous devrez donc utiliser:
$orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
$ order dans votre code est le dernier ID de commande ... comme le nom de la fonction l’implique. Si ce n'est pas la valeur que vous voulez, utilisez-la pour charger une commande, puis utilisez le getter pour cela:
$order = Mage::getModel('sales/order');
$order->load(Mage::getSingleton('sales/order')->getLastOrderId());
$lastOrderId = $order->getIncrementId();
Cela fonctionnera parfaitement, je m exécute celui-ci dans mon module maintenant.
$last_order_increment_id = Mage::getModel("sales/order")->getCollection()->getLastItem()->getIncrementId();
J'espère que ça aide merci. :)
Votre appel à
Mage::getSingleton('sales/order')
ne retourne pas un objet. Essayer
var_dump(Mage::getSingleton('sales/order'));
confirmer.
Je n'ai pas plongé dans le code de paiement récemment, mais je suis presque sûr que c'est parce que sales/order
vous permettra d'obtenir la commande en cours. Une fois la commande passée, elle n'est plus en cours.
La "bonne" façon de procéder serait de créer un observateur pour l'un des événements déclenchés par Magento lors du paiement. le
checkout_onepage_controller_success_action
l'événement devrait être suffisant, à condition que vous n'ayez pas trop paramétré le processus de paiement.
Il y a une explication concise de la façon de faire ceci sur le Wiki (pour un événement différent)
Une fois que vous avez configuré votre événement et répondu, faites un
$event = $observer->getEvent();
var_dump($event->getData());
pour voir quel type d'informations vous avez disponible. Il y a des chances qu'il y ait un objet d'ordre qui vous permettra d'obtenir l'ID que vous recherchez.
Je devais utiliser ...
$_order = Mage::getModel('sales/order')->loadByIncrementId($this->getOrderId());
Dans le modèle success.phtml. Au lieu de load (), j'ai utilisé loadByIncrementId. Mon objet de commande n'était plus vide.
Si vous êtes en mode administrateur - essayez ceci:
$orderModel = Mage::getModel('sales/order');
$orders = $orderModel->getCollection()->setOrder('increment_id', 'DESC')->setPageSize(1)->setCurPage(1);
$orderId = $orders->getFirstItem()->getIncrementId();
getRealOrderId()
apparaît pour renvoyer le numéro de commande tel qu'il est présenté dans les grilles de données. getId()
retournera l'id interne de la ligne dans la base de données, ce que vous ne voulez probablement pas.
Vous pouvez obtenir l'identifiant d'incrémentation à l'aide de cet extrait de code:
$orderId = 12;
$order = Mage::getModel('sales/order')->load($orderId);
$Incrementid = $order->getIncrementId();
Vous pouvez maintenant créer un écho pour la variable $ Incrementid et voir l’identificateur d’incrément.
J'espère que ça aide.
$lastOrderIncrementId = Mage::getModel("sales/order")->getCollection()->getLastItem()->getIncrementId();