Вы можете сделать это двумя способами в шаблонах, напрямую с помощью диспетчера объектов или с предпочтением блока, который отображает шаблон:
В вашем файле модуля etc / di. xml добавьте предпочтение для блок, который отображает шаблон. Я думаю, что это Magento\Catalog\Block\Product\View
, но не уверен на 100%.
<config>
<preference for="Magento\Catalog\Block\Product\View"
type="Vendor\Module\Block\Product\View" />
</config>
Затем создайте файл Vendor / Module / Block / Product / View. php
<?php
namespace Vendor\Module\Block\Product;
class View extends \Magento\Catalog\Block\Product\View
{
public function isCustomerLoggedIn()
{
return $this->_customerSession->isLoggedIn();
}
}
И в файл шаблона используйте функцию для проверки входа в систему и выполнения других действий.
if ($block->isCustomerLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
ИЛИ используйте диспетчер объектов внутри файла шаблона:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->get('Magento\Customer\Model\Session');
if($customerSession->isLoggedIn()) {
// Customer is logged in
} else {
// Customer is not logged in
}
EDIT:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->get('Magento\Framework\App\Http\Context');
$isLoggedIn = $customerSession->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
if($isLoggedIn){
// Logged In
}else{
// Not Logged In
}
Objectmanager прост, но он не использует внедрение зависимостей, что делает magento2 таким приятным. (Думаю, в этом причина)