Movatterモバイル変換


[0]ホーム

URL:


Skip to content
DEV Community
Log in Create account

DEV Community

Bruno
Bruno

Posted on

Personalizando o módulo da Stape.io para Magento 2

Olarf!

Vou dar o papo de como personalizar esse caraaqui 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>
Enter fullscreen modeExit fullscreen mode

veja aqui

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>
Enter fullscreen modeExit fullscreen mode

Veja aqui

3º E então lá vai um around nesse trem:

<?phpnamespace 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;    }}
Enter fullscreen modeExit fullscreen mode

Melhor ver todos as classes

Detalhando:

prontinho?

Sim, agora o amadinho do cara de mkt tem os dados necessários para ser um pokémon!

Página de produto:
Image description

Página de categoria:

Image description

Página de sucesso:

Image description

e tem outras mas eu cansei, adeus!

Top comments(0)

Subscribe
pic
Create template

Templates let you quickly answer FAQs or store snippets for re-use.

Dismiss

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment'spermalink.

For further actions, you may consider blocking this person and/orreporting abuse

  • Joined

Trending onDEV CommunityHot

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

Log in Create account

[8]ページ先頭

©2009-2025 Movatter.jp