ऑर्डर सक्सेस पेज को कैसे टेस्ट या स्टाइल करें?


114

यदि मैं checkout/onepage/successपृष्ठ को पुनः लोड करता हूं, तो मुझे कार्ट में निर्देशित किया जाता है।

इसलिए, ऑर्डर सक्सेस पेज को डिबगिंग या स्टाइल करते समय, मुझे हमेशा एक नया ऑर्डर करना पड़ता है।

मैं इसे और अधिक कुशलता से कैसे कर सकता हूं?


2
इस प्रश्न ने विभिन्न उत्तर बनाए जो सभी "जीत" से भरे हुए हैं। यहां आने वाले किसी भी व्यक्ति को सभी उत्तरों का उपयोग करना चाहिए।
क्रिस के

जवाबों:


149

जब आप विकास कर रहे हों तो आप अस्थायी रूप से कोर हैक कर सकते हैं:

में /app/code/core/Mage/Checkout/controllers/OnepageController.phpसंपादित करें successAction()

टिप्पणी बाहर लाइन $session->clear();। अब आप एक ऑर्डर कर सकते हैं और पेज को जितनी बार चाहें उतनी बार रिफ्रेश कर सकते हैं।

यदि आप भी प्रत्येक ब्राउज़र पर एक ऑर्डर नहीं करना चाहते हैं, उदाहरण के लिए जब क्रॉस-ब्राउज़र परीक्षण कर रहे हैं, तो आप हर बार केवल सत्र को प्रारंभ कर सकते हैं।

तालिका sales_flat_order(फ़ील्ड: entity_idऔर quote_id) से एक ऑर्डर आईडी और एक उद्धरण आईडी चुनें । उदाहरण के लिए:

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

फिर फ़ंक्शन की शुरुआत को निम्नानुसार बदलें:

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

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

और INSERT_....आईडी के साथ बदलें ।

अब आप हमेशा कॉल कर सकते हैं checkout/onepage/success

जब आप इस पर होते हैं, तो आप के failureAction()रूप में अच्छी तरह से, में परीक्षण करना चाहते हो सकता है

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

संशोधित कार्रवाई इस तरह दिखाई देगी

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

अब आप हमेशा कॉल कर सकते हैं checkout/onepage/failure


आपकी इस समस्या को ठीक करता है? कृपया इसे समाधान के रूप में चिह्नित करें।
फेबियन ब्लेसश्मिड

3
मैंने Jisse Reitsma के Yireo Checkout Tester और इस विधि दोनों का परीक्षण किया है। जबकि मॉड्यूल सबसे आसान तरीका है, मैंने पाया कि यह हमारे विषय और भुगतान मॉड्यूल के साथ 100% संगत नहीं है, जिसके परिणामस्वरूप मूल सक्सेस पेज की तुलना में एक अलग स्टाइल है। कोर को संशोधित करने की आवश्यकता होने पर इस पद्धति ने हालांकि एक आकर्षण की तरह काम किया। नोट: इसका उत्तर उस फ़ाइल को याद कर रहा है जिसे आपको संपादित करने की आवश्यकता है, जो /app/code/core/Mage/Checkout/controllers/OnepageController.php
Ottonet

उन लोगों के लिए जो एम 2 में भी ऐसा ही करना चाहते हैं, आप 19 से 22 की पंक्तियों में टिप्पणी कर सकते हैं\vendor\magento\module-checkout\Controller\Onepage\Success.php
डायनामाइट

24

आपको successAction () को संशोधित करना होगा

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

संशोधित कार्रवाई इसे पसंद करेगी

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

3
लेकिन तब $lastOrderIdपरिभाषित नहीं किया गया है जो एक नोटिस पर ले जाएगा और टेम्पलेट में साइड इफेक्ट हो सकता है।
एलेक्स

1
मैंने $ सत्र की टिप्पणी करके सफलता प्राप्त की है-> स्पष्ट (); केवल एक चीज जो मैं खोता हूं वह है किसी भी नोटिस / संदेश को जोड़ा गया जैसे कि टीबीटी / रिवार्ड्स नोटिस / संदेश पर्यवेक्षक के माध्यम से जोड़े गए। कोड को ओवरराइड मॉड्यूल में छोड़ना, जो कि .ignignored है इसलिए कभी भी परिनियोजित नहीं किया जाता है।
बैरी कार्लाइन

19

आशा है कि मैं बहुत अधिक आत्म-प्रचारक नहीं हूँ, लेकिन मैंने एक मुफ्त एक्सटेंशन बनाया है जिसे जल्दी से Magento में स्थापित किया जा सकता है, और आपको किसी भी आदेश के लिए आदेश सफलता-पृष्ठ का पूर्वावलोकन करने की अनुमति देता है - बस एक URL: http: // www का उपयोग करके। yireo.com/software/magento-extensions/checkout-tester


5

Magento 2 के लिए:

यदि आप ऑर्डर पृष्ठ पर कार्ट पृष्ठ पर पुनर्निर्देशित करने के बाद सफलता पृष्ठ में शैली बनाना या अनुकूलित करना चाहते हैं।

