ublaboo/datagrid: mocný, rychlý, rozšiřitelný, hezký, anglicky dokumentovaný datagrid

skyfall174
Člen | 5
+
0
-

Dobry den,
Mam multiplier, ktery mi vytvori nekolik datagridu.

{foreach $items_info as $item}
    {control grid-$item->ID $item}
{/foreach}

Pote co zavolam nejaky filter, mne se metoda nespusti.
Tady vytvarim control, ve kterem vytvarim grid

<?php
public function createComponentGrid($name) {
        return new \Nette\Application\UI\Multiplier(
                function ($id) {
            return new \GridControl($this->database, $this->id);
        });
    }
?>

Pokud tomu dobre rozumim metoda napr Grid-1 neexistuje a proto se ten filter nevykona.
Jak by se to dalo resit?
Dekuji za odpoved;

nocturne32
Člen | 21
+
0
-

@PavelJanda pardon.
Myslel jsem tak, že mám dvě tabulky. Z té první beru třeba firmy, z druhé beru historii nějakých stavů (například založení firmy, přejmenování firmy, zrušení firmy,…)
Chtěl bych, aby mi právě ten itemdetail ukázal tu historii stavů, která se váže na každou firmu.

Pavel Janda
Člen | 977
+
+1
-

@nocturne32 Předej si data do šablony, traverzuj nad nimi pomocí ORM, atp. Těch způsobů, jak tohoto docílit, je vícero. :)

nocturne32
Člen | 21
+
0
-

@PavelJanda Děkuji. :-)

skyfall174
Člen | 5
+
0
-

@PavelJanda Dobrý den,
Chtel byvh si zeptat, jak by se dálo použit víc datagridu na jedné stránce. Vytvařem je takhle

{foreach $items_info as $item}
       {control info-$i $item}
       {var $i = $i+1}
{/foreach}

A pak přes multiplier vytvarim N gridu.

<?php
	public function createComponentInfo($name){
	return new Multiplier(function ($id, $name){
	$grid = new DataGrid();
	...
	...
	return $grid;
	});
}
?>

Ale pri změně filtru, paginace… nevzkreslí se tabulka.
Jak by se to dalo řešit?
Děkuji za odpoveď

Pavel Janda
Člen | 977
+
0
-

@skyfall174 Asi budeš muset téma víc rozvést. Takto vytvářené datagridy normálně fungují. :)

skyfall174
Člen | 5
+
0
-

Pavel Janda napsal(a):

@skyfall174 Asi budeš muset téma víc rozvést. Takto vytvářené datagridy normálně fungují. :)

Takže ja vytvařim componentu přes foreach

{foreach $items_info as $item}
    {control Info-$i $item}
    {var $i = $i+1}
{/foreach}

pak v presenteru mam componentu

