Как я могу изменить ссылку для входа в систему на выход, когда клиент вошел в Magento2?


Я добавил ссылку для входа в нижний колонтитул с помощью cms, например:

    <a href="{{store url="customer/account/login"}}">Login</a>

Как только клиент войдет в систему, я хочу изменить это в ссылке выхода из системы в нижнем колонтитуле magento2.

enter image description here

Author: shail, 2018-08-02

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>

Очистите кэш и проверьте его.

 4
Author: Rohan Hapani, 2018-08-02 06:57:11

Используя приведенный ниже код, вы можете проверить, вошел ли клиент в систему или нет.

/** @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"}} 
 1
Author: Kishan Patadia, 2018-08-02 05:03:50
<referenceBlock name="footer_links">
    <block class="Magento\Customer\Block\Account\AuthorizationLink" name="authorization-link-login" template="account/link/authorization.phtml"/>
</referenceBlock>

Это поместит ту же ссылку в нижний колонтитул, что и в верхнем колонтитуле. Положите в свой default.xml . Это поместит ссылку во второй столбец. Я не проверял наличие Первой колонки.

 1
Author: Gagan, 2018-08-02 05:43:05