Ruční vykreslení komponenty ({control } funguje)
- Freestyler
- Člen | 50
Ahoj,
pokouším se ručně vykreslit komponentu, přes {control komponenta} se
vykreslí bez problému, ale pokud zkusím něco jako
<form n:name="komponenta"></form>
tak to neprojde a vyhodí tuhle chybu:
Argument 1 passed to Nette\Bridges\FormsLatte\FormMacros::renderFormBegin()
must be an instance of Nette\Forms\Form, instance of
App\Components\IconMenu given,
Což je podle mě blbost protože form vracím tady:
<?php
namespace App\Components;
class IconMenu extends \Nette\Application\UI\Control {
private $articles;
public function __construct(\App\Model\Articles $articles) {
parent::__construct();
$this->articles = $articles;
}
protected function createComponentIconMenu () {
$form = new \Nette\Application\UI\Form;
$form->addButton('add', 'Add');
$items = [];
/*
foreach ($this->loadedArticles as $id => $article) {
$items[$id] = $article->title;
}
*/
$form->addCheckboxList('article', 'article', $items);
$form->addSubmit('edit', 'Edit');
/*->onClick[] = $this->editButtonClicked; */
$form->addSubmit('delete', 'Delete');
/*->onClick[] = $this->deleteButtonClicked; */
return $form;
}
public function render() {
$this['iconMenu']->render();
}
}
A tady jí v HomepagePresenteru tvořím:
/**
* @return \App\Components\IconMenu
*/
protected function createComponentIconMenu() {
return $this->iconMenuFactory->create();
}
Tipuju, že to přes form n:name nejde, ale jak jinak ručně vykreslit komponentu?
- David Matějka
- Moderator | 6445
ty tam mas totiz strom komponent:
presenter
--- iconMenu (vytvarene v preseneru)
--- iconMenu (form vytvareny v te komponente)
Pokud bys primo v presenteru chtel vykreslit pouze ten form, musel bys
<form n:name="iconMenu-iconMenu">
</form>
ale spise doporucuju mit v komponente sablonu s
<form n:name="iconMenu">
</form>
(vsimni si, ze ted uz je tam pouze iconMenu, protoze je to primo pod
komponentou)
a v renderu budes mit neco jako
public function render()
{
$this->template->setFile(__DIR__ . '/iconMenu.latte');
$this->template->render();
}
a v presenteru komponentu vykreslis pomoci {control iconMenu}
(a ta komponenta vykresli svoji sablonu s custom renderovanim formu)
- Freestyler
- Člen | 50
@matej21: Super, díky !!!. Funguje perfektně. Teď teda ještě jde o to, že ta komponenta je v podstatě box s tlačítkama (add, edit, delete, published, save, close etc.). A já bych rád v každém presenteru vykreslil jen ty tlačítka, která budou potřeba (tzn. když edituji článek, nepotřebuji tlačítko pro edit/add/delete, ale stačí mi save, close atd.).
Je lepší řešení než šablona pro každý „box“ tlačítek? A jak ho vykreslím, když v renderu definuji jednu šablonu. Napadlo mě udělat jednu šablonu a tam vždy ifCurrent. Je to správné řešení? Popř. jak to udělat lépe/jinak.
Díky.
Editoval Freestyler (26. 8. 2014 17:37)
- David Matějka
- Moderator | 6445
@Freestyler dej si na tu komponentu nejakej setter, kterym nastavis, jaky „mod“ se ma pouzit. Komponenta se dle toho pak vykresli…