Produto associado em múltiplas posições no mesmo produto agrupado
-
12-12-2019 - |
Pergunta
Estamos criando produtos agrupados com base em imagens de esquemas de motores e peças.Esses esquemas possuem marcadores numéricos para cada peça específica do esquema e podemos combinar a posição do produto associado com o marcador numérico no esquema.
Nosso problema é que alguns esquemas possuem a mesma peça em múltiplas posições.Por exemplo, a mesma arruela pode aparecer nas posições 1, 15 e 40.A grelha de produtos associada apenas nos permite indicar uma posição para aquela anilha.
Alguma ideia de como poderíamos configurar um produto agrupado para permitir múltiplas posições de um produto associado?Estou pesquisando há várias horas tentando encontrar uma maneira de adicionar um atributo adicional a um produto associado, mas não estou encontrando nenhuma possibilidade nisso.
Solução
Depois de mais horas pesquisando on-line, consegui encontrar uma solução com base em uma postagem em outro fórum magento.Vou reescrevê-lo aqui na esperança de que ajude alguém que tropece.
Para esta abordagem, decidi adicionar uma coluna personalizada na grade de produtos associada ao meu produto agrupado.Para adicionar a nova coluna copiei o arquivo em:app/code/core/Mage/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/Group.php
no meu código local em: app/code/localMage/Adminhtml/Block/Catalog/Product/Edit/Tab/Super/Group.php
Na função _prepareColumns()` adicionei isto:
$this->addColumn('diagrampos', array(
'header' => Mage::helper('catalog')->__('Other Position'),
'name' => 'diagrampos',
'index' => 'diagrampos',
'width' => '60px',
'editable' => true
));
Mais abaixo nesse arquivo, precisamos alterar o getSelectedGroupedProducts()
na linha 214 para que nossas atualizações no admin sejam salvas corretamente.Veja como isso deve ficar agora:
public function getSelectedGroupedProducts()
{
$associatedProducts = Mage::registry('current_product')->getTypeInstance(true)
->getAssociatedProducts(Mage::registry('current_product'));
$products = array();
foreach ($associatedProducts as $product) {
$products[$product->getId()] = array(
'qty' => $product->getQty(),
'position' => $product->getPosition(),
'diagrampos' => $product->getDiagrampos()
);
}
return $products;
}
Então precisamos atualizar a tabela do banco de dados para catalog_product_link_attribute
.Adicionei os seguintes valores como uma nova linha à tabela.Pode ser necessário ajustar o primeiro valor dependendo do incremento atual na sua tabela:
product_link_attribute_id => 6
link_type_id => 3
product_link_attribute_code => diagrampos
data_type => varchar
Em seguida, precisamos mudar app/design/adminhtml/default/default/layout/catalog.xml
para que o serializador atenda ao nosso novo campo.Precisamos modificar o layout sob o nó <adminhtml_catalog_product_supergroup>
adicionando uma nova linha abaixo addColumnInputName
para que pareça:
<action method="addColumnInputName">
<input_name>qty</input_name>
<input_name>position</input_name>
<input_name>diagrampos</input_name>
</action>
Agora posso adicionar uma lista de números inteiros separados por vírgula nesse campo de entrada.Com personalização moderada nos modelos de produtos agrupados, agora posso exibir o mesmo SKU de produto associado em várias posições.