আমি যদি checkout/onepage/success
পৃষ্ঠাটি পুনরায় লোড করি তবে আমাকে কার্টের দিকে পরিচালিত করা হবে।
সুতরাং, অর্ডার সাফল্য পৃষ্ঠাটি ডিবাগ করা বা স্টাইল করার সময়, আমাকে সর্বদা একটি নতুন ক্রম করতে হবে।
আমি কীভাবে আরও দক্ষতার সাথে এটি করতে পারি?
আমি যদি checkout/onepage/success
পৃষ্ঠাটি পুনরায় লোড করি তবে আমাকে কার্টের দিকে পরিচালিত করা হবে।
সুতরাং, অর্ডার সাফল্য পৃষ্ঠাটি ডিবাগ করা বা স্টাইল করার সময়, আমাকে সর্বদা একটি নতুন ক্রম করতে হবে।
আমি কীভাবে আরও দক্ষতার সাথে এটি করতে পারি?
উত্তর:
আপনি বিকাশকালে আপনি অস্থায়ীভাবে কোরটি হ্যাক করতে পারেন :
ইন /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
\vendor\magento\module-checkout\Controller\Onepage\Success.php
আপনার সফলতাঅ্যাকশন () এর মধ্যে পরিবর্তন করতে হবে
/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();
}
$lastOrderId
সংজ্ঞায়িত করা হয় না যা কোন নোটিশ প্রকাশ করবে এবং টেমপ্লেটে পার্শ্ব প্রতিক্রিয়া হতে পারে।
আশা করি আমি খুব স্ব-প্রচারমূলক নই, তবে আমি একটি নিখরচায় এক্সটেনশন তৈরি করেছি যা দ্রুত ম্যাজেন্টোতে ইনস্টল করা যেতে পারে এবং আপনাকে কোনও অর্ডারের জন্য অর্ডার সাফল্য পৃষ্ঠাটি প্রাকদর্শন করতে দেয় - কেবলমাত্র একটি URL অ্যাক্সেস করে: http: // www। yireo.com/software/magento-extensions/checkout-tester
আমি মনে করি কেবলমাত্র comment সেশন-> ক্লিয়ার () মন্তব্য করা ভাল; এবং ম্যানুয়ালি পণ্য যুক্ত করুন, এটি আমার পক্ষে কাজ করেছে তবে পুরো ক্রিয়াটির মন্তব্য করা আমাকে সিনট্যাক্স ত্রুটি দিয়েছে।
ম্যাজেন্টো 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');
}
এই কোডটিতে কেবল মন্তব্য করুন এবং আপনার সমস্যার সমাধান হয়ে গেছে। এটি মন্তব্য করার পরে আপনি কার্ট পৃষ্ঠায় পুনর্নির্দেশ করবেন না।
স্থানীয় / বিকাশের অনুলিপি থেকে ইমেল প্রেরণের পরিবর্তে আপনি কোনও ফাইলে ইমেলের বিষয়বস্তু ফেলে দিতে পারেন এবং কেবল স্থানীয়ভাবে দেখতে পারেন, যা আমার মতে সত্যই কার্যকর হবে। কীভাবে এটি অর্জন করা যায় তা এখানে। প্রথমে সমস্ত ইমেলগুলি পাঠানো হয়
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 তৈরি হবে এবং আউটপুটটি দেখতে ব্রাউজারে এটি খুলতে পারেন।
এরপরে, কোনও অর্ডার ইমেল প্রেরণ / পুনঃ-প্রেরণ করতে আপনি কেবল অ্যাডমিনে লগইন করতে পারবেন এবং প্রতিটি আদেশের জন্য ইমেল প্রেরণ বাটন রয়েছে যা এই স্ক্রিপ্টটিকে ট্রিগার করবে এবং আপনি একই ফাইলটিতে নতুনভাবে পরিবর্তিত টেম্পলেটটি দেখতে পাবেন। আমি মনে করি এটি অর্ডার বা অন্য কোনও ইমেল দেখার অন্যতম সেরা উপায়।
আপনার করা হয়ে গেলে যুক্ত কোডটি সরিয়ে ফেলতে দয়া করে নোট করুন।
আপনাকে কোড আপডেট করতে হবে:
/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();
অন্য উত্তরের নোট হিসাবে, আপনি পুনর্নির্দেশটি মন্তব্য করতে পারেন 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__
);