Vypsání kategorií z databáze pomocí komponenty

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

Ahojte,
snažím se vypsat jednotlivé kategorie uložené v DB, chtěl jsem to udělat pomocí koponenty, ale za boha to nemůžu rozchodit :(

píše mně to chybu: Component with name ‚category‘ does not exist.

app\components\CategoryControl.latte

{foreach $categories as $category}
        <li><a href="{$category->name}">{$category->name}</a></li>
    {/foreach}

app\components\CategoryControl.php

<?php

use Nette\Application\UI;

class CategoryControl extends UI\Control {

    private $database;

    public function __construct(Nette\Database\Context $database) {
        parent::__construct();
        $this->database = $database;
    }

    public function render(){
        $template = $this->template;
        $template->setFile(__DIR__ . '/CategoryControl.latte');
        $this->template->categories = $this->database->table('categories');
        $template->render();
    }


}

app\components\ICategoryFactory.php

<?php

namespace App\Components;

interface ICategoryFactory
{
    /**
     * @return \CategoryControl
     */
    public function create();
}

app\presenters\CategoryPresenter.php

<?php

namespace App\Presenters;

class CategoryPresenter extends BasePresenter {
     /** @var \App\Components\ICategoryFactory @inject */
    public $categoryFactory;

    protected function createComponentCategory()
    {
        return $this->$categoryFactory->create();
    }
}

v config.neon v Services mám:

  • App\Components\ICategoryFactory

a v @layout.latte mám:
{control category}

Neporadil by někdo? Zkoušel jsem to dělat dle dokumentace a fóra a stále se nedaří :(

Předem děkuji

David Matějka
Moderator | 6445
+
+2
-

ahoj, vzhledem k tomu, ze to mas v @layout.latte, tak to asi chces vykreslovat na kazde strance. Takze to createComponentCategory musis presunout do BasePresenteru. (a mas tam chybu – $this->$categoryFactory ma byt jen $this->categoryFactory

Lebow
Člen | 9
+
0
-

super, funguje :) diky moc :) ještě jen nemůžu přijít na to, jak ze šablony odkazovat na nějaký jiný presenter :(

když šablona vypadá takto:
app\components\CategoryControl.latte

<li><a href="{link Article:category}">{$category->name}</a></li>

mně to hází tuto chybu: Component with name ‚Article‘ does not exist.

protože AriclePresenter je ve složce presenters, ale nepřišel jsem na to, jak to propojit :(

Neporadil by jsi prosím?

Děkuji

Jiří Nápravník
Člen | 710
+
+2
-

V komponente pouzivej na odkazy {plink} misto {link}