Problem z zapisem checkboxa ‚Użyj wartości domyślnej’ w panelu administracyjnym

Home / Blog / Problem z zapisem checkboxa ‚Użyj wartości domyślnej’ w panelu administracyjnym

Ostatnio w pracy na jednej z instalacji Magento (po upgrade z wersji 1.3.2.4 na 1.4.1.1), gdzie było dodanych kilka widoków sklepów, pojawił się problem z zapisem cech kategorii (tylko w przypadku, gdy kategoria była dodana po wyborze jednego z widoków sklepów). Okazało się, że nie można zapisać cechy z odznaczona opcją ‚Użyj wartości domyślnej’ (dla danego widoku sklepu). Po zapisie checkbox automatycznie ustawiał się na zaznaczony, a wartość cechy pozostała taka, jaka została wybrana lub w ogóle się nie zapisała.
Problem tkwił w tym, że cecha kategorii została zapisana tylko do danego widoku sklepu. Nie została zapisana do widoki zerowego (0), czyli widoku panelu administracyjnego.
Można to sprawdzić w bazie danych w tabeli ‚catalog_category_entity_varchar‚. Na poniższych obrazkach widać zrzut tej tabeli kiedy kategoria była tworzona na widoku konkretnego sklepu (obrazek 1) oraz na widoku ogólnym (obrazek 2).

Widok sklepu

Widok ogólny

Na pierwszym obrazku widać, że tylko 4 atrybuty zostały zapisane do widoku zerowego, reszta do konkretnego widoku sklepu (3).
Rozwiązaniem problemu jest tworzenie kategorii i podkategorii tylko z widoku ogólnego. Jednak nie w każdym przypadku jest to możliwe. Może zaistnieć sytuacja, że osobą zalogowana w panelu administracyjnym nie ma uprawnień do tego, aby widzieć całe drzewo kategorii, a co za tym idzie nie może dodawać kategorii na widoku ogólnym (widzi tylko kategorie z danego widoku sklepu). Tutaj konieczne jest ręczne dodanie do bazy wpisów dla danych cech kategorii do widoku zerowego (0). Można to zrobić edytując plik ‚app/code/core/Mage/Adminhtml/controllers/Catalog/CategoryController.php‚ i znając ‚attribute_id‚ danej cechy kategorii dla której chcemy dodać wpis do widoku zerowego. W pliku odnajdujemy funkcję ‚saveAction()‚ (linia ok. 250) i w sekcji ‚try‚ w pierwszej kolejności sprawdzamy, czy dodajemy, czy edytujemy kategorię, następnie po ‚$category->save();‚ prostym if’em sprawdzamy czy dodajemy kategorię z innego widoku niż zerowy (0), łączymy się z bazą danych i wykonujemy niezbędne wpisy do tabeli catalog_category_entity_varchar.
Kod może wyglądać mniej więcej tak:

try {
$nowa = false;
if(!$category->getId()) {
$nowa = true;
}
$category->save();
if($storeId != 0 && $nowa):
$read = Mage::getSingleton('core/resource')->getConnection('core_read');
$wynik = $read->query("
INSERT INTO sklep_catalog_category_entity_varchar (entity_type_id, attribute_id, store_id, entity_id, value) VALUES
(3, 36, 0, ".$category->getId().", ''),
(3, 39, 0, ".$category->getId().", ''),
(3, 48, 0, ".$category->getId().", ''),
(3, 52, 0, ".$category->getId().", ''),
(3, 40, 0, ".$category->getId().", ''),
(3, 49, 0, ".$category->getId().", ''),
(3, 50, 0, ".$category->getId().", ''),
(3, 35, 0, ".$category->getId().", ''),
(3, 51, 0, ".$category->getId().", '');
");
endif;
Mage::getSingleton('adminhtml/session')
->addSuccess(Mage::helper('catalog')
->__('The category has been saved.'));
$refreshTree = 'true';
}

Na poniższym obrazku widać, że zapytania się wykonały i wpisy zostały dodane.

Widok sklepu