<?php
public function createComponentInfo($name){
  return new \Nette\Application\UI\Multiplier(function ($id, $name) {
		if($id== 2 || $id == 4){
			$grid = new DataGrid();
			$grid->setDataSource(...);
			...
			...
			return $grid;
		}else{
			return new MyComponent($id);
		}
	}
}
?>

Všechno se zobrazí, ale pri změne, treba paginace, grid se vrati prazdný.
Diky.

Editoval skyfall174 (3. 5. 2017 12:49)

Pavel Janda
Člen | 977
+
0
-

@skyfall174 :D Tos moc informací nepřidal. Zkus někam na github nahrát sandbox-like projekt (např se sqlite databází), který se bude takto chovat.

jannemec
Člen | 78
+
0
-

Chyba při prvním filtru.
Nevím proč, ale u jednoho (jenom u jednoho, další datagridy v aplikaci fungují korektně) datagridu mi první zadání filtru vyhodí výjimku
Uncaught TypeError: Cannot read property ‚left‘ of undefined
Ale další zadání už funguje normálně … nesetkal se s tím někdo? A zároveň se neobnovuje spodní lišta s Od do a stránkováním …

skyfall174
Člen | 5
+
0
-

@PavelJanda Takže posilám odkay na github s demo projektem. Chzba nastava na adrese localhost/reporting/report-info?report_id=2 .

Odkaz na github https://github.com/…74/testNette .
Děkuji za odpověd.

nocturne32
Člen | 21
+
0
-

Ještě jednou zdravím.
Chtěl bych se zeptat, jestli jde u small inline edit nastavit validace například emailu. Se samotným JS nejsem moc kamarád.
Děkuju předem.

jannemec
Člen | 78
+
0
-

Zdravím, tak chybu prvního refreshe jsem asi vyřešil – stačilo obnovit při každém ajaxu flashmessages snippet. Ale zůstává mi tam druhá chybka – při použití array datasource se mi neobnovuje dolní řádek se stránkováním …

Pavel Janda
Člen | 977
+
0
-

@skyfall174 Jak jsem psal, vhodná by byla ukázková sandbox-like aplikace se sqlite databází. Já bohužel nemám k dispozici žádnou oracle db a momentálně ani sbuulděné php s potřebnou oci8 php extension.

jAkErCZ
Člen | 321
+
0
-

Lidi mohu se zeptat když používám překlad.. kde mohu udělat aby když si člověk vybere EN tak by ten datagrid byl v EN a když někdo CZ tak aby byl v CZ?

Díky

Hug0
Člen | 35
+
+1
-

jAkErCZ napsal(a):

Lidi mohu se zeptat když používám překlad.. kde mohu udělat aby když si člověk vybere EN tak by ten datagrid byl v EN a když někdo CZ tak aby byl v CZ?

Díky

Datagrid má (mimo jiné) perfektní dokumentaci.

jAkErCZ
Člen | 321
+
0
-

Ano to vím ale jak mohu přepínat mezi CZ a EN…

Plus když mám…

$grid->addColumnText('Name', 'Name')
		->setSortable()
		->setEditableCallback(function($id, $value) use ($manager) {
            // $manager->neco(blabla);
			$this->flashMessage("Id: $id, new value: $value");
			$this->redrawControl('flashes');
		})->addAttributes(['class' => 'text-center']);

Jak udělám aby se tento parametr byl aktualizován v db?

Pavel Janda
Člen | 977
+
0
-

@jAkErCZ To uděláš přesně tím $manager->neco(blabla); :D

Pavel Janda
Člen | 977
+
0
-

@jAkErCZ Přepínání mezi jazyky je v režii tvé aplikace, nikoliv datagridu. To tu mu musíš říct, jak/kdy/kde se má přepínat. Graficky to klidně můžeš zakomponovat do datagridu. Akce může být samozřejmě ajaxová. Ale musíš si to implementovat sám.

jAkErCZ
Člen | 321
+
0
-

@PavelJanda

Udělal sem si…

$manager->saveCompany($id, $value);
public function saveCompany($id, $value)
	{
          return $this->database2->table(self::TABLE_NAME)->where(self::COLUMN_ID, $id)->update($value);
	}

A chyba je…
Use $presenter->sendPayload() instead of terminate() to send payload.

Co dělám špatně?

Pavel Janda
Člen | 977
+
0
-

@jAkErCZ Kdo volá to ->terminate()?

jAkErCZ
Člen | 321
+
0
-

@PavelJanda To právě nevím..

Nikde ho nevolám…

Editoval jAkErCZ (15. 5. 2017 14:30)

Pavel Janda
Člen | 977
+
0
-

@jAkErCZ To vidíš v call stacku, ne?

jAkErCZ
Člen | 321
+
0
-

@PavelJanda Jenže já ho nikde nevolám… a nechápu proč tam je… :D

CZechBoY
Člen | 3608
+
+1
-

@jAkErCZ pošli screen bsod :D

Pavel Janda
Člen | 977
+
0
-

@jAkErCZ Ještě jednou: V moment, kdy ti Tracyna zařve, uvidíš v call stacku místo, kde se ten terminate() volá. Nebo to v projektu vygoogli fulltextově.

jAkErCZ
Člen | 321
+
0
-

Screen

Mám prostě ajaxové úpravy a potřebuji funkci které mi to aktualizuje v db..

CZechBoY
Člen | 3608
+
0
-

@jAkErCZ nenastavujes neco do payloadu v akci presenteru?

jAkErCZ
Člen | 321
+
0
-

Lidi nechápu proč mi funkce public function handleDelete($id)

Hází problém…

Column operator does not accept NULL argument. search►

Source file

Call stack

...\nette\database\src\Database\Table\SqlBuilder.php:296	source  Nette\Database\Table\SqlBuilder->addCondition(arguments)

...\nette\database\src\Database\Table\Selection.php:358	source  Nette\Database\Table\SqlBuilder->addWhere(arguments)

...\nette\database\src\Database\Table\Selection.php:320	source  Nette\Database\Table\Selection->condition(arguments)

...\Modules\CoreModule\presenters\CompanyPresenter.php:188	source  Nette\Database\Table\Selection->where(arguments)

178:
179:                ]);
180:                $grid->setTranslator($translator);
181:
182:                return $grid;
183:        }
184:
185:        public function handleDelete($id)
186:        {
187:        $this->database2->table('Company')
188:                 ->where('ID = ?', $id)
189:                 ->delete();
190:
191:        $this->flashMessage("Položka byla smazána [$id]", 'info');
192:

Podle informací se z tlačítka delete nepředává hodnota ID ale jak ji od tam získat?

$grid->addAction('delete', '', 'delete!')
                ->setTitle('Vymazat')
                ->setClass('icon-trash btn btn-xs btn-danger ajax')
                ->setConfirm(function($item) {
		return 'Opravdu chcete smazat řádek s id ' . $item->ID . ' a jménem ' . $item->Name . '?';
                });

Jak získám tu hodnotu ID kterou pak převedu do $id?

Zuben45
Člen | 268
+
0
-

CZechBoY napsal(a):

@jAkErCZ nenastavujes neco do payloadu v akci presenteru?

nene, jen posílal čistou hodnotu do update ;)

