Problem z kolekcją produktów - nieprawidłowe dane cenowe lub brak wyświetlania pozycji w magazynie

9

Pobieram kolekcję produktów na podstawie bieżącej kategorii. Potrzebuję tej kolekcji, aby zawierała zarówno produkty z zapasów, jak i z zapasów, a także, aby dane dotyczące cen były wyświetlane poprawnie.

Mój sklep jest skonfigurowany do przechowywania cen produktów jako zawierających podatek i do pokazywania cen zarówno jako włączających, jak i wyłącznych na stronie sklepu.

Kod uzyskiwania kolekcji jest następujący:

$category = Mage::registry('current_category'); 
$_productCollection = Mage::getModel('catalog/product')->getCollection()
                ->addCategoryFilter($category)
                ->addAttributeToSelect(['sku', 'name', 'price'])
                ->addAttributeToFilter('status', 1)
                ->addAttributeToSort('jump_number', Varien_Data_Collection::SORT_ORDER_ASC); 

Problem z powyższym polega na tym, że podczas ładowania bloku cen za pomocą getPriceHtml()metody zarówno ceny włączające, jak i wyłączne są wyświetlane jako cena obejmująca.

Po kilku badaniach odkryłem, że dodanie addFinalPrice()metody do mojej kolekcji daje mi oczekiwaną cenę - prawidłową wyłączną i prawidłową cenę włączającą.

Jeśli jednak podam tę addFinalPrice()metodę, moja kolekcja nie zawiera już produktów z magazynu.

Czy istnieje sposób na zwrócenie prawidłowych danych cenowych i posiadanie kolekcji zawierającej zarówno produkty przeznaczone do sprzedaży, jak i brak w magazynie?

BrynJ
źródło

Odpowiedzi:

3

addFinalPrice()również dzwoni applyProductLimitationFilters. Ta metoda stosuje kilka filtrów w zależności od konfiguracji kolekcji, na przykład filtr sklepu, który pokazuje tylko produkty widoczne w bieżącym sklepie.

Jeśli chcesz załadować wszystkie produkty, widoczne lub nie, na przykład bez filtra cen, możesz usunąć filtr sklepu w ten sposób przed wywołaniem addFinalPrice():

$collection->setStoreId(null);
Fabian Schmengler
źródło
@fschmengler - dzięki, to wydaje się lepszą opcją.
BrynJ
1

Rozwiązałem teraz ten problem i jest on w rzeczywistości dość prosty i logiczny - po prostu musiałem przejść do Configuration -> Catalog -> Inventoryopcji „Wyświetl produkty z magazynu” na Yes.

Po ustawieniu powyższej opcji Yesi addFinalPrice()dodaniu metody do kolekcji otrzymuję teraz wszystkie moje produkty i prawidłowe dane cenowe.

BrynJ
źródło
To dobrze, jeśli chcesz wszędzie pokazywać brakujące produkty . Jeśli chodzi tylko o tę kolekcję, zobacz moją odpowiedź poniżej
Fabian Schmengler,