<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Takemiya_Hideaddtocart',
__DIR__
); Neste ponto, posso direcionar o uso do Gerenciador de Objetos no módulo addtocart.phtml para verificar a sessão do usuário.
Criar evento e observador
Antes de ir mais longe, penso que é importante entender um pouco sobre os eventos e observers no Magento 2:
Magento 2 eventos
Quando uma ação específica é desencadeada, o evento é despachado pelos módulos Magento para passar dados para o Observador relevante configurado para o evento enviado.
Magento 2 observers
Os observers são usados para capturar a ação que foi desencadeada de eventos. Em observadores, você pode definir a funcionalidade ou lógica necessária que deve ser executada em resposta.
Para saber mais sobre os eventos e observadores do Magento 2, confira a documentação do DevDocs.
Agora, vou criar um evento que será acionado antes do layout ser carregado. Isso ajudará a verificar a sessão do cliente.
Para fazer isso, crie events.xml em app / code / Takemiya / Hideaddtocart / etc / frontend e adicione este código:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="layout_load_before">
<observer name="add_layout_handles" instance="Takemiya\Hideaddtocart\Observer\AddHandles" />
</event>
</config> Em seguida, crie o arquivo AddHandles.php no diretório app/ código / Takemiya / Hideaddtocart / Observer e adicione este código:
<?php
namespace Takemiya\Hideaddtocart\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Customer\Model\Session as CustomerSession;
class AddHandles implements ObserverInterface
{
protected $customerSession;
public function __construct(CustomerSession $customerSession)
{
$this->customerSession = $customerSession;
}
public function execute(\Magento\Framework\Event\Observer $observer)
{
$layout = $observer->getEvent()->getLayout();
if (!$this->customerSession->isLoggedIn())
{
$layout->getUpdate()->addHandle('customer_logged_out');
}
}
} No código acima, você pode ver o construtor onde adicionei a sessão do cliente.
Então, na função execute (), adicionei o identificador customer_logged_out ao layout. Para usar este identificador, crie um arquivo de layout customer_logged_out.xml em app / code / Takemiya / Hideaddtocart / view / frontend / layout e adicione este código para ele:
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="product.info.addtocart">
<action method="setTemplate">
<argument name="template" xsi:type="string">Takemiya_Hideaddtocart::catalog/product/view/addtocart.phtml</argument>
</action>
</referenceBlock>
</body>
</page> Criando arquivo PHTML
No arquivo customer_logged_out.xml, estabeleci o caminho do arquivo addtocart.phtml para usuários convidados. Então, você precisa criar addtocart.phtml em app / code / Takemiya / Hideaddtocart / view / frontend / templates / catalog / product / view e adicione este código ao arquivo:
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
// @codingStandardsIgnoreFile
/** @var $block \Magento\Catalog\Block\Product\View */?>
<?php $_product = $block->getProduct(); ?>
<?php if ($_product->isSaleable()): ?>
<div class="box-tocart">
<p>Please <a href="<?php echo $block->getUrl('customer/account/login') ?>" title="<?php echo __('Login') ?>"><?php echo __('Login') ?></a> or <a href="<?php echo $block->getUrl('customer/account/create') ?>" title="<?php echo "Register" ?>"><?php echo "Register" ?></a> to buy this product!</p>
</div>
<?php endif; ?> Executando os comandos
Para que o Magento 2 reconheça o novo módulo, você terá que executar os seguintes comandos nesta respectiva ordem:
(Atenção: Não teste este módulo no ambiente de produção antes de validar no ambiente de desenvolvimento)
php bin/magento setup:upgrade php bin/magento setup:di:compile php bin/magento setup:static-content:deploy php bin/magento cache:clean php bin/magento cache:flush
Dúvidas em como proceder com os comandos no Magento 2?
Consulte: https://rogertakemiya.com.br/comandos-sem-o-acesso-ssh-magento-2/


Ver comentários
Boa tarde Roger, muito obrigado pelo conteúdo. Mas como faço para esconder o botão de adicionar o carrinho nas outras páginas (página principal, ao ver o produto nas categorias)? Porque continua aparecendo...