Editoval Zuben45 (18. 5. 2017 2:49)

jAkErCZ
Člen | 321
+
-1
-

Chtěl bych se zeptat zda-li je možné v datagrid vytvořit nějakým způsobem cyklus?

Zkoušel jsem typický foreach ale ten nejde…

Mám něco takového--->

public function getCompaniesLanguage()
{

$result = $this->database2->table('Country')
             ->select('ID', 'TwoLetterISOCode');
//$connection->query('SELECT a, b, c FROM table'); // $connection = Nette\Database\Connection
foreach ($result as $row) {
    Debugger::dump($row);
}


    /* $row = $this->database2->table('Country')
             ->select('ID')
             ->order('ID ASC')
             ->fetchPairs('ID', 'ID');

    return ($row) ? $row : NULL;*/
}

A chtěl bych aby to v gripu používalo něco jako

$tmp = $manager->getCompaniesLanguage();

            $grid->addColumnStatus('CountryID', 'Test')
                       ->addOption($tmp->ID, $tmp->TwoLetterISOCode)
			->setClass('btn-success')
			->endOption()
                        ->onChange[] = [$this, ];

A bylo tam možno uložení → ->onChange[] = [$this, ]; ← má to vracet něco jako $tmp->ID a $tmp->TwoLetterISOCode

A má to dělat že to vrátí ID řádku a pak text který je v řádku TwoLetterISOCode

Editoval jAkErCZ (18. 5. 2017 16:01)

CZechBoY
Člen | 3608
+
0
-

@jAkErCZ jak to souvisí s datagridem?

jAkErCZ
Člen | 321
+
0
-

@CZechBoY že to datagrid nebere prostě… Ale nevím proč píše mi to že -->

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''TwoLetterISOCode'' at line 1 search►

Caused by PDOException
SQL

SELECT ID
FROM `Country` 'TwoLetterISOCode'
Source file

...\app\Modules\CoreModule\model\CompanyManager.php:64	source  Nette\Database\Table\Selection->rewind()

