stránkování uvnitř komponenty

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

zdravím, potřeboval bych nakopnout co dělám špatně, mám komponentu :

	class MyTable extends BaseComponent{

		public function __construct($parent,$name){
			parent::__construct($parent,$name);
		}

		protected function  createComponentVp($name) {
			return new \VisualPaginator($this, $name);
		}

		public function render(){
			$count = ModelFactory::getModel()->count();
			$vp = $this['vp'];
	    		$paginator = $vp->getPaginator();
	    		$paginator->itemsPerPage = 8;
	    		$paginator->itemCount   = $count;

			$template = $this->template;
			$template->setFile(dirname(__FILE__).'/table.latte');
			$template->table = ModelFactory::getModel()->getTableData()
				->limit($paginator->itemsPerPage,$paginator->offset);
		}

	}

dále v šabloně komponenty table.latte mám toto

<table>
.... zobrazeni tabulky
</table>
{control vp}

a v presenteru mam tovarnicku

protected function createComponentTable($name){
	return new MyTable($this,$name);
}

a to vse zobrazuji v nejake sablone napr. default.latte takto:

	{block content}
		{control myTable}

vše se zobrazí správně, ale stránkování nejede. Tuším že to bude něco s parametrem (vp-page)
díky předem za info

Filip Procházka
Moderator | 4668
+
0
-

Když pominu to otřesné ModelFactory::getModel(), změnil tento řádek

->limit($paginator->length, $paginator->offset);

Pokud používáš dibi a fluent zápis, pak

$model->getIterator($paginator->offset, $paginator->length);

Pak bych ještě doplnil, že máš zbytečně složité továrničky:

protected function createComponentTable()
{
	return new MyTable;
}

a

protected function createComponentVp() {
	return new VisualPaginator;
}

Jinak v kódu chybu nevidím, nebude nějaký problém v tom modelu?

Editoval HosipLan (13. 7. 2011 15:44)

Aurielle
Člen | 1281
+
0
-

Nikde tam neidentifikuješ stránku a ani ji pak nepředáváš VisualPaginatoru, vidím-li správně.

Filip Procházka
Moderator | 4668
+
0
-

To ale AFAIK nemusíš, VP si stránku předá sám, od toho má persistentní parametr.

DobryDen
Člen | 2
+
0
-

ahoj, chyba byla opravdu v modelu a když už jsi to nakousl co je špatně na tomto přístupu ??

class ModelFactory{

	private static $xModel;
	private static $yModel;

	public static function getXModel(){
		if(!self::$xModel){
			self::$xModel = new XModel();
		}
		return self::$xModel;
	}

	public static function getYModel(){
		if(!self::$yModel){
			self::$yModel = new YModel();
		}
		return self::$yModel;
	}
}

a pak jak je v prvním příspěvku, volám pomocí ModelFactory::getNejakyModel()->nejakaMetoda()

Filip Procházka
Moderator | 4668
+
0
-

No jednak ta třída lže o svém účelu, factory něco vytváří, ty jsi z toho udělal jakýsi statický container. A statické třídy jsou zlo™.

Něco si o tom můžeš přečíst zde: http://zdrojak.root.cz/…y-injection/

Pokud tě to zaujme, pak si nastuduj Dependency Injection Container zde na fóru, je tu hromada materiálů.

o5
Člen | 416
+
0
-

HosipLan napsal(a):

No jednak ta třída lže o svém účelu, factory něco vytváří, ty jsi z toho udělal jakýsi statický container. A statické třídy jsou zlo™.

Hele HosipLan uz je to fakt tragicky..Je sice super, ze sis precetl neco o DI a vsude jej pouzivas, ale necpi ho lidem! Nemuzu si tenhle prispevek proste odpustit, tak se prosim zamysli a vyklidni. Diky

Filip Procházka
Moderator | 4668
+
0
-

Tak jsem se zamyslel a abych byl korektní tak ještě dodám, že „na tvém přístupu není nic špatně“ a pokud se ti dobře používá tak v tom směle pokračuj a nenech se odradit :) ale pokud chceš zdokonalovat své schopnosti, měl by jsi si ten seriál na Zdrojáku alespoň přečíst ;)

A vyklidňovat se nebudu, a příště na takové příspěvky nebudu ani odpovídat :)

Patrik Votoček
Člen | 2221
+
0
-

o5 napsal(a):

Hele HosipLan uz je to fakt tragicky..Je sice super, ze sis precetl neco o DI a vsude jej pouzivas, ale necpi ho lidem! Nemuzu si tenhle prispevek proste odpustit, tak se prosim zamysli a vyklidni. Diky

