Komponenta v komponentě nefunguje

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

Mám jednoduchý presenter se 2 továrnami.

Problém je, továrna Cards v šabloně Cards/default.php nevidí kontrolku {control paginator}

Bavili jsme se o tom s @matej21 který mi poradil celou logiku (dotaz i stránkování přesunout do komponenty Cards). Tímto způsobem to udělal na jiném projektě, , ale koukal jsem nedávno na starší ukázkovou aplikaci – TODO List od @FilipProcházka a ted tam dělal to samé, do komponenty strkal selection, tj. to co mám já,, tak jsem si to chtěl zkusit tady taky.

Ve zkratce rečeno, tenhle kód je funkční, správně mi zobrazí pouze jeden záznam (díky nastavenému paginatoru), ale ta kontrolka mi nejde vyvolat (prostě dostanu informaci o tom, že neexistuje http://files.rjwebdesign.cz/…--t---pn.png )

Nešlo by to nějakým fíglem, který já neznám?

<?php

namespace App\FrontModule\Presenters;

use Nette,
	App,
	App\Model,
	App\FrontModule\Components;

/**
 * Favorite presenter.
 */
class FavoritePresenter extends BasePresenter
{

	public function renderDefault()
	{
		if (!$this->user->isLoggedIn())
			$this->redirect("Page:default");
	}

	public function createComponentPaginator()
	{
	    return new App\FrontModule\Components\VisualPaginator;
	}

 	protected function createComponentCards()
	{

		$rows = $this->userModel->getCards();
		$rows->select("user_fav_id");
		$rows->where(":fav_cards.user_id = ?", $this->user->identity->id);

		$vp                      = $this['paginator'];
		$paginator               = $vp->paginator;
		$paginator->itemsPerPage = 1;
		$paginator->itemCount    = $rows->count("*");

		$rows     = $rows->limit($paginator->itemsPerPage, $paginator->offset);
		$selected = $rows;

		$control = new Components\Cards($selected, $this->helpers);
  		// 	$control->addComponent($this->createComponentPaginator, 'paginator');
		return $control;
	}

}

Pro souhrn všechny zdrojáky, které spolu souvisí http://pastebin.com/BScwHkyu

Editoval Kcko (10. 1. 2015 11:21)

Kcko
Člen | 470
+
0
-

Tak už jsem to vyřešil. Kdyby řešil někdo něco podobného. Netvrdím, že je to zcela OK, ale funguje.

Továrnu jsem přesunul do komponenty Cards.

	public function createComponentPaginator()
	{
	    return new App\FrontModule\Components\VisualPaginator;
	}

Selection si předávám pořád stejně, akorát ji upravím v render metodě komponenty Cards.

	public function renderNiceListRef()
	{
		$this->template->setFile(__DIR__ . '/../templates/components/Cards/nice-list-ref.latte');


		$vp                      = $this['paginator'];
		$paginator               = $vp->paginator;
		$paginator->itemsPerPage = 1;
		$paginator->itemCount    = $this->selected->count("*");

		$this->selected           = $this->selected->limit($paginator->itemsPerPage, $paginator->offset);

		$this->template->selected = $this->selected;

		$this->template->render();
	}

Editoval Kcko (10. 1. 2015 12:59)