54:                   $data = [$name => $value];
55:                   $this->saveComponies($ID, $data);
56:            }
57:
58:            public function getCompaniesLanguage()
59:            {
60:
61:            $result = $this->database2->table('Country')
62:                         ->select('ID', 'TwoLetterISOCode');
63:            //$connection->query('SELECT a, b, c FROM table'); // $connection = Nette\Database\Connection
64:            foreach ($result as $row) {
65:                Debugger::dump($row);
66:            }
67:
68:
CZechBoY
Člen | 3608
+
0
-

Máš špatně sql dotaz resp. volání knihovny.
správně

$result = $this->database2->table('Country')
	->select('ID')
	->select('TwoLetterISOCode');

A tohle teda vůbec nesouvisí s datagridem…

edit: jsem zapomněl doplnit název metody select(…)

Editoval CZechBoY (18. 5. 2017 17:04)

jAkErCZ
Člen | 321
+
0
-

CZechBoY napsal(a):

Máš špatně sql dotaz resp. volání knihovny.
správně

$result = $this->database2->table('Country')
	->select('ID')
	->('TwoLetterISOCode');

A tohle teda vůbec nesouvisí s datagridem…

Oprava--->

$result = $this->database2->table('Country')
	->select('ID')
	->select('TwoLetterISOCode');

Editoval jAkErCZ (18. 5. 2017 16:34)

jAkErCZ
Člen | 321
+
0
-

Dobře tak jinak jak mohu do datagrip vložit funkci aby to načítalo věci z té funkce?

$grid->addColumnStatus('CountryID', 'Test')
                        $tmp = $manager->getCompaniesLanguage()
                        ->addOption($tmp->ID, $tmp->TwoLetterISOCode)
			->setClass('btn-success')
			->endOption()
                        ->onChange[] = [$this, ];
syntax error, unexpected '$tmp' (T_VARIABLE) search►

Source file

File: ...\Modules\CoreModule\presenters\CompanyPresenter.php:85

75:                $grid->getInlineEdit()->onCustomRedraw[] = function() use ($grid) {
76:                        $grid->redrawControl();
77:                };
78:
79:                $grid->addColumnNumber('ID', '#')
80:            ->setSortable();
81:
82:
83:
84:                $grid->addColumnStatus('CountryID', 'Test')
85:                            $tmp = $manager->getCompaniesLanguage()
86:                            ->addOption($tmp->ID, $tmp->TwoLetterISOCode)
87:                ->setClass('btn-success')
88:                ->endOption()
89:                            ->onChange[] = [$this, ];

Editoval jAkErCZ (18. 5. 2017 16:36)

Pavel Janda
Člen | 977
+
+6
-

@jAkErCZ
1, Je to datagrid, ne datagrip (grid == anglicky „mříž“ → datová tabulka).
2, Rozmysli se, prosím, nad svým dotazem, než ho sem napíšeš. Spousta lidí přemýšlí a než sem příspěvek vloží, pořádně si svůj kód projdou. Ty sem dáváš dotazy, které vůbec s datagridem nesouvisí. Například tvůj poslední dotaz je chyba v syntaxi v PHP (Tracy ti to dává jasným způsobem najevo) a nemá co dělat s ublaboo/datagrid. Pokud máš problémy s PHP, zkus napsat některým lektorům v čele s @TomášVotruba. Myslím, že ti dokážou spoustu věcí vysvětlit.

Edit: Nebo se můžeme domluvit spolu. Rád ti poskytnu za úplatek pár lekcí php/nette/datagrid aspol.

Editoval Pavel Janda (18. 5. 2017 16:58)

Tomáš Votruba
Moderator | 1114
+
+2
-

Díky za zmínku Pavle.

@jAkErCZ Kdybys to chtěl hledat, tak tady najdeš přehled všech mentorů, pěkně podle měst, online dostupnosti, skillů a kontaktů.

(Jinak tyhle chyby jsou docela klasika. Před delším časem jsem hledal 3 hodiny, proč se mi nenačítá jedná třída. Spoléhal jsem se na IDE. Zobrazovalo soubor jako PHP. Všechno OK, tak co dělám blbě? Po 3 hodinách nervů a psaní na fórum jsem zjistil, že nemá *.php koncovku :facepalm: )

jAkErCZ
Člen | 321
+
0
-

Tomáš Votruba napsal(a):

Díky za zmínku Pavle.

@jAkErCZ Kdybys to chtěl hledat, tak tady najdeš přehled všech mentorů, pěkně podle měst, online dostupnosti, skillů a kontaktů.

(Jinak tyhle chyby jsou docela klasika. Před delším časem jsem hledal 3 hodiny, proč se mi nenačítá jedná třída. Spoléhal jsem se na IDE. Zobrazovalo soubor jako PHP. Všechno OK, tak co dělám blbě? Po 3 hodinách nervů a psaní na fórum jsem zjistil, že nemá *.php koncovku :facepalm: )

Díky :)

Jinak mám dotaz je nějak možné abych filter dal mimo datagid?

Mám šablonu list.lette kde volám datagrid ale chtěl bych nahoře mít možnost vyhledávat a ne přímo v datagridu? Je to možné?

