Pomoc pri tvorbe komponenty, popis jak na komponentu
- kreed
- Člen | 13
Ahoj… Predem se omlouvam, jestli tady uz takove tema zaznelo, ale ne a ne
najit zadne tema ktere by pomohlo.. tak k veci:
Zkousim svou prvni komponentu a nemuzu ji rozbehnout. Zkusil jsem uz vsechny
navody co jsem nasel, ale porad marna snaha. Jedna se o jednoduche menu,
kteremu chci predat v BasePresenteru Label „Nadpis“ a Pole, ktere definuje
jmeno polozky a link.
Predem Upozornuji ze je to cvicna komponenta abych pochopil co a jak a jakmile se mi podari aleson spustit komponentu bezchybne, budu dal prohlubovat :)
app/komponent/LeftMenu/LeftMenu.php
<?php
namespace LeftMenu;
use Nette\Application\UI\Control;
class LeftMenu extends Control {
private $template;
private $menuItems;
private $label;
public function __construct() {
parent::__construct();
$this->template = $this->createTemplate()->setFile(__DIR__.'/LeftMenu.latte');
$this->label = 'DefaultLabel';
$this->menuItems = array('1' => 'one', '2' => 'two');
}
public function setLabel($label) {
$this->label = $label;
}
public function setMenuItems( $menuItems ) {
if(!$this->menuArrayTest($menuItems)) {
die('chyba: neni polem');
}
$this->menuItems = $menuItems;
}
protected function menuArrayTest( $array ) {
if(is_array($array)) {
return true;
}
else {
return false;
}
}
public function render() {
$template = $this->template;
$template->label = $this->label;
$template->menuItems = $this->menuItems;
$template->render();
}
}
?>
sablona pro vykresleni app/komponent/LeftMenu/LeftMenu.latte
<?php
{block content}
<div id="left-menu">
<ul>
<li class="first">{$label}</li>
{foreach $menuItems as $item => $key}
<li><a n:href="{$key}">{$item}</a></li>
{/foreach}
</ul>
</div>
{/block}
?>
a nakonec BasePresenter v app/FrontModule/presenters/BasePresenter.php
<?php
public function createComponentLeftMenu() {
$menu = new \LeftMenu\LeftMenu();
$menuArray = array('Uživatele' => 'users', 'Polozka2' => 'pol2');
$menu->setLabel('Nabídka');
$menu->setMenuItems($menuArray);
$menu->render(); //tady hlasi ladenka chybu viz nize
return $menu;
}
?>
a na zaver v @layout.latte mam v jednom miste {control leftMenu}
porad mi to vyhazuje hlasku:
Component '' is not attached to 'Nette\Application\UI\Presenter
poradte prosim zoufalci :)
idealni by byl navod step by step jak sestavit jednoduchou komponentu, co by vypisovala treba ‚hello word‘ at se je od ceho odpichnout a je pochopitelny princip a vztahy pri psani komponent.
Kdo mi dobre poradi, ma u me pivko :)
ps: nikde jsem nenasel opravdu strucny, ale dobry „lamacky“ navod jak
sestavit komponentu, vzdycky jen utrzky kodu, nejakej nevysvetlene kostry bez
class nebo construktoru a moc „na urovni“ vysvetleni, mozna by to chtelo
jeste neco takoveho doplnit… ale jestli jsem ten navod minul, tak se omlouvam
a rad se nacham navest
- pave.kucera
- Člen | 122
Odstraň z továrničky řádek
$menu->render();
komponenta se vykreslí sama zavoláním {control leftMenu} v šabloně presenteru.