W ten sposób otrzymuję przedmioty z koszyka:
$quote = Mage::getModel('checkout/cart')->getQuote();
$items=$quote->getAllitems();
Chciałbym zrobić coś takiego:
$items->sortBy('updated_at','desc');
Jaki jest właściwy sposób, aby to zrobić?
Kusi mnie, aby zrobić coś takiego:
$productArray=array();
foreach($items as $item){
$product=$item->getProduct();
array_push($productArray,$product);
}
$productArray = $this->sortArray($productArray);
protected sortArray($productArray){
...sort by updated date;
return $sortedArray
}
Musiałbym jednak utworzyć kilka obiektów dateTime, aby łatwo porównać te wartości, co wydaje się trochę skomplikowane obliczeniowo.
Odpowiedzi:
Brak funkcji sortowania według
ponieważ
getAllItems
pochodzą zarray
przedmiotu i zgodnie z moimconcept you cannot sort this by field.
W takim przypadku możesz użyć
getItemsCollection().
funkcji sortowania seOrder według dowolnego polaEdytować:
Przepisz klasę Mage_Sales_Model_Quote
Będzie to lepszy pomysł, aby przerobić klasę
Mage_Sales_Model_Quote
.W to wezwanie Magento jestcalled getAllItems()
funkcja i getItemsCollection() function
główny czuły dla uzyskać wszystkie elementy.Przepisz klasę:
Użyj funkcji setOrder () do sortowania:
Funkcja setOrder () sortuje kolekcję przedmiotów według pól
źródło
Rozwiązanie:
Przepisz
Mage_Sales_Model_Quote::getAllVisibleItems
z nim swoją metodę :Napisane wcześnie:
Prawdopodobnie nie jest to bardzo dobre rozwiązanie w tej sytuacji, ale pamiętaj o tym. (Magento ma wiele takich miejsc, w których może to być przydatne)
Wewnątrz metody getData () umieść dowolne pole, które chcesz posortować. W twoim przypadku może być
updated_at
. W przypadku wstawianiaupdated_at
lepiej wstaw jego znacznik czasu.źródło