Komponenty s objekty s vlastním renderováním
- Hauron
- Člen | 26
Zdravím
dotaz ohledně komponent. Pokud v komponentě potřebuji vytvořit další
objekt, u kterého bych potřeboval, aby měl vlastní render a vlastní
šablonu, jak toho nejlépe docílit.
Zatím se stále učím a zkouším si napsat vlastní komponentu DataGrid. Rád bych každý sloupec udělal jsko vlastní objekt, který budu moci v šabloně jednoduše vypsat …
Díky za info.
- Hauron
- Člen | 26
Aha, dobrá. A je možno nějak vytvořit komponentu dynamicky ? Jde mi o to že budu mít cca. něco takového :
<?php
class DbfView extends NControl
{
private $cols = false;
......
public function AddColumn($name, $source)
{
$this->$cols[] = new Column($name, $source);
}
public function render()
{
.......
}
}
class Column extends NControl
{
private $sablona = 'data';
public function __construct($name,$source ,$type='data')
{
parent::__construct();
......
}
public function render()
{ //Podle typu dat se zvolí šablona
$this->template->setFile(dirname(__FILE__) . '/sablona_'.$this->sablona.'.latte');
.......
}
}
?>
A jde mi o to, abych nemusel vytvářet komponenty továrničkama, ale dynamicky … Aby byla komponenta trochu universálníí, nevím kolik bude mít sloupců .....
Díky za info.
Editoval Hauron (14. 10. 2011 12:35)
- Filip Procházka
- Moderator | 4668
Co takto?
class Grid extends Nette\Application\UI\Control
{
public function __construct()
{
parent::__construct();
$this['columns'] = new Nette\ComponentModel\Container;
}
public function addColumn($name, $title)
{
$column = new Column($title);
$this['columns']->addComponent($column, $name);
return $column;
}
}
class Column extends Nette\Application\UI\PresenterComponent
{
private $title;
public function __construct($title)
{
parent::__construct();
$this->title = $title;
}
public function getTitle()
{
return $this->title;
}
}
protected function createComponentGrid()
{
$grid = new Grid();
$grid->addColumn('name', 'Jméno');
return $grid;
}
Jako studýjní materiál by ti mohlo posloužit Gridito, Grinder, nebo prvotní DataGrid
Editoval HosipLan (14. 10. 2011 12:45)