Как я могу изменить ссылку для входа в систему на выход, когда клиент вошел в Magento2?
3 answers
Перейдите в раздел содержимое ->Блоки -> "Блок ссылок нижнего колонтитула"
Отредактируйте и добавьте эту ссылку в редактор контента (ниже ссылки на службу поддержки клиентов)
<li class="nav item">{{block class="CompanyName\ModuleName\Block\Footer" template="CompanyName_ModuleName::footer.phtml"}}</li>
И сохраните его.
Создать Footer.php блок в CompanyName\ModuleName\Block\
<?php
namespace CompanyName\ModuleName\Block;
class Footer extends \Magento\Framework\View\Element\Template
{
protected $_customerSession;
protected $_storeManager;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Customer\Model\Session $customerSession,
\Magento\Store\Model\StoreManagerInterface $storeManager,
array $data = []
) {
$this->_customerSession = $customerSession;
$this->_storeManager = $storeManager;
parent::__construct($context, $data);
}
/**
* Check customer Login or not
*/
public function checkCustomerLogin()
{
$customer_data = [];
if (!$this->_customerSession->isLoggedIn()) {
$customer_data['text'] = "Login";
$customer_data['url'] = $this->_storeManager->getStore()->getUrl('customer/account/login');
} else {
$customer_data['text'] = "Logout";
$customer_data['url'] = $this->_storeManager->getStore()->getUrl('customer/account/logout');
}
return $customer_data;
}
}
Теперь создайте нижний колонтитул.phtml файл в /app/code/CompanyName/ModuleName/view/frontend/templates
и добавьте этот код
<?php $customerData = $block->checkCustomerLogin(); ?>
<a href="<?php echo $customerData['url'];?>"><?php echo $customerData['text'];?></a>
Очистите кэш и проверьте его.
Используя приведенный ниже код, вы можете проверить, вошел ли клиент в систему или нет.
/** @var \Magento\Framework\App\ObjectManager $om */
$om = \Magento\Framework\App\ObjectManager::getInstance();
/** @var \Magento\Framework\App\Http\Context $context */
$context = $om->get('Magento\Framework\App\Http\Context');
/** @var bool $isLoggedIn */
$isLoggedIn = $context->getValue(\Magento\Customer\Model\Context::CONTEXT_AUTH);
Таким образом, вы можете писать код условно. Если вы уже вошли в систему, покажите ссылку для выхода из системы, в противном случае ссылку для входа.
Вы можете вызвать такой шаблон phtml на странице cms, как показано ниже
{{block class="Magento\Framework\View\Element\Template" template="[VendorName]_[ModuleName]::[YourTemplateFileLocation].phtml"}}
<referenceBlock name="footer_links">
<block class="Magento\Customer\Block\Account\AuthorizationLink" name="authorization-link-login" template="account/link/authorization.phtml"/>
</referenceBlock>
Это поместит ту же ссылку в нижний колонтитул, что и в верхнем колонтитуле. Положите в свой default.xml . Это поместит ссылку во второй столбец. Я не проверял наличие Первой колонки.