अब समाधान यहाँ है:

फ़ाइल vendor/magento/module-checkout/Controller/Onepage खोलने के लिए जाओ Success.php

इस फ़ाइल में, आप नीचे कोड देखें

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

बस इस कोड पर टिप्पणी करें और आपकी समस्या हल हो गई है। इस टिप्पणी के बाद आप कार्ट पेज पर रीडायरेक्ट नहीं करते हैं।


4

मुझे लगता है कि $ सत्र पर टिप्पणी करना बेहतर है-> स्पष्ट (); और उत्पादों को मैन्युअल रूप से जोड़ें, जो मेरे लिए काम करते हैं लेकिन पूरी कार्रवाई की टिप्पणी करने से मुझे सिंटैक्स त्रुटियां हुईं।


3

स्थानीय / विकास प्रति से ईमेल भेजने के बजाय आप ईमेल की सामग्री को एक फ़ाइल में डंप कर सकते हैं और फिर बस स्थानीय रूप से देख सकते हैं, जो मेरी राय में वास्तव में आसान होगा। यहां बताया गया है कि किस तरह से दर्द को कम किया जा सकता है। सबसे पहले सभी ईमेल से भेजे जाते हैं

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

वह ढूंढें, और निम्न पंक्तियाँ जोड़ें।

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

इसके बाद जब आप कोई आदेश बनाते हैं तो एक ईमेल। Html को मैगेंटो दस्तावेज़ रूट में बनाया जाएगा और आप उस ब्राउज़र को आउटपुट देखने के लिए खोल सकते हैं।

अगला, किसी भी ऑर्डर ईमेल को भेजने / फिर से भेजने के लिए आप बस व्यवस्थापक में लॉग इन कर सकते हैं और प्रत्येक आदेश के लिए Send Email बटन है जो इस स्क्रिप्ट को ट्रिगर करेगा और आप उसी फ़ाइल में लिखे गए नए परिवर्तित टेम्पलेट को देख सकते हैं। मुझे लगता है कि यह आदेश या किसी अन्य ईमेल को देखने का सबसे अच्छा तरीका है।

जब आप पूरा कर लें तो जोड़ा गया कोड निकालने के लिए कृपया ध्यान दें।


1

आपको कोड अपडेट करना होगा:

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

अद्यतन समारोह:

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

बस टिप्पणी करें:

//$session->clear();

1

Magento 2

एक अन्य उत्तर नोट के रूप में, आप रीडायरेक्ट में टिप्पणी कर सकते हैं Magento\Checkout\Controller\Onepage\Success::executeऔर चेकआउट सफलता पृष्ठ को लोड करने के लिए मजबूर कर सकते हैं । लेकिन जब ब्लॉक, Magento\Checkout\Block\Onepage\Successलोड करता है तो कोई ऑर्डर डेटा मौजूद Magento\Checkout\Model\Session::getLastRealOrderनहीं होगा क्योंकि ऑर्डर वापस नहीं होगा। एक बेहतर विकल्प नियंत्रक वर्ग के निष्पादन विधि पर इंटरसेप्टर के बाद होगा, जहां आप lastRealOrderIdचेकआउट सत्र के लिए एक मूल्य निर्धारित कर सकते हैं ।

यह दृष्टिकोण checkout_onepage_controller_success_actionआपके वांछित आदेश के साथ घटना को भेजने का अवसर भी प्रदान करता है । घटना पर्यवेक्षकों को ट्रिगर करेगी Magento\GoogleAdwords\Observer\SetConversionValueObserverऔर Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserverआपके परीक्षण डेटा के साथ।

निम्नलिखित ऊपर वर्णित इंटरसेप्टर बनाने वाला एक काफी बुनियादी मॉड्यूल है और orderसफलता पृष्ठ url के लिए वांछित वेतन वृद्धि आईडी के साथ एक क्वेरी पैरामीटर जोड़कर आदेश सेट करने की अनुमति देता है । यह वर्तमान में मल्टीशिपिंग सक्सेस रूट पर काम नहीं करेगा। इसे github: https://github.com/pmclain/magento2-successtest पर डाउनलोड किया जा सकता है

एप्लिकेशन / कोड / Pmclain / SuccessTest / etc / दृश्यपटल / 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>

एप्लिकेशन / कोड / Pmclain / SuccessTest / प्लगइन / 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;
  }
}

एप्लिकेशन / कोड / Pmclain / SuccessTest / etc / adminhtml / system.xml नीचे इंटरसेप्टर को सक्षम / अक्षम करने के लिए व्यवस्थापक पैनल विकल्प जोड़ता है।

<?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>

एप्लिकेशन / कोड / 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>

एप्लिकेशन / कोड / 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>

एप्लिकेशन / कोड / Pmclain / SuccessTest / resgistration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
  \Magento\Framework\Component\ComponentRegistrar::MODULE,
  'Pmclain_SuccessTest',
  __DIR__
);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.