kralik
Člen | 230
+
0
-

Ahoj,
rád používám tento, dle mého, skvělý datagrid.
Měl bych takové vylepšení :-) i když asi úzce použitelné.

Když mám zobrazený datagrid s položkami. A chtěl bych vložit k těmto položkám obrázek(y).
Představa je taková, že bych vzal obrázek a přes drag & drop bych jej pustil na konkrétní položce(řádku). V komponentě(?) bych si nastavil co se má s obrázkem poté dít. Nejčastěji by se uložit na disk a do DB se uložili nějaká metadata.

Rád bych získal názor zda je to reálné vytvořit a zda by se to šiklo třeba více lidem nž jen mě:-)

Díky

Pavel Janda
Člen | 977
+
0
-

@kralik Cool nápad, rozhodně se mi líbí.
A teď – kdo to napíše? :D

Možná by bylo vhodné se zeptat, v jakých konkrétních případech by to šlo použít? Je to vhodné pro správu obrázků produktu? Dalo by se to použít pouze bez inline editace/přidávání?

Zkus pár takových otázek rozvést, třeba to začne vážně dávat smysl. :)

petak23
Člen | 16
+
0
-

Ahoj,
chcel by som sa opýtať nasledovné: Ak si v datagride zapnem možnosť usporiadania položiek, tak sa mi v časti akcii pridá ikonka na zmenu poradia. Ako môžem túto ikonku zmeniť?
Pri ostatných akciách to ide jednoducho:

$grid->addAction('edit', '')
     ->setIcon('pencil-square fa-2x'); //Tu si ju zmením...

Prechádzal som dokumentáciu, ale nič som nenašiel…
Vďaka.

Pavel Janda
Člen | 977
+
0
-

@petak23 Asi jsi hledal blbě. :P
Všechny ikonky lze měnit přes latte block. Viz https://ublaboo.org/…rid/template#…

petak23
Člen | 16
+
0
-

Pavel Janda napsal(a):

@petak23 Asi jsi hledal blbě. :P
Všechny ikonky lze měnit přes latte block. Viz https://ublaboo.org/…rid/template#…

Ok. asi som sa nevyjadril celkom presne. Tak to skúsim ešte raz:
Podľa https://ublaboo.org/datagrid/action#… je možné zapnúť možnosť „prehadzovania“ položiek medzi sebov s tým že sa mi v príslušnom riadku na konci zobrazí ikonka ktorá je v html reprezentovaná:

<span class="handle-sort btn btn-xs btn-default ui-sortable-handle">
	<i class="fa fa-arrows-v"></i>
</span>

A ja by som potreboval zmeniť class pre html element i.
To čo si ty spomínal na https://ublaboo.org/…rid/template#…
mi zmenilo ikonku v hlavičke tabulky, ale nie v riadkoch…

jAkErCZ
Člen | 321
+
0
-

Zdravím, mám dotaz je možné nějak v datagridu udělat že když kliknu na ID jednoho datagridu přenese se to ID do vyhledávání toho druhého?

Díky moc za rady.

Editoval jAkErCZ (26. 5. 2017 16:19)

Hlava
Člen | 19
+
0
-

Ahoj, proč v následujícím kódu v souboru Row.php:

	/**
	 * @return string
	 */
	public function getControlClass()
	{
		if (!$class = $this->control->class) {
			return '';
		}

		return implode(' ', array_keys($class));
	}

používáš funkci array_keys. Asi něco nechápu, ale pak při callbacku, viz:

$grid->setRowCallback(function(array $row, Html $el) use ($presenter) {
    $code = $row['code'];
    if ($presenter->getComponent('order')->isInOrder($code)) {
        $el->setAttribute('class', ['in_order'=>'nesmysl']);
    }
});

musím nastavovat attributy fakt zvláštně, místo abych si jen naplnil pole. Je to blbost, ale já kvůli tomu tady vzteky debugoval a dumpoval snad úplně všechno, nevšiml jsem si toho array_key v implode… Tak se musím zeptat :)

Editoval Hlava (27. 5. 2017 18:04)

kralik
Člen | 230
+
0
-

Pavel Janda napsal(a):

@kralik Cool nápad, rozhodně se mi líbí.
A teď – kdo to napíše? :D

