Vytvoření komponenty v kompontě, ale umístit mimo komponentu která vytvořila
- Budry
- Člen | 88
Zdravím,
potřeboval bych poradit s vytvářením komponenty. Přidal jsem si do
Nette\Forms\Form novej
prvek addFileManager($name, $label = null);
ale tato komponenta pro svůj život potřebuje ještě jinou komponentu. Tak jak je to momentálně postavené se komponenta používá takto:
protected function createComponentUpload()
{
$form = new \Nette\Application\UI\Form;
$form->addFileManager('test', 'file');
$form->addSubmit('submit');
$form->onSuccess[] = $this->send;
return $form;
}
protected function createComponentManager($name)
{
return Manager($this, $name);
}
a v šabloně:
{form upload}
...
{input file}
...
{/form}
{control manager}
Ale rád bych to zjednodušil, aby stačilo přidat do formuláře
addFileManager() a potřebná komponenta by se automaticky vytvořila.
Zkoušel jsem použít $form->addComponent(); která by se mohla vytvářet
automaticky při volání addFileManagera ale ta komponentu manager vloží do
formuláře (komponenty) upload a to nedělá dobrotu, protože samotná
komponenta manager obsahuje jiný formulář
Nevěděl by někdo jak s tím hnout aby se vyhnul vytváření 2 komponenty ručně a vystačil si se zápisem:
protected function createComponentUpload()
{
$form = new \Nette\Application\UI\Form;
$form->addFileManager('test', 'file');
$form->addSubmit('submit');
$form->onSuccess[] = $this->send;
return $form;
}
a v šabloně:
{form upload}
...
{input file}
...
{/form}
Kdy to nějak zjednoduším:
Potřebuji v komponentě „A“ vytvořit komponentu „B“ ale tuto
komponentu „B“ umístit mimo komponentu „A“
Předem díky
- Vojtěch Dobeš
- Gold Partner | 1316
Proč instance FileManageru nedědí od Controlu a nemá na Manager vlastní továrničku v sobě?
- Budry
- Člen | 88
Nevím jestli jsem to dobře pochopil, ale já nemůžu dědit od controlu když přidávám rozšíření k formulářům ta třída co generuje addFileManager(…):
class FileManager extends \Nette\Forms\Controls\BaseControl
{
/**
* @var string input class
*/
private $className = 'Kappa-fileManager';
/**
* @param string $label
*/
public function __construct($label = null)
{
parent::__construct($label);
$this->control->type = 'text';
}
/**
* @return string
*/
public function getClassName()
{
return $this->className;
}
/**
* @return Nette\Utils\Html
*/
public function getControl()
{
$control = parent::getControl();
$control->addClass($this->className);
return $control;
}
}
Těžko to ještě podědím do Controlo abych udělal komponentu…