coleção de sku do produto não vinculativa ao menu suspenso
-
12-12-2019 - |
Pergunta
Estou usando o criador de módulo final.E eu criei uma entidade.
E um dos atributos é o atributo do produto (SKU).
É criado o SKU como um atributo no back-end, mas não é vinculativo à coleção de SKU do produto.
A função a seguir retorna uma matriz nula.
public function getAllOptions($withEmpty = true, $defaultValues = false){
$source = Mage::getModel('eav/config')->getAttribute('catalog_product', 'sku');
return $source->getSource()->getAllOptions($withEmpty, $defaultValues);
}
Solução
Os atributos suspensos de suas entidades personalizadas provenientes de atributos de produto funcionam somente com atributos de produto suspensos ou de seleção múltipla.
SKU é um atributo de texto.
Funcionará com atributos do produto, como cor ou país de fabricação, mas não com sku, nome ou peso, etc.
Não há nenhuma verificação feita ao criar o módulo para ver se o atributo do produto é um menu suspenso ou multisseleção porque você pode criar um módulo usando UMC em uma instância que não contém o atributo desejado, mas usá-lo em outra instância que o tenha .Ou você pode adicionar o atributo do produto posteriormente.
[EDITAR]
Se quiser usar o SKU em um menu suspenso, você precisará modificar o método na sua pergunta.
Algo assim:
protected $_options = null;
public function getAllOptions($withEmpty = true, $defaultValues = false){
if (is_null($this->_options)) {
$collection = Mage::getModel('catalog/product')->getCollection();
$this->_options = array();
foreach ($collection as $product) {
$this->_options[] = array('value' => $product->getSku(), 'label' => $product->getSku());
}
}
$skus = $this->_options;
if ($withEmpty) {
array_unshift($skus, array('label' => '', 'value'=>''));
}
}
Como o SKU é um atributo de texto e as opções para sua entidade são criadas por padrão com o tipo int
você precisa alterar o tipo do seu atributo de entidade para text
Mas aconselho que você faça isso apenas se tiver alguns produtos em seu site.Se você tiver mais de 300-400 produtos, isso pode acabar prejudicando o desempenho, porque você terá que examinar a coleção de produtos cada vez que usar esse atributo.