Question

Si je recharger la page checkout/onepage/success, je suis dirigé vers le panier.

Ainsi, lors du débogage ou styling la page de succès de l'ordre, je dois toujours faire un nouvel ordre.

Comment puis-je faire plus efficacement?

Était-ce utile?

La solution

Vous pouvez temporairement pirater le noyau pendant que vous développez:

Dans /app/code/core/Mage/Checkout/controllers/OnepageController.php modifier successAction().

Comment la ligne $session->clear();. Maintenant, vous pouvez faire un ordre et actualisez la page aussi souvent que vous le souhaitez.

Si vous ne voulez même pas faire une commande sur chaque navigateur, par exemple lorsque vous effectuez des tests multi-navigateur, vous pouvez aussi simplement initialiser la session à chaque fois.

Choisissez un numéro de commande et un identifiant de citation de la table sales_flat_order (champs: entity_id et quote_id). Par exemple via:

SELECT entity_id as order_id, quote_id 
  FROM sales_flat_order ORDER BY entity_id DESC LIMIT 1;

Ensuite, changez le début de la fonction comme suit:

$session = $this->getOnepage()->getCheckout();

$session->setLastSuccessQuoteId(INSERT_QUOTE_ID);
$session->setLastQuoteId(INSERT_QUOTE_ID);
$session->setLastOrderId(INSERT_ORDER_ID);

et replaceINSERT_.... avec les ID.

Maintenant, vous pouvez toujours appeler checkout/onepage/success

Pendant que vous y êtes, vous pouvez tester le failureAction() ainsi, dans

/app/code/core/Mage/Checkout/controllers/OnepageController.php

L'action modifiée ressemblerait à ceci

public function failureAction()
    {
        $session = $this->getOnepage()->getCheckout();

        $session->setLastSuccessQuoteId(INSERT_QUOTE_ID);
        $session->setLastQuoteId(INSERT_QUOTE_ID);
        $session->setLastOrderId(INSERT_ORDER_ID);

        $lastQuoteId = $this->getOnepage()->getCheckout()->getLastQuoteId();
        $lastOrderId = $this->getOnepage()->getCheckout()->getLastOrderId();

        if (!$lastQuoteId || !$lastOrderId) {
            $this->_redirect('checkout/cart');
            return;
        }

        $this->loadLayout();
        $this->renderLayout();
    }

Maintenant, vous pouvez toujours appeler checkout/onepage/failure

Autres conseils

Vous devez modifier le successAction () dans

/app/code/core/Mage/Checkout/controllers/OnepageController.php

Action modifiée souhaite que ce

public function successAction()
    {
        /*
        $session = $this->getOnepage()->getCheckout();
        if (!$session->getLastSuccessQuoteId()) {
            $this->_redirect('checkout/cart');
            return;
        }

        $lastQuoteId = $session->getLastQuoteId();
        $lastOrderId = $session->getLastOrderId();
        $lastRecurringProfiles = $session->getLastRecurringProfileIds();
        if (!$lastQuoteId || (!$lastOrderId && empty($lastRecurringProfiles))) {
            $this->_redirect('checkout/cart');
            return;
        }

        $session->clear();
        */
        $this->loadLayout();
        $this->_initLayoutMessages('checkout/session');
        Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId)));
        $this->renderLayout();
    }

Hope Je ne suis pas trop d'auto-promotion, mais je créé une extension gratuite qui peut être installé rapidement dans Magento, et vous permet d'avoir un aperçu du succès page de commande pour toute commande - simplement en accédant à une URL: http://www.yireo.com/software/magento-extensions/checkout- testeur

Je pense qu'il est préférable de faire un commentaire session- $> clear (); et ajouter des produits manuellement, qui ont travaillé pour moi, mais toute l'action commentant les erreurs de syntaxe m'a donné.

Pour Magento 2:

Si vous voulez style ou personnaliser en page succès après la page de succès de commande redirige vers la page de panier.

solution est maintenant ici:

Aller à vendor/magento/module-checkout/Controller/Onepage  Fichier ouvert Success.php.