ROFL

V první řadě vysvětlovat lidem „čistější řešení“ (je obecně uznávané že DI + container je „čistější řešení“ než Service Locator). Je naopak dobře (Co bych dal za to kdyby „čistější řešení“ někdo tlačil do mě). Pokud člověku nováčkovi neřekneš že něco dělá „špatně“ stěží si toho všimne (a čím dříve se to doví tím lépe).

Vyklidnit by jsi se měl spíš ty. Pokud srovnám úroveň „ostrosti“ příspěvků od 1 do 10 (kde 1 je madras a 10 fal) tak je hosiplan někde na 2 max 3 a ty na 7 možná 8. :-)

Prosím nenavážeme se tady takhle do sebe je to zbytečné.

o5
Člen | 416
+
0
-

Ježiš marja, další DI evangelista. Tys tady chyběl!

Dovolil jsem si okomentovat nevybíravý způsob propagandy DI HosipLana

Když pominu to otřesné …

Statické třídy jsou zlo™ …

on to, co mi vadilo, v dalším příspěvku napravil a ozve se uřvaný dítě co ničil dokumentaci při jejím updatu.. (ber to prosím s rezervou :-D)

Vysvětlovat lidem čistější řešení je samozřejmě správné (o čem by se dalo v tomhle případě polemizovat), ovšem tenhle styl vysvětlování mě opravdu tahá za uši a musel jsem se ozvat. Sleduji tohle fórum celkem dost a už delší dobu se to ve mně hromadilo (přispěly tomu i komentáře na zdrojáku). Já vím, zní to blbě, ale nedalo se to už dál držet v sobě :-)

Tímto bych to ukončil :-)

Editoval o5 (16. 7. 2011 22:11)

Filip Procházka
Moderator | 4668
+
0
-

To je roztomilé, ty ho urazíš a pak chceš, aby to bral s rezervou? :)

Víš opakovat spoustě nováčkům (i ne-nováčkům) každý den dokola, že by si měli nastudovat tohle a tohle. Ono to člověka po čase omrzí a některé slušnosti začne vypouštět. Což samozřejmě není dobře, ale občas už prostě nemám náladu něco přeslušněle vysvětlovat a prosit někoho, aby se uvolil a klikl na odkaz a přečetl si laskavě článek, když bude mít volnou chvilku… Je to v jeho zájmu, tak ať se taky trochu snaží.

Já ti nevím, doufal jsem, že jsem ho neurazil a slušně jsem ho nasměroval. I to „TM“ tomu dodalo trochu nadsázky, nebo ne?

PS.: Nic proti tobě @**DobryDen**, ani nikomu jinému, jenom si tu trénuju nadsázku :)

PS2.: Hodil by se moderátor, který to tu zamkne, než se tu sežereme.

Petr Motejlek
Člen | 293
+
0
-

Co bych já dal za to, kdyby když jsem s Nette začínal, byla DI alespoň na takové úrovni, jako je dneska… ;) Taky ji teď cpu každému druhému, protože řeší spoustu problémů. Jasně, že není všemocná. Na některý věci nestačí, nebo se na ně vůbec nehodí. To, co DobryDen používá jako ModelFactory, je ale nádhernej příklad třídy, která by DI využila úplně krásně ;).

Pokud se někomu nelíbí nasazení DI v případě ModelFactory, ať sem klidně napíše proč. Tohle je diskuze, tak ať se účastní všichni. Nikdy nikdo nikoho do ničeho nenutí ;). Ale rozhodně si nikdo nezaslouží prudění za to, že se diskuze účastní.

Patrik Votoček
Člen | 2221
+
0
-

o5 napsal(a):

on to, co mi vadilo, v dalším příspěvku napravil a ozve se uřvaný dítě co ničil dokumentaci při jejím updatu.. (ber to prosím s rezervou :-D)

tímhle jsi jenom potvrdil to co jsem napsal a nemá smysl se k tomu dál vyjadřovat.

David Grudl
Nette Core | 8228
+
+1
-

Panové, zkuste se podívat na své rok staré kódy a podle toho volte na fóru slova. Pokud jste včera objevili DI, gratuluju, ale neznamená to, že všechno ostatní je otřesné a ostatní jsou hlupáci. Protože zítra se posunute zase někam dál a za dnešní pýchu se budete leda stydět.

Hoodas
Člen | 6
+
0
-

To bych skoro „lajknul“, kdyby to tu šlo :-)