ম্যাজেন্টো 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.