ublaboo/datagrid komponenta v itemDetail
- Martin Vágovszký
- Člen | 14
Zdravím všechny,
Mám vytvořenou komponentu datagridu a komponentu formuláře
(továrničku).
Nedaří se mi vložit komponentu formuláře do šablony itemDetailu.
Píše mi že komponentu nezná. Zkoušel jsem různé laborování s bloky a
dědičnostmi šablony, ale marně. Nedaří se mi to poskládat, aby to
fungovalo. Statický obsah (bez formuláře) v itemDetail.latte se vykresluje
jeak má. Nedokážu s tím hnout, velké díky předem za jakoukoli radu.
Kód komponenty datagridu:
class ProjectTeamMemberGridControl extends BaseControl
{
private int $projectId;
private DataGridFactory $datagridFactory;
private LevelingFormControlFactory $levelingFormControlFactory;
...
public function __construct(
int $projectId,
DataGridFactory $dataGridFactory,
LevelingFormControlFactory $levelingFormControlFactory,
...
)
{
$this->projectId = $projectId;
$this->datagridFactory = $dataGridFactory;
$this->levelingFormControlFactory = $levelingFormControlFactory;
...
}
/**
* @throws ReflectionException
*/
public function render(): void
{
$this->getTemplate()
->setFile(__DIR__ . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . 'projectTeamMemberGridControl.latte')
->render();
}
/**
* Tady je ta snaha o vytvoření formuláře -> komponentu v komponentě - je to dobře?
*/
public function createComponentLevelingForm(): LevelingFormControl
{
return $this->levelingFormControlFactory->create();
}
/**
* @return BaseDataGrid
*/
public function createComponentProjectTeamMemberGridControl(): BaseDataGrid
{
$datagrid = $this->datagridFactory->forBackend();
...
$datagrid->setItemsDetail()->setIcon('pencil-alt')->setTitle('leveling');
$datagrid->setTemplateFile(__DIR__ . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . 'itemDetail.latte');
...
return $datagrid;
}
projectTeamMemberGridControl.latte
{layout '../../templates/@layout.latte'}
{block #component}
{snippet datagrid}
<div class="table-responsive">
{control projectTeamMemberGridControl}
{* Když vložím komponentu formuláře sem, tak se vykreslí, ale já ji chci v itemDetail *}
{* control levelingForm *}
</div>
{/snippet}
{/block}
itemDetail.latte
{extends $originalTemplate}
{block detail}
<h4>Nadpis</h4>
<p> >>> Tady bych rád vložil komponentu formuláře, což se nedaří <<< </p>
{*control levelingForm*}
{/block}
- Martin Vágovszký
- Člen | 14
Tak se mi to nakonec podařilo vyřešit tak, že jsem rozšířil BaseDataGrid a přidal komponentu tam.
class ProjectTeamMemberDataGrid extends BaseDataGrid
{
private LevelingFormControlFactory $levelingFormControlFactory;
public function createComponentLevelingForm(): LevelingFormControl
{
return $this->levelingFormControlFactory->create((int) $this->getParameter('id'));
}
public function setLevelingFormControlFactory(LevelingFormControlFactory $levelingFormControlFactory): ProjectTeamMemberDataGrid
{
$this->levelingFormControlFactory = $levelingFormControlFactory;
return $this;
}
}