Produtos configuráveis ​​e conjunto de atributos

18

TL; DR : Existe alguma razão para que os produtos simples associados a um produto configurável tenham que estar no mesmo conjunto de atributos que o próprio produto configurável? Quero dizer, existe algum motivo técnico ? Eu sei o motivo do "senso comum". Se você vende um par de sapatos , todas as versões, dependendo da cor e tamanho, também precisam ser sapatos .
Versão longa : tive a tarefa de "mesclar" alguns produtos configuráveis. Quero dizer de 2 ou mais para fazer apenas um. Eu não queria fazê-los manualmente por causa da quantidade de produtos e não queria passar por$product->load(..)->set...()->save()devido à quantidade de tempo que levou para executar o script. Então, eu interrompi o processo porque tinha certeza de que nenhum dos produtos simples se sobrepunha. Houve uma combinação única de tamanho e cor. Eu fiz isso:

Mage::getResourceSingleton('catalog/product_type_configurable')
    ->saveProducts($mainConfigrableProduct, $simpleProductIds);

onde $simpleProductIdsexiste uma matriz de todos os IDs de produtos simples associados todos aos produtos configuráveis ​​que precisam ser mesclados.
Isso funcionou perfeitamente para a maioria dos produtos, mas havia alguns que apresentavam problemas.
Se eu chamasse

$productIds = $product->getTypeInstance()->getUsedProductIds() 

Eu obteria todos os IDs de produtos simples, mas no back-end apenas alguns deles apareceram. Depois de cavar por algum tempo, descobri que os únicos mostrados eram aqueles no mesmo atributo definido como o produto configurável. O outro conjunto de atributos é muito semelhante ao primeiro, apenas algumas pequenas diferenças, mas contém os atributos configuráveis ​​(tamanho e cor).
E agora a coisa estranha. No front-end, esperava ver todos os produtos ($ productIds no código acima) ou apenas os produtos no mesmo conjunto de atributos. Bem, havia algo entre.

  • 20 IDs de produtos associados - 5 tamanhos, 4 cores
  • 10 produtos associados no back-end - 5 tamanhos, 2 cores - as outras 2 cores (10 produtos) estavam em um conjunto de atributos diferente
  • 15 combinações no frontend - 5 tamanhos 3 cores (???)

Consegui resolver o problema alterando o conjunto de atributos para os produtos que não apareceram, mas ainda estou confuso.

Nota : Não tente fazer isso em casa. Ou você pode experimentá-lo em casa, mas não em um servidor ativo.

Marius
fonte

Respostas:

13

Depois de perguntar sobre isso, são as razões que eu tenho. Espero que seja satisfatório para você, mesmo que seja provavelmente o que você esperava.

  1. A interface adminhtml foi criada com a intenção de dificultar totalmente os comerciantes.

Por esse motivo, muitos recursos fornecidos pelo Magento como um Framework não são possíveis através da interface do usuário.
A razão pela qual apenas produtos no mesmo conjunto de atributos são selecionáveis ​​como produtos simples associados para configuráveis ​​é porque é isso que estava nas especificações.
Como você disse, meio que faz sentido dessa maneira.

  1. Outra razão é pensar no propósito dos conjuntos de atributos. Um dos motivos pelos quais eles existem é reduzir o número de atributos e opções que precisam ser carregados e processados ​​durante uma solicitação. A aplicação desse pensamento aos configuráveis ​​faz sentido, pois é um tipo de produto relativamente caro.

Como o back-end foi criado dessa maneira, nunca se esperava que a lógica do front-end configurável lidasse com produtos simples de diferentes conjuntos de atributos.
É por isso que as restrições não são implementadas completamente lá.

Provavelmente, seria fácil fazer com que os configuráveis ​​funcionassem com simples de diferentes conjuntos de atributos. Simplesmente não era para isso.

Não perguntei mais e não me vi ver qual interação de código produzia exatamente o resultado estranho no frontend. Provavelmente, isso não é importante, pois se eu entendi corretamente, você solicitou o raciocínio por trás da decisão de excluir produtos simples de conjuntos de atributos diferentes dos configuráveis, e não a explicação do código.

Vinai
fonte
Obrigado Vinai. Eu estava esperando no fundo da minha mente por uma razão "alucinante". Teria sido divertido :). Esta é uma explicação satisfatória. Quanto ao "resultado estranho", não há necessidade de digitar o código. Farei isso quando ficar entediado. Ainda tenho o dump do banco de dados e a maneira de reproduzir o mesmo resultado. Provavelmente é porque eu estava estragando diretamente o banco de dados. Vou postar um resultado quando / se eu encontrar um.
Marius
2
Tsk tsk, @Marius - não toque na db;)
philwinkle
4
@philwinkle. Eu sei, eu sei, o universo explodirá se fizer isso. O que posso dizer? Eu gosto de viver perigosamente. Em minha defesa, eu disse "não tente fazer isso em um servidor ativo".
Marius
11
Ainda à espera de receber minha mente soprado, também ... :)
Vinai
2

Usamos uma extensão chamada RapidFlow da Unirgy (que não posso recomendar o suficiente) para importação e exportação. Um dos recursos da versão Pro permite alterar os conjuntos de atributos. Outra é a criação de produtos via importação de CSV. Ocasionalmente, criamos novos produtos simples para configuráveis ​​e, por acidente, esses produtos simples têm conjuntos de atributos diferentes dos de seus pais.

O Rapidflow importará esses produtos com prazer e alterará os conjuntos de atributos. Nós tendemos a não ficar felizes com os resultados. Os produtos configuráveis ​​configurados por atributos fora do conjunto de atributos falham na renderização no administrador do produto e devem ser reparados. Se não alterarmos o conjunto de atributos dos pais, como você notou, os filhos simplesmente não conseguem ser associados adequadamente aos pais. Eles existem como entidades Magento, podem ser editados, mas não aparecerão como filhos na página de produto de front-end ou na lista de produtos associada do pai configurável.

Portanto, do ponto de vista puramente técnico, é possível que produtos simples estejam em um conjunto de atributos diferente do pai. Mas como esse comportamento não é suportado, mesmo no EE, o Razor da Occam diz que quando eles estavam projetando o Magento, os desenvolvedores do Varien não viram a necessidade.

Programação RegularProgramada
fonte
11
Obrigado pela resposta (e recomendação de extensão), mas isso não responde à minha pergunta. Eu disse que consegui resolver meu problema alterando o banco de dados diretamente. Eu sei que não deveria fazer isso, mas eu tinha um bom conhecimento do que estava fazendo - e um backup do banco de dados :). Eu só estava curioso para saber por que essa restrição existe. Tanto quanto "os desenvolvedores de Varien não viram a necessidade", sinto que você está errado. Se você implementar uma restrição, deve ser uma razão para isso.
Marius