Stránkování

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
weckho
Člen | 94
+
0
-

Ahoj,

zkoušel jsem si na svůj web implementovat stránkování z Quick Startu, ale jsou tam SQL dotazy přímo v presentru. Já je mám v modelu a nevím, jak to zkloubit. Pro příklad – v příkladu je v presentru:

// retrieving data
$query = $this->db->select('*')
->from($table)
->offset($this->page * $rowsPerPage)
->limit($rowsPerPage);

Já mám v modelu:

	public function findAll()
	{
		return $this->db->select('%n.*, COUNT(%n) AS `pocetKomentaru`', $this->table, 	$this->commentsTable . '.id_news')
->from($this->table)
->leftJoin($this->commentsTable)
->on('%n = %n', $this->table . '.id', $this->commentsTable . '.id_news')
->groupBy($this->table . '.id');
	}

Nevím si s tím rady.. Mohl by mi někdo nastínit, jak to vyřešit?

Děkuji moc za pomoc.

weckho
Člen | 94
+
0
-

Jaký je vlastně rozdíl ve VisualPaginatoru a v tom stránkovači z QuickStartu? Myslel jsem celou dobu, že se jedná o dvě rozdílné věci – že VisualPaginator obsah nastránkuje jen vizuálně (celý obsah je ve zdrojovém kódu, ale JavaScriptem se zobrazí jen daný „výřez“).

Pokud tomu tak není, je potřeba VisualPaginator nejdříve stáhnout, nebo již je součástí nette? A pokud je potřeb jej stáhnout, kde by se měla v knihovnách složka nacházet?

Děkuji moc za doplňující info.

Honza Marek
Člen | 1664
+
0
-

VisualPaginator je v Nette\Extras, čili není součástí jádra Nette. A je to vpodstatě ten stránkovač s quick startu, ale novější a lepší verze.

weckho
Člen | 94
+
0
-

Mohl by mi prosím ještě někdo poradit, kam mám ten stažený VisualPaginator hodit? Když ho dám do libs/Nette, tak mi to nejede (Class ‚VisualPaginator‘ not found).

Děkuji.

_Martin_
Generous Backer | 679
+
0
-

weckho napsal(a):

Mohl by mi prosím ještě někdo poradit, kam mám ten stažený VisualPaginator hodit? Když ho dám do libs/Nette, tak mi to nejede (Class ‚VisualPaginator‘ not found).

Děkuji.

Možná (nejsem si jist) RobotLoader tuhle složku ignoruje (takže pokud nepomůže následující krok, zkus změnit umístění knihovny třeba na libs/extras), ale tak či tak, vymazal jsi dočasné soubory RobotLoaderu?

weckho
Člen | 94
+
0
-

Omlouvám se za hloupé dotazy, ale kde najdu ty dočasné soubory RobotLoaderu?

Díky

_Martin_
Generous Backer | 679
+
0
-

Pokud jsi nic nepřenastavoval, tak v dočasné složce app/temp, respektive v app/temp/c-Nette.RobotLoader.

weckho
Člen | 94
+
0
-

Stále nemohu stránkování rozchodit. Stránka mi píše chybu:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'COUNT APPLY LIMIT 3 0' at line 1

Metoda v presentru vypadá následovně:

public function renderDefault()

	{

		$this->template->title = "Titulek webu";

		$novinka = new Novinky;
		$dataSource = $novinka->findAll()->orderBy('date', 'DESC');

		$vp = new VisualPaginator($this, 'paginator'); //vytvoříme komponentu s názvem `paginator`
        	$vp->paginator->itemsPerPage    = 3; //nastavíme zobrazení tří položek na stránku
        	$vp->paginator->itemCount       = $dataSource->count(); //řekneme paginátoru kolik máme celkem položek

        	$this->template->novinky       = $dataSource->applyLimit($vp->paginator->itemsPerPage, $vp->paginator->offset)->fetchAll(); //získáme požadovaná data
	}

A metoda findAll v modelu následovně:

public function findAll()

	{

		return $this->db->select('%n.*, COUNT(%n) AS `pocetKomentaru`', $this->table, $this->commentsTable . '.id_news')
                ->from($this->table)
                ->leftJoin($this->commentsTable)
                ->on('%n = %n', $this->table . '.id', $this->commentsTable . '.id_news')
                ->groupBy($this->table . '.id');
	}

Děkuji za pomoc.

Honza Kuchař
Člen | 1662
+
0
-

Vypiš si ten dotaz co šel na databázi a hned přijdeš na to, kde je chyba.