]]>

Magento - niechciane atrybuty na stronie produktu

2012-06-13 15:49 przez administrator

Magento pozwala na utworzenie dodatkowych atrybutów użytkownika dodawanych do zestawów cech produktów. Można wykorzystać je między innymi do prezentacji dodatkowych właściwosci widocznych w sklepie na stronie produktu w postaci tabeli "Informacje dodatkowe". Pojawia się tu pewien problem, który występuje w różnych wersjach Magento. Dotyczy sytuacji kiedy utworzony został atrybut typu lista wyboru i nie została w nim wybrana wartość domyślna.

Przykładowo dodajesz atrybut "Gwarancja" z wartością do wyboru spośród "1 rok", "2 lata", "3 lata" i nie wybierasz domyślnej wartości, ponieważ atrybut nie będzie dotyczyć wszystkich produktów o danym zestawie cech.

Tworząc nowe produkty, w niektórych z nich nie chcesz więc ustawiać tego atrybutu pozostawiając pole puste. Pomimo braku ustawionej wartości ten atrybut i tak zostanie wyświetlony na stronie produktu.

W Magento 1.4.x w tabeli widoczne będzie:

Gwarancja: Nie

 W Magento 1.7.x natomiast:

Gwarancja: N/D

Być może i produkt nie posiada gwarancji, ale niekoniecznie możesz chcieć zwracać na to uwagę klientów eksponując tę informację w ofercie sklepu. Takich atrybutów moze być też więcej i niepotrzebnie będą wprowadzać zamieszanie w opisie produktu.

Z takich, czy innych powodów jest to więc raczej nieporządane działanie. Jeśli chcesz, aby atrybuty bez przypisanych wartości nie wyświetlały się na stronie produktu w Informacjach Dodatkowych, należy wprowadzić drobną modyfikację w module Magento.

interesujący Cię plik znajdziesz pod ścieżką:

app/code/core/Mage/Eav/Model/Entity/Abstract.php

W okolicach linii 866 znajdziesz fragment kodu:

if (!empty($selects)) {
$values = $this->_getReadAdapter()->fetchAll(implode(' UNION ', $selects));
foreach ($values as $valueRow) {
$this->_setAttribteValue($object, $valueRow);
}
}

Zamień go na:

if (!empty($selects)) {

foreach($selects as $query)
{
$query->where('`value` IS NOT NULL');
}
$values = $this->_getReadAdapter()->fetchAll(implode(' UNION ', $selects));
foreach ($values as $valueRow) {
$this->_setAttribteValue($object, $valueRow);
}
}

Aby zagwarantować zachowanie modyfikacji w przypadku przyszłej aktualizacji Magento plik skopiuj pod lokalizację:

app/code/local/Mage/Eav/Model/Entity/Abstract.php

Vuala.

Wróć

Zobacz również