Možná by bylo vhodné se zeptat, v jakých konkrétních případech by to šlo použít? Je to vhodné pro správu obrázků produktu? Dalo by se to použít pouze bez inline editace/přidávání?

Zkus pár takových otázek rozvést, třeba to začne vážně dávat smysl. :)

Kdo to napíše, já bych rád, ale bohužel JS totálně neznám.
Mé zkušenosti nedosahují na tvorbu této featury.
Ano, prakticky bych to použil pro správu obrázků.

V poslední době jsem narazil na to, že bych tuto featuru několikrát použil.
Pro klienta by to bylo naprosto super, jednoduché, přehledné, příjemné.
Dovolím si uvést několik příkladů.

Web krejčovský salón: při správě webu si klient přidá položku, např. nějaké šaty, které ušil a chce je vystavit na webu.
Takto mu vznikne x položek produktů, metadat.
A teď by jen přesouval fotografie nad jednotlivé položky a fotografie by se ukládaly na disk a zapisovaly do DB.
Pak si klient jen klikne na detail položky a vidí metadata a fotografie které nahrát a může je případně smazat, super.

Anketa, články ap.:
Existuje seznam článků nebo položek anket. K nim je třeba přidat nějakým způsobem fotografie, soubory. Opět pomocí této vlasnosti si klient přetahá obrázky/soubory pro jednotlivé položky a nad nějakým detailem vidí fotografie/soubory/dokumenty a metadata pro konkrétní položku.

Stavebnicví, a daší weby.
Typická fotogalerie, či reference u firmy.
Vytvořím si seznam položek. Reference, alba, a další a pak bych si takto jednoduše, opět přes tuto vlastnost, nahával, jako klient, fotografie na web.

Myslím, že tato funkčnost by tento datagrid katapultovala do topu.
I když bych řekl, že už tam datagrid určite je.
Byl by to takový další výrazný level. :-)

jAkErCZ
Člen | 321
+
0
-

Zdravím mám takový dotaz nebo radu,

Chtěl bych využít že když kliknu na

$grid->addActionCallback('custom_callback', '')
		->setTitle('Získat ID')
		->setClass('icon-search btn btn-xs btn-default ajax')
		->onClick[] = function($ID) use ($manager) {
                $manager->getComponiesWebPages($ID);
                $this->flashMessage('Vyhledávání stránky dle identifikátoru firmy: ' . $ID);
			$this->redrawControl('flashes');
		};

tak by se měla zvolat funkce kde v se přenese ID do druhého datagridu a v něm by mi to vypsalo informace o daném ID které by získal z toho prvního datagridu… Je to nějak možné lámu si s tím hlavu na nic mě nenapadá…

$grid->setDataSource($manager->getComponiesAll('Pokud jsem dosadím ID tak mi to vypíše přesně to co chci. Jak udělám aby se mi z vrchní funkce do této přeneslo ID'));

Všem děkuji za pomoc či radu :)

Pavel Janda
Člen | 977
+
0
-

@jAkErCZ Budeš se muset vydat vlastní JS cestou. Callback při kliknutí na řádek/akci, handler v presenteru, který třeba překreslí snippet s jiným gridem na stránce

Editoval Pavel Janda (29. 5. 2017 20:02)

jAkErCZ
Člen | 321
+
0
-

Tak jsem si nad tím lámal hlavu a zkusil sem to nějak takto…

public function handleSearchIdentification($ID) {
    $companyID = $ID;
    $this->flashMessage("Informace o firmě [ $ID ] nalezeny!", 'success');

    if ($this->isAjax()) {
        $this->redrawControl('flashes');
        $this['componiesLocalizedGrid']->reload();
        $this['webPagesGrid']->reload();
    }
    return $companyID;
}

a grid

$grid->setDataSource($manager->getComponiesDescription($this->companyID));

Když jsem si zjišťoval tak do $grid->setDataSource($manager->getComponiesDescription($this->companyID)); se mi ID dostane ale prostě z nějakého hlediska se nenačtou znovu ty 2 gridy componiesLocalizedGrid a webPagesGrid

A prostě snažím se to vyřešit ale nic… Co stále dělám blbě nebo nějak mi to prosím vysvětlit nebo ukázat…

Díky

CZechBoY
Člen | 3608
+
0
-

@jAkErCZ ukaž ty metody reload