অর্ডার সাফল্যের পৃষ্ঠাটি কীভাবে পরীক্ষা বা স্টাইল করা যায়?


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
আমি জিসি রিটসমা'র ইরেও চেকআউট পরীক্ষক এবং এই পদ্ধতি উভয়ই পরীক্ষা করে দেখেছি। মডিউলটি সবচেয়ে সহজ উপায় হ'ল, আমি এটি আমাদের থিম এবং অর্থপ্রদানের মডিউলের সাথে 100% সামঞ্জস্যপূর্ণ বলে মনে করি না, এর ফলে মূল সাফল্যের পৃষ্ঠার চেয়ে আলাদা স্টাইলিং হয়। মূলটি সংশোধন করার সময় এই পদ্ধতিটি একটি কবজির মতো কাজ করেছে। দ্রষ্টব্য: উত্তরে আপনার সম্পাদনা করতে হবে এমন ফাইলটি অনুপস্থিত যা /app/code/core/Mage/Checkout/controllers/OnepageController.php
অটোনেট

এম 2 তে একই কাজ করতে চান এমন লোকদের জন্য আপনি 19 থেকে 22 ইন লাইনগুলিতে মন্তব্য করতে পারেন\vendor\magento\module-checkout\Controller\Onepage\Success.php
ডায়নোমাইট

24

আপনার সফলতাঅ্যাকশন () এর মধ্যে পরিবর্তন করতে হবে

/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
আমি $ সেশন-> সাফ () সাফ মন্তব্য করেই সাফল্য পেয়েছি; আমি যে জিনিসটি হারিয়েছি কেবল তা হ'ল কোনও নোটিশ / বার্তা যেমন টিবিটি / রিওয়ার্ডস নোটিশ / বার্তাগুলি পর্যবেক্ষকের মাধ্যমে যুক্ত করা হয়েছে is একটি ওভাররাইড মডিউলে কোড রেখে যাওয়া, যা .gitignored তাই কখনই মোতায়েন করা হয় না।
ব্যারি কার্লিয়ন 9

19

আশা করি আমি খুব স্ব-প্রচারমূলক নই, তবে আমি একটি নিখরচায় এক্সটেনশন তৈরি করেছি যা দ্রুত ম্যাজেন্টোতে ইনস্টল করা যেতে পারে এবং আপনাকে কোনও অর্ডারের জন্য অর্ডার সাফল্য পৃষ্ঠাটি প্রাকদর্শন করতে দেয় - কেবলমাত্র একটি URL অ্যাক্সেস করে: http: // www। yireo.com/software/magento-extensions/checkout-tester


4

আমি মনে করি কেবলমাত্র comment সেশন-> ক্লিয়ার () মন্তব্য করা ভাল; এবং ম্যানুয়ালি পণ্য যুক্ত করুন, এটি আমার পক্ষে কাজ করেছে তবে পুরো ক্রিয়াটির মন্তব্য করা আমাকে সিনট্যাক্স ত্রুটি দিয়েছে।


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

এর পরে আপনি কোনও অর্ডার তৈরির পরে ম্যাজেন্টো ডকুমেন্ট রুটে একটি ইমেল.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আপনার পরীক্ষার ডেটা দিয়ে ট্রিগার করবে ।

নিম্নলিখিতটি বর্ণিত ইন্টারসেপ্টরটি তৈরি করা মোটামুটি একটি মৌলিক মডিউল orderযা সাফল্য পৃষ্ঠা url এ কাঙ্ক্ষিত বর্ধিত আইডি সহ একটি কোয়েরি প্যারামিটার যুক্ত করে অর্ডার সেট করতে দেয় । এটি বর্তমানে মাল্টিশিপিং সাফল্যের পথে কাজ করবে না। এটি গিথুব এ ডাউনলোড করা যায়: 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;
  }
}

অ্যাপ্লিকেশন / কোড / পিএমক্লেইন / সাফল্য টেস্ট / ইত্যাদি / অ্যাডমিনটিচটিএমএল / সিস্টেম.এক্সএমএল নীচে ইন্টারসেপ্টর সক্ষম / অক্ষম করতে অ্যাডমিন প্যানেল বিকল্পগুলি যুক্ত করেছে।

<?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__
);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.