Neste último artigo do nosso Magento 2 minicurso de desenvolvimento de módulo, aprenderemos a trabalhar com a Model. Veremos como interceptar o nosso input enviado via Post e a cadatrar o e-mail na Newsletter do Magento.
Acesse o seu modal.phtml e faça a seguinte alteração:
if(status){ jQuery.ajax({ url: 'http://magento-dev.com/newsletter/modal/index', type: 'POST', data: data, success: function(response){ var modal_overlay_element = jQuery('#modal-overlay'); modal_overlay_element.modal('closeModal'); }, error: function(){ } }); }
Em url adicionei a rota http://magento-dev.com/newsletter/modal/index. Isso não é a melhor prática, chumbar a URL direto no código. O ideal seria você criar um método no seu Helper que pegue o baseUrl
da sua loja de maneira dinâmico (deixarei essa parte como dever de casa pra vocês :D)
Trabalhando com Model
No seu módulo crie a classe Model/Modal.php
<?php namespace AbraaoMarques\NewsletterModal\Model; use Magento\Newsletter\Model\ResourceModel\Subscriber\Collection; use Magento\Newsletter\Model\SubscriberFactory; class Modal { protected $_collection; protected $_subscriberFactory; public function __construct( Collection $collection, SubscriberFactory $subscriberFactory ) { $this->_collection = $collection; $this->_subscriberFactory = $subscriberFactory; } public function addEmailNewsletter($email) { $customer = $this->_collection->addFieldToFilter('subscriber_email', $email)->getFirstItem()->getData(); if(!$customer){ $factory = $this->_subscriberFactory->create(); $factory->setData('subscriber_email', $email); $factory->save(); } } }
Explicando o funcionamento da Model
public function addEmailNewsletter($email)
Primeiro, criamos o nosso método que receberá o e-mail enviado como parâmetro.
$customer = $this->_collection->addFieldToFilter('subscriber_email', $email)->getFirstItem()->getData();
Depois, verificamos esse e-mail existe em nossa newsletter_subscriber (tabela onde o Magento 2 armazena os e-mails cadastros na Newsletter). Note que usamos o parâmetro subscriber_email como filtro.
if(!$customer){ $factory = $this->_subscriberFactory->create(); $factory->setData('subscriber_email', $email); $factory->save(); }
Se o e-mail não exister, criamos a nossa factory e adicionamos o e-mail na tabela newsletter_subscriber.
Trabalhando no Controller
<?php namespace AbraaoMarques\NewsletterModal\Controller\Modal; use Magento\Framework\App\Action\Action; use Magento\Framework\App\Action\Context; use Magento\Framework\App\ResponseInterface; use AbraaoMarques\NewsletterModal\Model\Modal; use Magento\Framework\App\Request\Http; class Index extends Action { protected $_modalModel; protected $_request; public function __construct( Context $context, Modal $modalModel, Http $request ) { parent::__construct($context); $this->_modalModel = $modalModel; $this->_request = $request; } /** * Execute action based on request and return result * * Note: Request will be added as operation argument in future * * @return \Magento\Framework\Controller\ResultInterface|ResponseInterface * @throws \Magento\Framework\Exception\NotFoundException */ public function execute() { $email = $this->_request->getPostValue('email'); if($email){ $this->_modalModel->addEmailNewsletter($email); } } }
Explicando o funcionamento do Controller:
use AbraaoMarques\NewsletterModal\Model\Modal;
Chamando a nossa model.
use Magento\Framework\App\Request\Http;
É por essa classe que o Magento 2 intercepta os valores passados via GET e POST.
public function execute() { $email = $this->_request->getPostValue('email'); if($email){ $this->_modalModel->addEmailNewsletter($email); } }
Pegamos o e-mail passado via post. Fazemos uma verificação para saber se o e-mail realmente existir. Depois chamamos o método addEmailNewsletter
da nossa model e inserimos o e-mail em nossa Newsletter! 😀
Para download do módulo desenvolvido neste curso, clique aqui.
Fico alguma dúvida? Assista ao vídeo no topo desse artigo!
Ainda com dúvida? Posta aí!!!
Assim, finalizamos esse curso de desenvolvimento de módulos para Magento 2. Espero que lhe tenha sido muito proveitoso!
Quer aprender a desenvolver algum tipo de módulo? Qual? Posta aí nos comentários pra gente poder ensinar!!!
Não esquece de ajudar a divulgar esse blog! 😀
Aquele abraço!!!