ম্যাজেন্টো 2 একটি ব্লক শ্রেণিতে সেশন থেকে গ্রাহক আইডি পান


12

সেশন থেকে গ্রাহক আইডি পাবেন কীভাবে? আমি চেষ্টা করেছিলাম কিন্তু কাজ করিনি।

protected $_customerBonusPointFactory;
protected $_customerSession;

public function __construct(Session $customerSession, \Magento\Framework\View\Element\Template\Context $context) {
    $this->_customerSession = $customerSession;
    parent::__construct($context);
}

public function _prepareLayout() {
    var_dump($this->_customerSession->getCustomer()->getId());
    exit();
    return parent::_prepareLayout();
}

2
যদি গ্রাহক লগ ইন করেন তবে আপনি গ্রাহক আইডি পেতে পারেন অন্যথায় এটি '$ এটি -> _ গ্রাহকসেশন-> getCustomer () -> getId ()'
সোহেল রানা

আমি লগ ইন করেছি তবে এটি শূন্য হয়। এবং আমি এটি ব্লক ক্লাসে করছি।
পল

আপনি কোন সেশন ক্লাস ব্যবহার করেন?
সোহেল রানা

আমি কেবল $this->session->isLoggedIn()আমার নিয়ামক শ্রেণিতে প্রত্যাবর্তন সত্য বলে পেয়েছি কিন্তু আমার ব্লক ক্লাসে মিথ্যা প্রত্যাবর্তন করেছি। কেন?
পল

উত্তর:


25

এটি কাজ করার অনুলিপি। আপনি আপনার ব্লক শ্রেণীর সাথে তুলনা করতে পারেন। এখানে আমি ফর্মটি ব্লক ক্লাস হিসাবে ব্যবহার করি

namespace Vendor\Module\Block;


class Form extends \Magento\Framework\View\Element\Template
{
    protected $customerSession;

    /**
     * Construct
     *
     * @param \Magento\Framework\View\Element\Template\Context $context
     * @param \Magento\Customer\Model\Session $customerSession
     * @param array $data
     */
    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Customer\Model\Session $customerSession,
        array $data = []
    ) {
        parent::__construct($context, $data);

        $this->customerSession = $customerSession;
    }

    public function _prepareLayout()
    {

        var_dump($this->customerSession->getCustomer()->getId());
        exit();
        return parent::_prepareLayout();
    }
}

1
আমি ঠিক একই কাজ করেছি তবে এটি এখনও শূন্য হয়। এবং $this->customerSession->isLoggedIn()সর্বদা মিথ্যা। আমি নিয়ামক শ্রেণিতেও এটি করি এবং এটি কাজ করে।
পল

অবশেষে, এটি কাজ করে। আমি কী পরিবর্তন করেছি তা নিশ্চিত নই।
পল

আপনি কি পুরো পৃষ্ঠার ক্যাশেটি অক্ষম করেছেন?
ডেভিডেজেজ

হ্যাঁ এটি ক্যাশে ছিল আমার একই সমস্যা ছিল<block class="Vendor\Block\Bla\Bla" name="block.name" template="Wed2b_Suppliers::template/template.phtml" cacheable="false"/>
জুলিয়ানো ভার্গাস

আমি ক্যাশে অক্ষম করেছি এখনও তার ফিরে আসার
শূন্যতা

4

\Magento\Customer\Model\Session $customerSession,গ্রাহক সেশন থেকে গ্রাহক আইডি পেতে আপনার ক্লাসটি ইনজেক্ট করতে হবে।

protected $_customerSession;

public function __construct(
    ...
    \Magento\Customer\Model\Session $customerSession,
    ...
) {
    ...
    $this->_customerSession = $customerSession;
    ...
}

public function getCustomer()
{
    echo $this->_customerSession->getCustomer()->getId(); //Print current customer ID

    $customerData = $this->_customerSession->getCustomer(); 
    print_r($customerData->getData()); //Print current Customer Data
}

দ্রষ্টব্য : আপনি কেবল গ্রাহক আইডি পাবেন যদি গ্রাহক লগ ইন থাকে এবং গ্রাহক সেশন শুরু হয়


4

আপনি যখন ব্লকটি নির্ধারণ করেন যা কোন সেশন ব্যবহার করে তা আপনাকে এর জন্য ক্যাশে অক্ষম করতে হবে।

 <block class="Vendor\Module\Block\Index" name="Name"
 template="Vendor_Module::template/path.phtml" cacheable="false">
 </block>

2
এটি পুরো পৃষ্ঠাটির কারণ এবং এই ব্লকটি ব্যবহার করা প্রতিটি পৃষ্ঠা এফপিসি দ্বারা মিস করা হবে
ডনি

