Olarf!
Vou dar o papo de como personalizar esse cara aqui para colocar dados específicos!
Bom isso foi necessário porque a loja tem atributos muito relevantes para o mkt mas que não são capturados por padrão, o dramalhão é o seguinte:
O tipo da pedra é muito relevante, além disso o formato do cristal também é essencial.
Imagina assim, faz mkt de um anel (o formato) para alguém que tá buscando pedra bruta, não vai funfar bem né? então por isso vamos lá, já parando de enrolar!
A primeira treta é que os gringos do módulo só conhecem funções do tipo privado o.O
E aí lá vou eu abrir a PR e esperar ela entrar! tranquilis, aceitaram! e eu também aproveitei para fazer o módulo parar de quebrar o layout. de nada!
Mas agora com o módulo atualizado é hora de partir para os plugins o que é doce doce, não vou detalhar todos porque senão vai ter gente me criticando (e vão tbm por não detalhar), mas então pega o que quero dizer:
1º Informar quais os atributos vão estar visíveis ao catálogo:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Catalog:etc/catalog_attributes.xsd">
<group name="quote_item">
<attribute name="tipo_de_pedra"/>
<attribute name="formato_do_cristal"/>
</group>
<group name="order_item">
<attribute name="tipo_de_pedra"/>
<attribute name="formato_do_cristal"/>
</group>
</config>
2º pegar esse monte de classes para fazer o plugin de fato:
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Stape\Gtm\ViewModel\Category">
<plugin name="add_custom_item_data" type="O2TI\ExtendedStape\Plugin\Stape\ViewModel\CategoryPlugin" sortOrder="1" />
</type>
<type name="Stape\Gtm\ViewModel\Cart">
<plugin name="add_custom_item_data" type="O2TI\ExtendedStape\Plugin\Stape\ViewModel\CartPlugin" sortOrder="1" />
</type>
<type name="Stape\Gtm\ViewModel\Checkout">
<plugin name="add_custom_item_data" type="O2TI\ExtendedStape\Plugin\Stape\ViewModel\CheckoutPlugin" sortOrder="1" />
</type>
<type name="Stape\Gtm\ViewModel\Product">
<plugin name="add_custom_item_data" type="O2TI\ExtendedStape\Plugin\Stape\ViewModel\ProductPlugin" sortOrder="1" />
</type>
<type name="Stape\Gtm\ViewModel\Success">
<plugin name="add_custom_item_data" type="O2TI\ExtendedStape\Plugin\Stape\ViewModel\SuccessPlugin" sortOrder="1" />
</type>
<preference for="Magento\Checkout\CustomerData\DefaultItem"
type="O2TI\ExtendedStape\Plugin\Magento\Checkout\CustomerData\DefaultItemPlugin"/>
<type name="O2TI\ExtendedStape\Plugin\Magento\Checkout\CustomerData\DefaultItemPlugin">
<arguments>
<argument name="attributeRepository" xsi:type="object">Magento\Catalog\Api\ProductAttributeRepositoryInterface</argument>
</arguments>
</type>
</config>
3º E então lá vai um around nesse trem:
<?php
namespace O2TI\ExtendedStape\Plugin\Stape\ViewModel;
use Stape\Gtm\ViewModel\Cart as ViewModelCart;
use O2TI\ExtendedStape\Helper\Data;
class CartPlugin
{
/**
* @var Data
*/
protected $helper;
/**
* Define class dependencies
*
* @param Data $helper
*/
public function __construct(
Data $helper
) {
$this->helper = $helper;
}
/**
* Plugin method to enhance prepareItems functionality
*
* @param ViewModelCart $subject
* @param callable $proceed
* @param \Magento\Quote\Model\Quote $quote
* @return array
*/
public function aroundPrepareItems(ViewModelCart $subject, callable $proceed, \Magento\Quote\Model\Quote $quote)
{
$items = $proceed($quote);
$itemData = [];
/** @var \Magento\Quote\Model\Quote\Item $item */
foreach ($quote->getAllVisibleItems() as $item) {
$tipoPedraValue = $item->getProduct()->getTipoDePedra();
$tipoPedraLabel = $this->helper->getAttributeOptions('tipo_de_pedra', $tipoPedraValue);
$formatoValue = $item->getProduct()->getFormatoDoCristal();
$formatoLabel = $this->helper->getAttributeOptions('formato_do_cristal', $formatoValue);
$itemData[$item->getProductId()] = [
'item_tipo_de_pedra' => $tipoPedraLabel,
'item_formato_do_cristal' => $formatoLabel,
];
}
foreach ($items as $key => $item) {
$itemId = $item['item_id'];
if (isset($itemData[$itemId])) {
$items[$key] = array_merge($item, $itemData[$itemId]);
}
}
return $items;
}
}
Detalhando:
- pega a saída original com os outros detalhes dos itens
- faz um laço para pegar os nossos atributos especiais e coloca no array
- agora é só achar o item do original e pronto!
prontinho?
Sim, agora o amadinho do cara de mkt tem os dados necessários para ser um pokémon!
Página de categoria:
Página de sucesso:
e tem outras mas eu cansei, adeus!
Top comments (0)