Estou tentando pegar um atributo de produto no modelo de carrinho. Mas eu simplesmente não funciona! O atributo está definido como Visível nas páginas do catálogo na montra = sim e Usado na lista de produtos = sim
Eu uso um módulo personalizado para substituir o seguinte modelo:
/vendor/magento/module-checkout/view/frontend/templates/cart/item/default.phtml
Eu tenho o produto:
$_item = $block->getItem();
$product = $_item->getProduct();
Normalmente, eu esperaria que um atributo personalizado (do tipo área de texto nesse caso) com um código de atributo 'sample_attr' estivesse disponível com um destes:
$product->getData('sample_attr');
ou
$product->getSampleAttr();
Alguns atributos estão disponíveis usando isso (sku, peso, preço ..), mas para um atributo personalizado não funciona. O auxiliar incluído (\ Magento \ Msrp \ Helper \ Data) também não possui método de atributo.
Eu posso obter todos os códigos de atributo usando:
$attributes = $product->getAttributes();
foreach($attributes as $a)
{
var_dump($a->getName());
}
Eu também tentei:
$attribute = $product->getResource()->getAttribute('sample_attr');
var_dump($attribute->getFrontend()->getValue($product));
mas isso retorna nulo.
Então, como obtenho o valor do atributo?
Eu tentei o seguinte: Obter atributo específico para cada produto na página do catálogo
Atributo de texto personalizado de saída no catálogo list.phtml (Magento 2)
fonte
magento setup:di:compile
para fazer isso funcionar, mas isso faz sentido. Você está alterando a árvore de dependência aqui.Então, encontrei uma maneira de obter as informações que buscava. Preciso carregar o produto completo no ProductRepository! Observe que se você tentar carregá-
\Magento\Catalog\Model\Product
lo, ele se comportará como um singleton, sempre fornecendo o mesmo produto para cada loop.Usei a classe auxiliar de módulos, pois define o seguinte método para carregar o produto a partir do productId:
Eu incluí o auxiliar no modelo:
Carrego o produto completo:
E agora eu posso usar:
e
para obter os dados.
fonte
Para aqueles que chegaram aqui procurando uma solução simples, foi assim que funcionou para mim
Eu adicionei ao meu
default.phtml
(inmodule-checkout/view/frontend/templates/cart/item
) isto:então você pode ligar
$customProduct->getData('your_attribute');
como semprefonte
Com configurações administrativas corretas, atributos personalizados são carregados no objeto produto no caixa página, se o modelo de origem na
eav_attribute
tabela SQL está definido paraNULL
. Assim, você pode acessar diretamente com$product->getSampleAttr()
a Página do Google Checkout.Mas se o atributo tiver um modelo de origem como
Magento\Eav\Model\Entity\Attribute\Source\Table
, você deverá carregar o produto a partir do repositório.Crie um novo auxiliar e adicione o repositório do produto no construtor ainda está trabalhando no 2.2.6 (como a solução do tecjam)
Observe que o problema é o mesmo se você tentar substituir o representante do item (chamado na página Checkout) e adicionar o repositório do produto aqui.
fonte
Os atributos personalizados não estão incluídos no objeto do produto encontrado em Quote / Cart, portanto, você não pode obtê-lo através da função getData ('custom_attribute'). o que você precisa fazer é obter o ID do produto retornado do objeto Quote e carregar o produto usando o repositório do produto. Depois de carregar o produto no repositório, você poderá obter todos os dados, incluindo os atributos personalizados atribuídos a ele, posteriormente, você pode usar a função getData ('custom_attribute') para obtê-lo.
Espero que faça sentido.
fonte