I've recently created a customer attribute for my Magento ver. 2.3.5-p1 instance using the following blog:
https://www.blog.sashas.org/magento-2-1-3-how-to-make-customer-attribute-update.html
The module has worked properly and created a new customer attribute with the i.d. "trade_ordernumber".
I would now like to add this attribute to the checkout success page but I'm not sure how to do this, what I was thinking was something like the below:
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ ?> <?php /** @var $block \Magento\Checkout\Block\Onepage\Success */ ?> <div class="checkout-success"> <?php if ($block->getOrderId()) :?> <?php if ($block->getCanViewOrder()) :?> <h1><?= $block->escapeHtml(__('Your order # is: <span>%1</span>.', $block->getOrderId()), ['span']) ?></h1> <p><?= $block->escapeHtml(__('Your order number is: %1.', sprintf('<a href="%s" class="order-number"><strong>%s</strong></a>', $block->escapeUrl($block->getViewOrderUrl()), $block->getOrderId())), ['a', 'strong']) ?></p> <?php else :?> <p><?= $block->escapeHtml(__('Your order # is: <span>%1</span>.', $block->getOrderId()), ['span']) ?></p> <?php endif;?> <p><?= $block->escapeHtml(__('We\'ll email you an order confirmation with details and tracking info.')) ?></p> <?php endif;?> <?= $block->getAdditionalInfoHtml() ?> <div class="actions-toolbar"> <div class="primary"> <a class="action primary continue" href="<?= $block->escapeUrl($block->getContinueUrl()) ?>"><span><?= $block->escapeHtml(__('Continue Shopping')) ?></span></a> </div> </div> </div> <?php $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $storeManager = $objectManager->get('\Magento\Store\Model\StoreManagerInterface'); $storeID = $storeManager->getStore()->getStoreId(); $storeName = $storeManager->getStore()->getName(); ?> <?php $customerSession = $objectManager->get('Magento\Customer\Model\Session'); if($customerSession->isLoggedIn()) { echo $customerSession->getAttribute('trade_ordernumber'); } ?>
Unfortunately this does not seem to be displaying the attribute on the success page.
Can anyone tell me what I'm doing wrong?
Thanks
Solved! Go to Solution.
Call helper on ssuccess page
$helper = $this->helper('{Vendor}\{Module}\Helper\Data'); $values = $helper->YourHelperMethod();
Thank you for replying.
I have adapted the code in the files is as follows
registration.php
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'CustomTrade_CallAttribute', __DIR__ );
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="CustomTrade_CallAttribute" > </module> </config>
Data.php
<?php namespace CustomTrade\CallAttribute\Helper; use Magento\Framework\App\Helper\Context; use Magento\Customer\Api\CustomerRepositoryInterface; use Magento\Customer\Model\Session as CustomerSession; use Magento\Framework\App\Helper\AbstractHelper; class Data extends AbstractHelper { protected $customerRepository; public function __construct( Context $context, CustomerRepositoryInterface $customerRepository, CustomerSession $customerSession ) { $this->customerRepository = $customerRepository; $this->customerSession = $customerSession; parent::__construct($context); } public function getOrderNumberValue() { $customerId = $this->customerSession->getCustomer()->getId(); $customer = $this->customerRepository->getById($customerId); return $customer->getCustomAttribute('trade_ordernumber')->getValue(); } }
And I have modified the success.phtml file in the following way
<?php /** * Copyright ? Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ ?> <?php /** @var $block \Magento\Checkout\Block\Onepage\Success */ ?> <div class="checkout-success"> <?php if ($block->getOrderId()) :?> <?php if ($block->getCanViewOrder()) :?> <h1><?= $block->escapeHtml(__('Your order # is: <span>%1</span>.', $block->getOrderId()), ['span']) ?></h1> <p><?= $block->escapeHtml(__('Your order number is: %1.', sprintf('<a href="%s" class="order-number"><strong>%s</strong></a>', $block->escapeUrl($block->getViewOrderUrl()), $block->getOrderId())), ['a', 'strong']) ?></p> <?php else :?> <p><?= $block->escapeHtml(__('Your order # is: <span>%1</span>.', $block->getOrderId()), ['span']) ?></p> <?php endif;?> <p><?= $block->escapeHtml(__('We\'ll email you an order confirmation with details and tracking info.')) ?></p> <?php endif;?> <?= $block->getAdditionalInfoHtml() ?> <div class="actions-toolbar"> <div class="primary"> <a class="action primary continue" href="<?= $block->escapeUrl($block->getContinueUrl()) ?>"><span><?= $block->escapeHtml(__('Continue Shopping')) ?></span></a> </div> </div> </div> <?php $dataHelper = $this->helper('CustomTrade\CallAttribute\Helper\Data');
echo $dataHelper->getOrderNumberValue(); ?>
Hi @pmtrade
Create a custom module VendorName_ModuleName
create a Helper with this module for getting custom customer attribute value with the API
namespace VendorName\ModuleName\Helper; use Magento\Framework\App\Helper\Context; use Magento\Customer\Api\CustomerRepositoryInterface; class Data extends AbstractHelper { protected $customerRepository; public function __construct( Context $context, CustomerRepositoryInterface $customerRepository) { $this->customerRepository = $customerRepository; parent::__construct($context); } public getOrderNumberValue($customerId) { $customer = $this->customerRepository->getById($customerId); return $customer->getCustomAttribute('trade_ordernumber'); } }
Call custom module Helper getOrderNumberValue($customerId) function on checkout success page.
Hello. Thank you for replying. I'm still having a couple of issues. Which I'll outline below.
I have created a new module with the following file structure:
Custom Trade
>CallAttribute
->Helper -> Data.php
->etc -> module.xml
registration.php
The code in the files is as follows
registration.php
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'CustomTrade_CallAttribute', __DIR__ );
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="CustomTrade_CallAttribute" > </module> </config>
Data.php
<?php namespace CustomTrade\CallAttribute\Helper; use Magento\Framework\App\Helper\Context; use Magento\Customer\Api\CustomerRepositoryInterface; class Data extends AbstractHelper { protected $customerRepository; public function __construct( Context $context, CustomerRepositoryInterface $customerRepository) { $this->customerRepository = $customerRepository; parent::__construct($context); } public function getOrderNumberValue($customerId) { $customer = $this->customerRepository->getById($customerId); return $customer->getCustomAttribute('trade_ordernumber'); } }
And I have modified the success.phtml file in the following way
<?php /** * Copyright ? Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ ?> <?php /** @var $block \Magento\Checkout\Block\Onepage\Success */ ?> <div class="checkout-success"> <?php if ($block->getOrderId()) :?> <?php if ($block->getCanViewOrder()) :?> <h1><?= $block->escapeHtml(__('Your order # is: <span>%1</span>.', $block->getOrderId()), ['span']) ?></h1> <p><?= $block->escapeHtml(__('Your order number is: %1.', sprintf('<a href="%s" class="order-number"><strong>%s</strong></a>', $block->escapeUrl($block->getViewOrderUrl()), $block->getOrderId())), ['a', 'strong']) ?></p> <?php else :?> <p><?= $block->escapeHtml(__('Your order # is: <span>%1</span>.', $block->getOrderId()), ['span']) ?></p> <?php endif;?> <p><?= $block->escapeHtml(__('We\'ll email you an order confirmation with details and tracking info.')) ?></p> <?php endif;?> <?= $block->getAdditionalInfoHtml() ?> <div class="actions-toolbar"> <div class="primary"> <a class="action primary continue" href="<?= $block->escapeUrl($block->getContinueUrl()) ?>"><span><?= $block->escapeHtml(__('Continue Shopping')) ?></span></a> </div> </div> </div> <?php class DependentClass { public function __construct(CustomTrade\CallAttribute\Helper\Data $helper) { $this->helper = $helper; } public function GetTrade() { $this->helper->getOrderNumberValue('trade_ordernumber'); } } ?>
Unfortunately this does not seem to have had the desired effect. would you be able to let me know what I am doing wrong here?
Thank you
@pmtrade please call helper in the phtml file
Please Google it how to call helper function on phtml file. You have added Class here that is wrong way.
Call helper on ssuccess page
$helper = $this->helper('{Vendor}\{Module}\Helper\Data'); $values = $helper->YourHelperMethod();
Thank you for replying.
I have adapted the code in the files is as follows
registration.php
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'CustomTrade_CallAttribute', __DIR__ );
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="CustomTrade_CallAttribute" > </module> </config>
Data.php
<?php namespace CustomTrade\CallAttribute\Helper; use Magento\Framework\App\Helper\Context; use Magento\Customer\Api\CustomerRepositoryInterface; use Magento\Customer\Model\Session as CustomerSession; use Magento\Framework\App\Helper\AbstractHelper; class Data extends AbstractHelper { protected $customerRepository; public function __construct( Context $context, CustomerRepositoryInterface $customerRepository, CustomerSession $customerSession ) { $this->customerRepository = $customerRepository; $this->customerSession = $customerSession; parent::__construct($context); } public function getOrderNumberValue() { $customerId = $this->customerSession->getCustomer()->getId(); $customer = $this->customerRepository->getById($customerId); return $customer->getCustomAttribute('trade_ordernumber')->getValue(); } }
And I have modified the success.phtml file in the following way
<?php /** * Copyright ? Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ ?> <?php /** @var $block \Magento\Checkout\Block\Onepage\Success */ ?> <div class="checkout-success"> <?php if ($block->getOrderId()) :?> <?php if ($block->getCanViewOrder()) :?> <h1><?= $block->escapeHtml(__('Your order # is: <span>%1</span>.', $block->getOrderId()), ['span']) ?></h1> <p><?= $block->escapeHtml(__('Your order number is: %1.', sprintf('<a href="%s" class="order-number"><strong>%s</strong></a>', $block->escapeUrl($block->getViewOrderUrl()), $block->getOrderId())), ['a', 'strong']) ?></p> <?php else :?> <p><?= $block->escapeHtml(__('Your order # is: <span>%1</span>.', $block->getOrderId()), ['span']) ?></p> <?php endif;?> <p><?= $block->escapeHtml(__('We\'ll email you an order confirmation with details and tracking info.')) ?></p> <?php endif;?> <?= $block->getAdditionalInfoHtml() ?> <div class="actions-toolbar"> <div class="primary"> <a class="action primary continue" href="<?= $block->escapeUrl($block->getContinueUrl()) ?>"><span><?= $block->escapeHtml(__('Continue Shopping')) ?></span></a> </div> </div> </div> <?php $dataHelper = $this->helper('CustomTrade\CallAttribute\Helper\Data');
echo $dataHelper->getOrderNumberValue(); ?>