Parametry z šablony komponenty se při předávání komponentě ztratí
- genetic
- Člen | 4
Zdravím,
podobné věci se tu sice řešili ale odpověď na tohle jsem nenašel.
Mám aplikaci rozdělenou do modulů:
- UIModule
- MenusModule
- ArticlesModule
- …
V UI modulu mám presentery, layouty atd., v ostatních modulech jsou jednotlivé komponenty.
Problém s kterým se potýkám:
V MenusModule
mám komponentu TopMenuComponent
a pokud
v její šabloně kliknu na odkaz vedoucí na handler
handleSelectBtn($sectionId, $sectionType)
, parametry z šablony se
na cestě mezi presenterem a komponentou vytratí.
Do handleru se samozřejmě dostanu, ale bohužel oba parametry jsou NULL, díky redirectu v handleru dostanu z Laděnky informace obsažené tomto odkazu
Je dost možné že něco přehlížím. Nedaří se mi parametry do handleru protlačit, moc prosím alespoň o nasměrování. Budu moc vděčný za jakoukoli radu!
Zdrojáky:
Šablona komponenty:
<?php
<ul n:inner-foreach="$topMenuButtons as $btn" n:if="$topMenuButtons->count() > 0">
<li class="menu-item"><a n:href="selectBtn!, $btn->id, $btn->section_type->code" bg="item-{$btn->order}"><span>{$btn->title}</span></a></li>
</ul>
?>
Tvar url po kliknutí na tlačítko menu:
http://ee.dev:8080/?topMenu-sectionId=1&topMenu-sectionType=Articles&do=topMenu-selectBtn
Php komponenta
<?php
namespace MenusModule\Components;
use Common\AbstractComponentAncestor;
use SectionsModule\Models\SectionsModel;
use Nette\Diagnostics\Debugger;
use Nette\Utils\Paginator;
use Nette\Application\UI\Multiplier;
use \Nette\Application\UI;
use \Nette\Database\Table\Selection;
class TopMenuComponent extends AbstractComponentAncestor{
/** @var \Nette\Database\Table\Selection */
protected $btns;
/** @var SectionsModel **/
protected $table;
/**
* Default constructor
* @param Selection $sections - Selected data from database
* @param SectionsModel $table - Whole table for manipulation with data
**/
public function __construct(Selection $btns = null, SectionsModel $table){
$this->btns = $btns == null ? $table : $btns;
$this->table = $table;
}
public function render(){
$this->template->setFile(__DIR__.'/TopMenuComponent.latte');
$this->template->topMenuButtons = $this->btns;
$this->template->render();
}
public function handleSelectBtn($sectionId, $sectionType){
Debugger::barDump("Id: ".$sectionId);
Debugger::barDump("Type: ".$sectionType);
$this->presenter->redirect($sectionType);
}
}
?>
UIModule
layout a
HomepagePresenter
:
vložení komponenty v @layout:
<?php
<div id="menu">
{control topMenu}
</div>
?>
HomepagePresenter:
<?php
namespace UIModule;
use UIModule\Components\HomepageComponentPlaceholder;
/**
* Homepage presenter.
*
* @author Pavel Neumann
*/
use MenusModule\Components\HomepageButtonsComponent;
use ArticlesModule\Components\ArticlesComponent;
use SectionsModule\Models\SectionsModel;
use \Nette\Diagnostics\FireLogger;
use \Nette\Diagnostics\Debugger;
class HomepagePresenter extends BasePresenter
{
protected function startup(){
Debugger::barDump("HP pres start");
parent::startup();
}
protected function createComponentHomepageMenu(){
$selection = SectionsModel::getInstance($this)->findHomepageButtonsSections();
return new HomepageButtonsComponent($selection, SectionsModel::getInstance($this));
}
/**
* Guards place for a specific component
* @return homepage placeholder component
*/
protected function createComponentHomepageSection(){
return new HomepageComponentPlaceholder();
}
public function actionSelect($target){
$this->presenter->redirect($target.":");
}
}
?>
BasePresenter:
<?php
namespace UIModule;
use Nette\Diagnostics\Debugger;
use MenusModule\Components\TopMenuComponent;
use SectionsModule\Models\SectionsModel;
use \Nette\Application\UI\Form;
abstract class BasePresenter extends \Nette\Application\UI\Presenter
{
private $loggedUser;
protected function startup(){
parent::startup();
$this->loggedUser = $this->getUser();
}
public function beforeRender(){
if($this->isAjax()){
$this->invalidateControl('flashMessages');
}
}
protected function createComponentTopMenu(){
$selection = SectionsModel::getInstance($this)->findTopMenuSections();
return new TopMenuComponent($selection, SectionsModel::getInstance($this));
}
}
?>
Editoval genetic (7. 12. 2012 16:57)