Pomoc pri tvorbe komponenty, popis jak na komponentu

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

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
+
0
-

Odstraň z továrničky řádek

$menu->render();

komponenta se vykreslí sama zavoláním {control leftMenu} v šabloně presenteru.