Как получить текущий идентификатор группы клиентов в magento2

15

Я хочу получить текущий идентификатор группы клиентов в файле phtml . Когда я еще не вошел в систему, это возвращает группу клиентов общего типа . Как получить правильный вывод?

Рохан Хапани
источник

Ответы:

18

Magento\Customer\Model\Session $customerSession используя этот класс, вы получите текущий идентификатор группы клиентов

protected $_customerSession;

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

public function getGroupId(){
 if($this->_customerSession->isLoggedIn()):
        echo $customerGroup=$this->_customerSession->getCustomer()->getGroupId();
    endif;
}

ПРИМЕЧАНИЕ. Вы получаете идентификатор клиента только в том случае, если клиент вошел в систему.


источник
7

Вы можете получить идентификатор группы, используя следующий код

protected $_customerSession;

public function __construct(
        ....    
        \Magento\Customer\Model\Session $customerSession,
        ....
    ) {


        $this->_customerSession = $customerSession;

    }

public function getGroupId(){
 if($this->_customerSession->isLoggedIn()):
        echo $customerGroup=$this->_customerSession->getCustomer()->getGroupId();
    endif;

}
Кайсар Сатти
источник
Но это возврат 1 (идентификатор группы общих клиентов), когда я не вошел в систему.
Рохан Хапани
1
@RohanHapani добавил код , пожалуйста , проверьте и обратную связь ..
Кайсар Сатти
1
@ RohanHapani Я проверил этот код, он не показывает groupid для не авторизованного пользователя. Вы if($this->_customerSession->isLoggedIn()):проверяли isLoggedIn?
Кайсар Сатти
Да ... Сейчас это работает ... Спасибо, сэр :)
Рохан Хапани
6

По умолчанию, Magento очистит сессию клиента: \Magento\PageCache\Model\Layout\DepersonalizePlugin::afterGenerateXml.

/magento//a/92133/33057

Взглянем:

продавец / Magento / модуль-клиент / модель / Context.php

/**
 * Customer group cache context
 */
const CONTEXT_GROUP = 'customer_group';
/**
 * Customer authorization cache context
 */
const CONTEXT_AUTH = 'customer_logged_in';

Мы можем проверить вошедших в систему клиентов и группы клиентов:

 /**
 * @var \Magento\Framework\App\Http\Context $httpContext
 */
$isLogged = $this->httpContext->getValue(Context::CONTEXT_AUTH);
$customerGroupId = $this->httpContext->getValue(Context::CONTEXT_GROUP);

Поместите эти строки кода в свой блок.

Здесь есть еще одно хорошее объяснение:

https://ranasohel.me/2017/05/05/how-to-get-customer-id-from-block-when-full-page-cache-enable-in-magento-2/

Хоа ТруонгДинь
источник
2

Попробуйте это, чтобы получить текущий идентификатор группы клиентов и имя для зарегистрированных и не вошедших клиентов

protected $_customerSession;

protected $_customerGroupCollection;

public function __construct(
    ....    
    \Magento\Customer\Model\Session $customerSession,
    \Magento\Customer\Model\Group $customerGroupCollection,
    ....
) {


    $this->_customerSession = $customerSession;
    $this->_customerGroupCollection = $customerGroupCollection;

}

public function getCustomerGroup()
{
        echo $currentGroupId = $this->_customerSession->getCustomer()->getGroupId(); //Get current customer group ID
        $collection = $this->_customerGroupCollection->load($currentGroupId); 
        echo $collection->getCustomerGroupCode();//Get current customer group name
}
Принц Патель
источник
1
protected $_customerSession;

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

public function getGroupId(){
 if($this->_customerSession->isLoggedIn()):
        echo $customerGroup=$this->_customerSession->getCustomer()->getGroupId();
    endif;
}

Это может быть полезно для вас.


источник
0

Использование \ Magento \ Customer \ Model \ Session может привести к сбою, если вы используете кэширование.

Вы должны лучше использовать:

private $sessionProxy;

public function __construct(
    use Magento\Customer\Model\Session\Proxy $sessionProxy,
) {
    $this->sessionProxy= $sessionProxy;
}

// may return groupId or \Magento\Customer\Model\GroupManagement::NOT_LOGGED_IN_ID  
public function getGroupId(){
   $this->sessionProxy->getCustomer()->getGroupId();
}
Ян Шарлоу
источник