Komponenta jako základ pro ostatní komponenty
- Danny
- Člen | 146
Zdravím,
potřeboval bych poradit. Používám ublaboo dataGrid a mám ho jako
komponentu takto:
class EmailGridFactory extends UI\Control {
public function __construct()
{
}
public function render() {
$template = $this->template;
$template->setFile(__DIR__ . '/grid.latte');
$template->render();
}
public function createComponentEmailLogGrid($name)
{
DataGrid::$icon_prefix = 'icon-';
$grid = new \Ublaboo\DataGrid\DataGrid($this, $name);
/**
* Localization
*/
$translator = new \Ublaboo\DataGrid\Localization\SimpleTranslator([
'ublaboo_datagrid.no_item_found_reset' => 'Žádné položky nenalezeny. Filtr můžete vynulovat',
'ublaboo_datagrid.no_item_found' => 'Žádné položky nenalezeny.',
'ublaboo_datagrid.here' => 'zde',
'ublaboo_datagrid.items' => 'Položky',
'ublaboo_datagrid.all' => 'všechny',
'ublaboo_datagrid.from' => 'z',
'ublaboo_datagrid.reset_filter' => 'Resetovat filtr',
'ublaboo_datagrid.group_actions' => 'Hromadné akce',
'ublaboo_datagrid.show_all_columns' => 'Zobrazit všechny sloupce',
'ublaboo_datagrid.hide_column' => 'Skrýt sloupec',
'ublaboo_datagrid.action' => 'Akce',
'ublaboo_datagrid.previous' => 'Předchozí',
'ublaboo_datagrid.next' => 'Další',
'ublaboo_datagrid.choose' => 'Vyberte',
'ublaboo_datagrid.execute' => 'Provést',
'ublaboo_datagrid.per_page_submit' => 'Změnit',
'Name' => 'Jméno',
'Inserted' => 'Vloženo'
]);
$grid->setTranslator($translator);
$grid->setDefaultPerPage(15);
$grid->setItemsPerPageList([15, 50, 100]);
// atd
return $grid;
}
}
Ale nechci u každého gridu definovat translations, default per page atd, chtěl bych to mít někde na 1 místě kde bych si to definoval a ostatní gridy by to používali. Chtěl sem udělat 1 komponentu v kterých bych si toto nastavil a ostatní z ní dědili ale nevim jak na to. Poradil by mi někdo?
Moc díky :-)
- Danny
- Člen | 146
Super díky moc za nakopnutí. Vyřešil jsem to tedy takto:
Továrna:
<?php
namespace App\FrontendModule\Components\Grids;
class GridFactory extends Control {
public function create()
{
$grid = new DataGrid();
$grid->setDefaultPerPage(15);
$grid->setItemsPerPageList([15, 50, 100]);
$grid->setTemplateFile(__DIR__ . '/grid.my.blocks.latte');
$grid->setTranslator(new SimpleTranslator([
'ublaboo_datagrid.no_item_found_reset' => 'Žádné položky nenalezeny. Filtr můžete vynulovat',
'ublaboo_datagrid.no_item_found' => 'Žádné položky nenalezeny.',
'ublaboo_datagrid.here' => 'zde',
'ublaboo_datagrid.items' => 'Položky',
'ublaboo_datagrid.all' => 'všechny',
'ublaboo_datagrid.from' => 'z',
'ublaboo_datagrid.reset_filter' => 'Resetovat filtr',
'ublaboo_datagrid.group_actions' => 'Hromadné akce',
'ublaboo_datagrid.show_all_columns' => 'Zobrazit všechny sloupce',
'ublaboo_datagrid.hide_column' => 'Skrýt sloupec',
'ublaboo_datagrid.action' => 'Akce',
'ublaboo_datagrid.previous' => 'Předchozí',
'ublaboo_datagrid.next' => 'Další',
'ublaboo_datagrid.choose' => 'Vyberte',
'ublaboo_datagrid.execute' => 'Provést',
'ublaboo_datagrid.per_page_submit' => 'Změnit',
'Name' => 'Jméno',
'Inserted' => 'Vloženo'
]));
return $grid;
}
}
A pak si to jednoduše injectnu v komponentě a volám
$grid = $this->gridFactory->create();
$grid->addColumnText('name', 'název')
->setSortable()->setFilterText();
// atd