Pagination stránkování Call to a member function page() on array
- vanaveno
- Člen | 144
Ahojte potřeboval bych rozchodit stránkování.
Tohle mi funguje.
1. případ
<?php
public function getProducts()
{
return $this->database->table('products');
}
$products = $this->productManager->getProducts();
// a do šablony pošleme pouze jejich část omezenou podle výpočtu metody page
$lastPage = 0;
$this->template->products = $products->page( $page, 20, $lastPage)->order('RAND()');
$this->template->page = $page;
$this->template->lastPage = $lastPage;
?>
2.případ
Ale když použiji tuto metodu, kterou potřebuji
v modelu mám
<?php
public function getAllProducts($search)
{
$item = new ProductItem;
$item->productId = $product->productId;
$item->name = $product->name;
$item->publish = $product->publish;
....
$this->addItem($item->productId, $item);
}
public function addItem($productId, ProductItem $item)
{
$this->items[$productId] = $item;
}
public function getItems()
{
return $this->items;
}
// v presenteru mám
$products = $this->productManager->getItems();
$this->template->products = $products->page( $page, 20, $lastPage);
$this->template->page = $page;
$this->template->lastPage = $lastPage;
?>
Hází mi to chybu Call to a member function page() on array .
Jak to prosím upravit, aby do page() nešly hodnoty jako array, popřípadě
jestli není jiný způsob stránkování, který by se hodil
k 2. případu.
Děkuji za případnou pomoc
Vana
Editoval vanaveno (14. 2. 2020 11:04)
- David Matějka
- Moderator | 6445
takze ty si nactes z databaze vsechny produkty z dane kategorie, dopocitas nejakou hodnotu a pak to chces strankovat?
- David Matějka
- Moderator | 6445
page je metoda na Selection, takze nelze. ale proc to delas takhle spatne? proc neprovedes paginaci nad selection, ktere pak nejak transformujes?
- vanaveno
- Člen | 144
David Matějka napsal(a):
page je metoda na Selection, takze nelze. ale proc to delas takhle spatne? proc neprovedes paginaci nad selection, ktere pak nejak transformujes?
Promiň ale teď tomu nerozumím. Jakož nejprve vypíši produkty z databáze a potom dopočítám jejich hodnoty jako je marže a dph?
- David Matějka
- Moderator | 6445
ne, nejprve si vyberes z databaze data, ktera chces zobrazit (to znamena profiltrovana a strankovana, abys nenacital vechny polozky, jako to delas nyni) a tyto data tranformujes pred tim, nez je posles do sablony
- Kamil Valenta
- Člen | 822
Je ohromný slow down tahat z DB milión záznamů, ke každému z nich dopočítat marži a DPH a pak jich 10 zobrazit a 9999990 zahodit.
Pokud chceš podle té marže či DPH i řadit či filtrovat, tak si to dopočítávej už na úrovni DB, ať to jde do Selectiony.
- vanaveno
- Člen | 144
No já to mám takhle, nejprve vytáhnu z databáze produkty například podle kategorie, tady provedu transformaci cen a potom to pošlu do šablony. (nevytahuji všechny data). Takže jak píše David Matějka, ještě než to pošlu do šablony, tak to musím stránkovat? No mrknu na to až večer. Každopádně zatím díky za pomoc a ještě se nejspíše ozvu, kdyby na to nepřišel.
- Kamil Valenta
- Člen | 822
Ale ta kategorie, předpokládám, nemá omezený počet produktů, takže jich klidně ten milión být může.
Ideální je samozřejmě vytáhnout jen to, co budeš skutečně zobrazovat. Tedy vytáhnout jen N produktů, pokud jich máš N na stránce.