Dans ce fichier, vous voyez ci-dessous le code

 if (!$this->_objectManager->get('Magento\Checkout\Model\Session\SuccessValidator')->isValid()) {
     return $this->resultRedirectFactory->create()->setPath('checkout/cart');
 }

Juste un commentaire sur ce code et votre problème est résolu. Après commentaire cela vous ne redirige pas à la page de panier.

Au lieu d'envoyer des e-mails du développement local / copie que vous pouvez vider le contenu de l'e-mail dans un fichier et puis juste voir localement, ce qui à mon avis sera vraiment pratique. Voilà comment cela peut être acheived. D'abord tous les e-mails sont envoyés à partir

Mage_Core_Model_Email_Template::send($email, $name = null, array $variables = array())

Constater que, et ajoutez les lignes suivantes.

    $this->setUseAbsoluteLinks(true);
    $text = $this->getProcessedTemplate($variables, true);

    if($this->isPlain()) {
        $mail->setBodyText($text);
    } else {
        $mail->setBodyHTML($text);
    }
    // Added Code //
    $filePath = Mage::getBaseDir() .  DS . 'email.html';
    Mage::log($filePath);
    file_put_contents($filePath, $text);
    // Added Code Ends //

    $mail->setSubject('=?utf-8?B?' . base64_encode($this->getProcessedTemplateSubject($variables)) . '?=');
    $mail->setFrom($this->getSenderEmail(), $this->getSenderName());

Après cela, après avoir créé toute commande un email.html sera créé dans le document racine Magento et vous pouvez ouvrir que dans le navigateur pour voir la sortie.

Ensuite, pour envoyer / re-envoyer des e-mails de commande, vous pouvez simplement connecter admin et pour chaque commande, il est bouton Envoyer qui déclenchera ce script et vous pouvez voir le modèle récemment changé par écrit dans le même fichier. Je pense que c'est l'un des meilleurs moyen de voir l'ordre ou tout autre e-mails.

S'il vous plaît noter pour supprimer le code ajouté lorsque vous avez terminé.

Vous devez le code de mise à jour:

/app/code/core/Mage/Checkout/controllers/OnepageController.php

fonction Mise à jour:

public function successAction()
{
    $session = $this->getOnepage()->getCheckout();
    if (!$session->getLastSuccessQuoteId()) {
        $this->_redirect('checkout/cart');
        return;
    }

    $lastQuoteId = $session->getLastQuoteId();
    $lastOrderId = $session->getLastOrderId();
    $lastRecurringProfiles = $session->getLastRecurringProfileIds();
    if (!$lastQuoteId || (!$lastOrderId && empty($lastRecurringProfiles))) {
        $this->_redirect('checkout/cart');
        return;
    }

    //$session->clear();

    $this->loadLayout();
    $this->_initLayoutMessages('checkout/session');
    Mage::dispatchEvent('checkout_onepage_controller_success_action', array('order_ids' => array($lastOrderId)));
    $this->renderLayout();
}

Il suffit de commentaire:

//$session->clear();

Magento 2

Comme une autre note de réponse, vous pouvez commenter la redirection dans Magento\Checkout\Controller\Onepage\Success::execute et forcer la page de succès de la caisse à la charge. Mais quand le bloc, Magento\Checkout\Block\Onepage\Success, charge pas de données de commande seront présents parce que Magento\Checkout\Model\Session::getLastRealOrder ne reviendra pas un ordre. Un meilleur choix serait un après intercepteur sur la classe du contrôleur est d'exécuter la méthode, vous pouvez définir une valeur pour lastRealOrderId lors de la session de la caisse.

Cette approche fournit aussi l'occasion de distribuer l'événement checkout_onepage_controller_success_action avec ordre de votre choix. L'événement déclenche les observateurs Magento\GoogleAdwords\Observer\SetConversionValueObserver et Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver avec vos données de test.

Ce qui suit est un module assez basique créant l'intercepteur décrit ci-dessus et permet de définir l'ordre en ajoutant un paramètre de requête order avec l'identifiant incrément souhaité à la page de succès URL. Actuellement, elle ne fonctionnera pas la route du succès multishipping. Il peut être téléchargé sur github: https://github.com/pmclain/magento2-successtest

  

