Domanda

Se ricarichiamo la pagina checkout/onepage/success, io sono diretto verso il carro.

Così, quando il debug o styling pagina successo ordine, devo sempre fare un nuovo ordine.

Come posso fare questo in modo più efficiente?

È stato utile?

Soluzione

Puoi temporaneamente hackerare il core, mentre si sta sviluppando:

In /app/code/core/Mage/Checkout/controllers/OnepageController.php Modifica successAction().

come commento la riga $session->clear();. Ora è possibile effettuare un ordine e aggiornare la pagina tutte le volte che ti piace.

Se non vuoi nemmeno fare un ordine su ogni browser, ad esempio quando si fa il test cross-browser, è anche possibile semplicemente inizializzare la sessione ogni volta.

Scegliere un ID ordine e un ID di citazione dal sales_flat_order tavolo (campi: entity_id e quote_id). Ad esempio attraverso:

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

Poi cambia l'inizio della funzione come segue:

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

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

e replaceINSERT_.... con gli ID.

Ora si può sempre chiamare checkout/onepage/success

Mentre si è in esso, si potrebbe desiderare di provare la failureAction() pure, in

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

L'azione modificato sarebbe simile a questa

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();
    }

Ora si può sempre chiamare checkout/onepage/failure

Altri suggerimenti

È necessario modificare il successAction () in

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

azione Modificato vorrebbe questo

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();
    }

Spero di non essere troppo auto-promozione, ma ho creato un estensione gratuita che può essere rapidamente installato in Magento, e permette di visualizzare in anteprima il successo-pagina d'ordine per ogni ordine - semplicemente accedendo a un URL: http://www.yireo.com/software/magento-extensions/checkout- tester

Credo che sia meglio solo commentare $ session-> clear (); e aggiungere manualmente i prodotti, che ha lavorato per me, ma commentando l'intera azione mi ha dato la sintassi errori.

Per Magento 2:

Se volete stile o personalizzare in pagina dopo pagina il successo successo ordine redirect alla pagina del carrello.

Ora la soluzione è qui:

Vai a vendor/magento/module-checkout/Controller/Onepage aperto Success.php file.

In questo file, che vedete qui sotto Codice

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

Proprio commento su questo codice e il problema è risolto. Dopo commento questo non si reindirizzare alla pagina del carrello.

Invece di inviare messaggi di posta elettronica dallo sviluppo / local copia è possibile scaricare il contenuto della posta elettronica in un file e poi basta vedere a livello locale, che a mio parere sarà veramente utile. Ecco come che può essere acheived. In primo luogo tutte le email vengono inviate da

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

Trova questo, e aggiungere le seguenti righe.

    $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());

Dopo questo dopo aver creato un ordine di un email.html verrà creato nella radice del documento Magento e si può aprire che nel browser per vedere l'uscita.

Quindi, per inviare / re-inviare alcuna email di ordine si può fare il login admin e per ogni ordine c'è il pulsante Invia e-mail che attiverà questo script e si può vedere il modello appena cambiato scritta nello stesso file. Credo che questo sia uno dei modi migliori per vedere ordine o eventuali altre email.

Si prega di nota per rimuovere il codice aggiunto quando si è fatto.

È necessario il codice di aggiornamento:

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

funzione di aggiornamento:

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();
}

Proprio commento:

//$session->clear();

Magento 2

Come ulteriore nota di risposta, è possibile commentare la reindirizzamento in Magento\Checkout\Controller\Onepage\Success::execute e forzare la pagina di successo di checkout a carico. Ma quando i blocchi, Magento\Checkout\Block\Onepage\Success, carichi dati dell'ordine sarà presente perché Magento\Checkout\Model\Session::getLastRealOrder non restituirà un ordine. A opzioni migliori sarebbe un dopo intercettore sulla classe controllore di metodo, in cui è possibile impostare un valore per lastRealOrderId nella sessione di cassa eseguire.

Questo approccio fornisce anche la possibilità di inviare l'evento checkout_onepage_controller_success_action con l'ordine desiderato. L'evento attiverà il Magento\GoogleAdwords\Observer\SetConversionValueObserver osservatori e Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver con i tuoi dati di test.

Il seguente è un modulo piuttosto semplice creare l'intercettatore sopra descritto e permette di impostare l'ordine aggiungendo un parametro di ricerca order con l'id incremento desiderato alla pagina di successo URL. Attualmente non funziona il percorso di successo multishipping. Può essere scaricato su 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 / Plugin / 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 Qui di seguito aggiunge opzioni del pannello di amministrazione per attivare / disattivare l'intercettore.

<?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__
);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top