วิธีทดสอบหรือจัดรูปแบบหน้าคำสั่งซื้อที่ประสบความสำเร็จ


114

หากฉันโหลดcheckout/onepage/successหน้าซ้ำฉันจะถูกนำไปที่รถเข็น

ดังนั้นเมื่อทำการดีบั๊กหรือใส่สไตล์หน้าคำสั่งซื้อฉันจะต้องทำคำสั่งซื้อใหม่เสมอ

ฉันจะทำสิ่งนี้ได้อย่างมีประสิทธิภาพมากขึ้นได้อย่างไร


2
คำถามนี้สร้างคำตอบที่หลากหลายซึ่งเต็มไปด้วย "ชนะ" ผู้เยี่ยมชมที่นี่ควรอ่านคำตอบทั้งหมด
Chris K

คำตอบ:


149

คุณสามารถแฮ็คแกนชั่วคราวในขณะที่คุณกำลังพัฒนา:

ในการแก้ไข/app/code/core/Mage/Checkout/controllers/OnepageController.phpsuccessAction()

$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


แก้ไขปัญหาของคุณหรือไม่ โปรดทำเครื่องหมายว่าเป็นวิธีแก้ปัญหา
Fabian Blechschmidt

3
ฉันได้ทดสอบทั้งเครื่องทดสอบการเช็คเอาต์ Yireo ของ Jisse Reitsma และวิธีนี้ ในขณะที่โมดูลเป็นวิธีที่ง่ายที่สุดฉันพบว่าไม่สามารถใช้งานร่วมกับธีมและโมดูลการชำระเงินของเราได้ 100% ทำให้มีสไตล์ที่แตกต่างจากหน้าเว็บดั้งเดิม ในขณะที่ต้องปรับเปลี่ยนคอร์วิธีการนี้ แต่ทำงานเหมือนมีเสน่ห์ หมายเหตุ: คำตอบไม่มีไฟล์ที่คุณต้องแก้ไขซึ่งเป็น /app/code/core/Mage/Checkout/controllers/OnepageController.php
Ottonet

สำหรับคนที่ต้องการทำสิ่งเดียวกันใน M2 คุณสามารถแสดงความคิดเห็นบรรทัดที่ 19 ถึง 22 ใน\vendor\magento\module-checkout\Controller\Onepage\Success.php
Dynomite

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
ฉันประสบความสำเร็จเพียงแค่แสดงความคิดเห็น $ session-> clear (); สิ่งเดียวที่ฉันทำคือการเพิ่มคำประกาศ / ข้อความเช่น TBT / Rewards Notices / Messages ที่เพิ่มเข้ามาผ่านผู้สังเกตการณ์ ออกจากรหัสในโมดูลการแทนที่ซึ่งเป็น. gitignored จึงไม่เคยถูกปรับใช้
Barry Carlyon

19

หวังว่าฉันจะไม่ส่งเสริมตัวเองมากเกินไป แต่ฉันสร้างส่วนขยายฟรีที่สามารถติดตั้งได้อย่างรวดเร็วใน Magento และช่วยให้คุณสามารถดูตัวอย่างหน้าสั่งซื้อที่ประสบความสำเร็จสำหรับการสั่งซื้อใด ๆ - เพียงแค่เข้าไปที่ URL: http: // www yireo.com/software/magento-extensions/checkout-tester


4

ฉันคิดว่ามันจะดีกว่าที่จะแสดงความคิดเห็น $ session-> clear (); และเพิ่มผลิตภัณฑ์ด้วยตนเองที่ใช้งานได้สำหรับฉัน แต่การแสดงความคิดเห็นการกระทำทั้งหมดทำให้ฉันมีข้อผิดพลาดทางไวยากรณ์


4

สำหรับวีโอไอพี 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');
 }

เพียงแสดงความคิดเห็นในรหัสนี้และปัญหาของคุณจะได้รับการแก้ไข หลังจากแสดงความคิดเห็นคุณจะไม่เปลี่ยนเส้นทางไปยังหน้ารถเข็น


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

หลังจากนี้หลังจากที่คุณสร้างคำสั่งซื้อใด ๆ email.html จะถูกสร้างขึ้นในรากของเอกสารวีโอไอพีและคุณสามารถเปิดในเบราว์เซอร์เพื่อดูผลลัพธ์

ถัดไปเพื่อส่ง / ส่งอีเมลคำสั่งซื้อใด ๆ คุณเพียงแค่เข้าสู่ระบบผู้ดูแลระบบและสำหรับการสั่งซื้อแต่ละครั้งมีปุ่มส่งอีเมลซึ่งจะเรียกสคริปต์นี้และคุณสามารถเห็นแม่แบบการเปลี่ยนแปลงใหม่ที่เขียนในไฟล์เดียวกัน ฉันคิดว่านี่เป็นวิธีที่ดีที่สุดในการดูคำสั่งซื้อหรืออีเมลอื่น ๆ

โปรดทราบว่าจะลบรหัสเพิ่มเมื่อคุณทำเสร็จแล้ว


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

วีโอไอพี 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ข้อมูลการทดสอบของคุณ

ต่อไปนี้เป็นโมดูลพื้นฐานที่ค่อนข้างสร้าง interceptor ที่อธิบายไว้ข้างต้นและอนุญาตให้ตั้งค่าคำสั่งโดยผนวกorderพารามิเตอร์การสืบค้นที่มีรหัสการเพิ่มที่ต้องการไปยัง URL หน้าความสำเร็จ ขณะนี้ยังไม่สามารถใช้เส้นทางความสำเร็จหลายขั้นตอนได้ สามารถดาวน์โหลดได้ที่ github: https://github.com/pmclain/magento2-successtest

app / รหัส / 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>

app / รหัส / 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;
  }
}

app / code / Pmclain / SuccessTest / etc / adminhtml / system.xml ด้านล่างเพิ่มตัวเลือกแผงควบคุมสำหรับผู้ดูแลระบบเพื่อเปิด / ปิดการใช้งาน interceptor

<?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 / รหัส / 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 / รหัส / 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 / รหัส / Pmclain / SuccessTest / resgistration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
  \Magento\Framework\Component\ComponentRegistrar::MODULE,
  'Pmclain_SuccessTest',
  __DIR__
);
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.