app / code / Pmclain / SuccessTest / etc / frontend / di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
  <type name="Magento\Checkout\Controller\Onepage\Success">
    <plugin name="pmclain_successtest_checkout_controller_onepage_success"
            type="Pmclain\SuccessTest\Plugin\Success"
            sortOrder="10" />
  </type>
</config>
  

app / code / Pmclain / SuccessTest / plug-in / Success.php

<?php
namespace Pmclain\SuccessTest\Plugin;

use Magento\Framework\Event\ManagerInterface;
use Magento\Framework\View\Result\PageFactory;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Store\Model\ScopeInterface;
use Magento\Checkout\Model\Session;
use Magento\Sales\Model\OrderFactory;
use Magento\Sales\Model\Order;

class Success
{
  /** @var ManagerInterface */
  protected $_eventManager;

  /** @var PageFactory */
  protected $_resultPageFactory;

  /** @var ScopeConfigInterface */
  protected $_scopeConfig;

  /** @var OrderFactory */
  protected $_orderFactory;

  /** @var Order */
  protected $_order;

  /** @var Session */
  protected $_checkoutSession;

  /**
   * Success constructor.
   * @param ManagerInterface $eventManager
   * @param PageFactory $resultPageFactory
   * @param ScopeConfigInterface $scopeConfig
   * @param OrderFactory $orderFactory
   * @param Session $session
   */
  public function __construct(
    ManagerInterface $eventManager,
    PageFactory $resultPageFactory,
    ScopeConfigInterface $scopeConfig,
    OrderFactory $orderFactory,
    Session $session
  ) {
    $this->_eventManager = $eventManager;
    $this->_resultPageFactory = $resultPageFactory;
    $this->_scopeConfig = $scopeConfig;
    $this->_orderFactory = $orderFactory;
    $this->_checkoutSession = $session;
  }

  /**
   * @param \Magento\Checkout\Controller\Onepage\Success $subject
   * @param $result
   * @return \Magento\Framework\View\Result\Page
   */
  public function afterExecute(\Magento\Checkout\Controller\Onepage\Success $subject, $result)
  {
    if (!$this->_isEnabled()) {
      return $result;
    }

    $order = $this->_getTestOrder($subject->getRequest()->getParam('order'));

    if (!$order->getId()) {
      return $result;
    }

    $this->_checkoutSession->setLastRealOrderId($order->getIncrementId());

    $resultPage = $this->_resultPageFactory->create();

    $this->_eventManager->dispatch(
      'checkout_onepage_controller_success_action',
      ['order_ids' => [$order->getId()]]
    );

    return $resultPage;
  }

  /**
   * @return bool
   */
  protected function _isEnabled()
  {
    if ($this->_scopeConfig->getValue('dev/debug/success_test', ScopeInterface::SCOPE_STORE)) {
      return true;
    }

    return false;
  }

  /**
   * @param $incrementId string|bool
   * @return Order
   */
  protected function _getTestOrder($incrementId)
  {
    /** @var Order $order */
    $order = $this->_orderFactory->create();

    $order->loadByIncrementId($incrementId);

    return $order;
  }
}
  

app / code / Pmclain / SuccessTest / etc / adminhtml / system.xml   ci-dessous ajoute des options de panneau d'administration pour activer / désactiver l'intercepteur.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
  <system>
    <section id="dev">
      <group id="debug">
        <field id="success_test" translate="label" type="select" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="0">
          <label>Enable Checkout Success Page Testing</label>
          <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
        </field>
      </group>
    </section>
  </system>
</config>
  

app / code / Pmclain / SuccessTest / etc / config.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
  <default>
    <dev>
      <debug>
        <success_test>0</success_test>
      </debug>
    </dev>
  </default>
</config>
  

app / code / Pmclain / SuccessTest / etc / module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
  <module name="Pmclain_SuccessTest" setup_version="0.0.1">
    <sequence>
      <module name="Magento_Backend" />
      <module name="Magento_Checkout" />
    </sequence>
  </module>
</config>
  

app / code / Pmclain / SuccessTest / resgistration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
  \Magento\Framework\Component\ComponentRegistrar::MODULE,
  'Pmclain_SuccessTest',
  __DIR__
);
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top