@ ডনিউইবোউও এটি সত্য, তবে প্রথমদিকে গতিশীল ডেটা সহ পৃষ্ঠাগুলি ক্যাচ করার সময় আপনার যত্নশীল হওয়া দরকার। উদাহরণস্বরূপ আপনি সমস্ত গ্রাহকের জন্য একই নামটি প্রদর্শন করতে চান না।
রাদু

1

গ্রাহক সেশনটি তাত্ক্ষণিক করার আগে আপনি যখন প্রাসঙ্গিক বিষয়টি পিতামত্তার ক্লাসে পাস করবেন তখন মনে হচ্ছে এটি কাজ করবে:

class History extends \Magento\Framework\View\Element\Template
{

    /**
     * @var Session
     */
    protected $_session;

    public function __construct(
        Template\Context $context,
        \Magento\Customer\Model\Session $session,
        array $data
    )
    {
        parent::__construct($context, $data);
        $this->_session = $session;
    }

    public function _prepareLayout()
    {

        var_dump($this->_session->getCustomerId());
        exit();
        return parent::_prepareLayout();
    }
}

2
অস্বাভাবিক. আমি একই জিনিস পর্যবেক্ষণ। সাহায্যের জন্য আপনাকে ধন্যবাদ। আমি ভাবছি কেন এটি একটি পার্থক্য করে।
nshiff

0

লগ ইন থাকা গ্রাহকের ডেটা পুনরুদ্ধারে আমরা যখন ব্লকে গ্রাহক সেশন ইনজেকশন দিচ্ছি এবং আমরা ব্লক থেকে গ্রাহক ডেটা পাচ্ছি না কারণ এফপিসি সক্ষম থাকলে ম্যাজেন্টো 2 সমস্ত গ্রাহক সেশন পুনরায় সেট করে।

আপনার লেআউটে ব্লিকের জন্য দয়া করে ক্যাশেবল = "মিথ্যা" ব্যবহার করুন:

<referenceContainer name="content"> 
        <block class="Arman\Test\Block\List" name="list" template="Arman_Test::list.phtml" cacheable="false"> 
        </block>
    </referenceContainer>  

এই ক্ষেত্রে, ম্যাজেন্টো 2 ক্যাচিং থেকে এই পৃষ্ঠাটিকে উপেক্ষা করুন।


কীভাবে সিএমএস পৃষ্ঠাগুলিতে ক্যাশেবল = "মিথ্যা" ব্যবহার করবেন?
জাফর পিনজার

0

আপনার যদি কেবল customer_idতখন পুরো বস্তুটি লোড না করেই প্রয়োজন (পদ্ধতি getCustomerপদ্ধতিটি দেখুন) আপনি কেবল getCustomerIdপদ্ধতি ব্যবহার করে এটি পেতে পারেন ।

যেহেতু getIdমেথডকে মেথডও বলে getCustomerId

ফাইল: বিক্রেতা / ম্যাজেন্টো / মডিউল-গ্রাহক / মডেল / সেশন.এফপি

/**
 * Retrieve customer model object
 *
 * @return Customer
 * use getCustomerId() instead
 */
public function getCustomer()
{
    if ($this->_customerModel === null) {
        $this->_customerModel = $this->_customerFactory->create()->load($this->getCustomerId());
    }

    return $this->_customerModel;
}


/**
 * Retrieve customer id from current session
 *
 * @api
 * @return int|null
 */
public function getCustomerId()
{
    if ($this->storage->getData('customer_id')) {
        return $this->storage->getData('customer_id');
    }
    return null;
}

/**
 * Retrieve customer id from current session
 *
 * @return int|null
 */
public function getId()
{
    return $this->getCustomerId();
}

0

প্রথমে নীচের মতো হেডার.এফটিএমএল ফাইলে একটি উদাহরণ তৈরি করুন এবং যদি একাধিক স্টোর পাওয়া যায় এবং কেবলমাত্র কোনও একটি স্টোরেই মেল পেতে চায়।

এখানে চিত্র বর্ণনা লিখুন

<?php
    $objectManager =  \Magento\Framework\App\ObjectManager::getInstance();        
    $storeManager  = $objectManager->get('\Magento\Store\Model\StoreManagerInterface');
    $storeID       = $storeManager->getStore()->getStoreId(); 
    $storeName     = $storeManager->getStore()->getName();
?>

<?php
    $customerSession = $om->get('Magento\Customer\Model\Session');
    if($customerSession->isLoggedIn()) {
            echo $customerSession->getCustomer()->getId(); // get ID
    }
?>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.