Vypnutí bloku → vypnutí SQL dotazů

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

Mám v layoutu jeden konkrétní blok:

{block #left_sidebar}

{/block}

V tomto bloku se zobrazují nějaké záznamy z databáze. Tyto informace se tam předávají skrze BasePresenter v metodě startup().

<?php
abstract class Front_BasePresenter extends NPresenter {
	protected function startup() {
		parent::startup();
		$articles = new Articles;
		$this->template->lastArticles = $articles->getArticles()->limit(3)->fetchAll();
?>

Ovšem v okamžiku, kdy třeba na některé konkrétní straně (= kombinace presenter/view) budu chtít tenhle blok skrýt, budu taky chtít, aby se ty dotazy zbytečně nevykonávaly, když se stejně data nemají kde zobrazit…

Jde třeba nějak v presenteru zpětně zjistit, které bloky se budou zobrazovat a podle toho předání těch dat z databáze podmínit? Z hlediska životního cyklu asi ne, že?

Edit:

Sice by asi pomohlo, kdybych to zbytečně rovnou nezískával už v presenteru skrz dibi::fetchAll(), ale i tak v tom bloku může být spousta ne-databázového kódu, který se zbytečně musí vykonat…

Editoval maarlin (29. 3. 2011 20:45)

Ondrej
Člen | 110
+
0
-

Staci cely kod zapouzdrit do metody render() noveho Controlu, ktery se umisti do {block}.

Honza Kuchař
Člen | 1662
+
0
-
  1. v sablone volat neco jako $preseter->getMyData()
  2. udelej to jako komponentu
Filip Procházka
Moderator | 4668
+
0
-

Doporučuji si přečíst toto vlákno: https://forum.nette.org/…lona-v-cache#…

PS: líbí se mi nápad s komponentou ;)