Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Sorowanie danych wyjściowych
Forum PHP.pl > Forum > PHP > Frameworki
Avatarus
witam
Mam problem z posortowaniem wyników z tej części kodu:
  1. <?php foreach ($_associatedProducts as $_item): ?>
  2. <?php if ($_item->isSaleable()) : ?>
  3. <?php $_finalPriceInclTax = $this->helper('tax')->getPrice($_item, $_item->getFinalPrice(), true) ?>
  4. <tr>
  5. <td><span style="font-size: 8pt;"><?php echo $this->htmlEscape($_item->getName()) ?></span></td>
  6. <td class="a-right"><span style="font-size: 8pt;">
  7. <?php echo $this->getPriceHtml($_item, true) ?>
  8. <?php echo $this->getTierPriceHtml($_item) ?>
  9. </span></td>
  10. <?php if ($_product->isSaleable()): ?>
  11. <td class="a-center">
  12. <?php if ($_item->isSaleable()) : ?>
  13. <input type="text" name="super_group[<?php echo $_item->getId() ?>]" maxlength="12" value="<?php echo $_item->getQty()*1 ?>" title="<?php echo $this->__('Qty') ?>" class="input-text qty" />
  14. <?php else: ?>
  15. <p class="availability out-of-stock"><span><?php echo $this->__('Brak') ?></span></p>
  16. <?php endif; ?>
  17. </td>
  18. <?php endif; ?>
  19. </tr>
  20. <?php endif; ?>
  21. <?php endforeach; ?>

chciałbym żeby to było sortowane po
  1. $_item->getName()
a nie po ID.
Jak to zrobić?
zend
Dane sortuje się w zapytaniu, a nie w kodzie! Jednakże zakładajac że sortowanie musi nastąpić po stronie php, to mozesz nadpisać Zend_Db_Table_Rowset_Abstract dodać do niej metodę sortByName() która posortuje Ci dane tak jak chcesz
Avatarus
problem w tym że php znam, ale ZF już niestety nie,
podpowiesz gdzie można to zrobić?
Byłem pewny że w ZF jest jakaś metoda która sortuje zmienne z wynikami jakiegoś zapytania.
zend
Extending the Rowset class - ostatni nagłówek. A dane musisz posortować
1) jeśli wybierałeś dane kolekcji to sortujesz tylko po $_rows - najbardziej pewne wyjście, więcej zachodu
2) jeśli nie wybierałeś danych z kolekcji sotrujesz po $_data - dobre wyjście, mniej zachodu, bardziej podatne na błedy w przyszłości
3) jeśli wybrałeś troche danych patrz pkt 1
Nie mówiłem że będzie łatwo smile.gif
essey
Cytat(Avatarus @ 7.05.2010, 06:31:50 ) *
Byłem pewny że w ZF jest jakaś metoda która sortuje zmienne z wynikami jakiegoś zapytania.


Oczywiście, że jest. Zend ma swoja bibliotekę do obsługi zapytań do bazy.
Wystarczy, że w modelu, w miejscu gdzie pobierasz dane, dodasz parametry dla metody order, np.
  1. $select = $db->select()
  2. ->from( ...specify table and columns... )
  3. ->where( ...specify search criteria... )
  4. ->order( ...specify sorting criteria... );

Jeżeli chcesz, aby sortowało się po nazwie, robisz tak:
  1. $select->order( 'name ASC' ); // asc (a-z), desc (z-a)


Tutaj masz więcej informacji o samym budowaniu zapytań w zend: klik
Avatarus
dokładnie o to mi chodziło.
Panowie mam do waś wielką prośbę.
Załączam plik modelu z zenda + plik z prezentacją danych.
Czy jesteście mi w stanie pomóc tutaj posortować to.
Nie kumam jeszcze tego zenda na tyle zeby w tym mieszać a aplikacja już działa online.
Będę wdzięczny

Oto pliki:
Grouped.php: http://www.sendspace.pl/file/ae0e5529e92d5dee7561d80
Grouped.phtml: http://www.sendspace.pl/file/c6f2ff88dcf8372c9aa0b9b
essey
Mistrzu, teraz to mnie rozwaliłeś smile.gif Dlaczego wprowadziłeś nas w błąd? Sprawa nie tyczy się zend framework, a magento.
Bez znajomości zenda wprowadził byś te modyfikacje bez problemu, ale od zenda!
Magento jest to kod fimy Varien, która wykorzystała biblioteki ZF do napisania kobyły.
Oczywiście dalej moje sugestię są prawidłowe, jeżeli chodzi o budowę modelu, niemniej nie jestem w stanie stwierdzić która metoda odpowiada za grupowanie produktów.
Zdaje się, że wyświetlana jest belka nad produktami w magento, w której możesz definiować sposób sortowania oraz ilość produktów na stronę.
Dodatkowo, o ile dobrze pamiętam, w administracji jest możliwość ustawienia na podstawie jakiego parametru mają być sortowanie produkty. Nie musisz modyfikować tego na sztywno w kodzie.
Avatarus
nie wiedziałem ze to ma jakieś znaczenie.
Tak dokładnie chodzi o magento.
Sortowanie jest zaimplementowane ale nie tam gdzie to jest potrzebne.
Można sortować widok produktów po nazwie ale w widoku produktów, ja jednak potrzebuje posortować produkty zgrupowane w głównym produkcie.
Teraz wygląda to tak: http://sklep.hannah.pl/kurtki/letnie-wiose...ummer-2010.html
Chodzi o tabelkę z dostępnością produktów.
Teraz jak widać są one porozrzucane
a powinno być np tak:
Amira antracite 36
Amira antracite 38
Amira antracite 40
....
Żeby to ładnie wyglądało.
Ktoś ma pomysł jak to inaczej posortować?
essey
Edytuj produkt grupowy, edytując w nim kolejność (priorytet) wyświetlanych produktów. Zdaje się, że to własnie na podstawie tamtej listy a nie nazwy ani id jest generowana ta lista.
Avatarus
masz racje z tym sortowaniem przez edycje grupowego, jednak nie działa to i tak.
Zmieniając sortowanie na "nazwa" w panelu admina ładnie sortuje się po nazwie i jak odświeżę stronę sklepu to co prawda kolejność tych pozycji się zmienia, ale nie na taką jak w PA.
Już nie mam pomysłu jak to poprawić.

no i w końcu to rozgryzłem.
Przeszukałem z 50 pare plików, zmarnowałem kilka godzin ale sie udało.

Plik o tóry chodziło to:
app/code/core/mage/catalog/model/product/type/grouped.php

Wystarczyło w dodać to:
Kod
public function getAssociatedProducts($product = null)
    {
        if (!$this->getProduct($product)->hasData($this->_keyAssociatedProducts)) {
            $associatedProducts = array();

            if (!Mage::app()->getStore()->isAdmin()) {
                $this->setSaleableStatus($product);
            }

            $collection = $this->getAssociatedProductCollection($product)
                ->addAttributeToSelect('*')
                ->addFilterByRequiredOptions()
                ->setPositionOrder()
        ->addAttributeToSort('sku', 'asc') <----- tutaj dodałem :)
                ->addStoreFilter($this->getStoreFilter($product))
                ->addAttributeToFilter('status', array('in' => $this->getStatusFilters($product)));

            foreach ($collection as $product) {
                $associatedProducts[] = $product;
            }

            $this->getProduct($product)->setData($this->_keyAssociatedProducts, $associatedProducts);
        }
        return $this->getProduct($product)->getData($this->_keyAssociatedProducts);
    }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.