implementace VisualPaginator

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

Mám problém s implementací komponenty Visual Paginator.
V základu jsem vycházel z ukázek u popisu komponenty,jenomže pořád to hází.

InvalidStateException

Unknown CurlyBrackets macro ‚{control vp}‘ in file ‚C:\xampp\htdocs\nette\rs\document_root/../app/templates/FrontModule/Default/default.phtml‘.

můj kód

<?php
	public function renderDefault(){
		....
		$vp = new VisualPaginator($this, 'vp');
		$paginator = $vp->getPaginator();
		$paginator->itemsPerPage = $limit;
		$paginator->itemCount = $recordsCount;
	}

?>

Nemohlo by to nějak souviset s tím, že filtr CurlyBracketsFilter se nastavuje už v metodě beforeRender()?

Všem předem děkuji za případnou pomoc.

jasir
Člen | 746
+
0
-

Nějak tam teď nic nevidím, postni jsem ještě tu šablonu kde používáš ten widget a také si překontroluj, že neregistruješ dvakrát ve své struktuře presenterů CurlyBracketsFilter, nějak si teď u posledních revizí nejsem jistý jestli to vyhodí chybu/varování.

Jenom snad – určitě si to přepiš to createComponent{name}, viz zde na fóru changelog a další témata.

Editoval jasir (25. 7. 2009 0:32)

Saska
Člen | 23
+
0
-

tak jsem to předělal na createComponent{name}, a uz to chodi, takže díky za radu.

Klokan
Člen | 47
+
0
-

Ahojte, můžete mi prosím někdo poradit v čem by mohl být problém ?
Chci zaregistrovat VisualPaginator pomocí createComponent, ale neustále to hlásí, že komponenta neexistuje:

<?php
  protected function createComponentVisualPaginator()
  {
     return new VisualPaginator($this, 'vp');
  }

  public function renderDefault()
  {
    $vp = $this->getComponent('vp');
    $paginator = $vp->getPaginator();
      ...
  }
?>

Pokud použiju vytvoření v metodě, vše funguje

<?php
  public function renderDefault()
  {
     $vp = new VisualPaginator($this, 'vp');
     $paginator = $vp->getPaginator();
      ...
  }
?>

Zkoušel jsem i toto, ale stále stejná hláška:

<?php
    protected function createComponentVisualPaginator()
    {
        // Vytvor komponentu
        $vp = new VisualPaginator();

        // Pripoj ji k presenteru
        $this->addComponent($vp, 'vp');
        return $vp;
    }

?>

Nevidíte tam prosím někdo chybu ?
(Mám verzi nette 0.9.1)

vlki
Člen | 218
+
0
-

Jde o to, že v továrničce buď nesmíš komponentu hned zaregistrovat do stromu komponent a pokud ano, tak se stejným názvem jako má ta továrnička.

Pokud tedy vytváříš komponentu ‚vp‘, kterou pak v šabloně vykresluješ pomocí {control vp}, tak musíš mít továrničku nějak takto…

	protected function createComponentVp($name) // jako parametr se předává samotný název komponenty, pokud je potřeba
	{
		return new VisualPaginator; // není potřeba připojovat do stromu komponent, tím že se vrátí pomocí return, tak bude připojena
		// nebo
		new VisualPaginator($this, $name);
		// nebo
		$vp = new VisualPaginator;
		$this->addComponent($vp, $name);
	}

Doufám, že to pomohlo.

Klokan
Člen | 47
+
0
-

Super, funguje. Díky moc. Tahle jediná kombinace mě nenapadla :o).