TwiGrid – omlouvám se :-(

uestla
Backer | 799
+
0
-

Ahoj @PetrHH,

od verze 11.0.0 je implementované history API, k vidění např. na http://nette-commits.cz/

GEpic
Člen | 566
+
0
-

Ahoj, nechtěl jsem psát issue na Githubu, protože nevím jestli je to chtěné nebo nechtěné chování.

Každopádně v tuto chvíli (z důvodu změn v JS assetu) není možné provést ne-ajaxový požadavek / signál společně s data-tw-confirm a signál se prostě provede (což chápu). Toto dřív fungovalo – používal jsem pro stahování souborů přímo z gridu + včetně nějaké akce před tím, která musí být potvrzena.

Editoval GEpic (9. 9. 2017 23:27)

uestla
Backer | 799
+
0
-

Ahoj,

promiň, ale jaká je otázka? :-D

Jestli to chápu správně, snažíš se mít neAJAXovou akci s confirmation dialogem, ale nejde ti to?

GEpic
Člen | 566
+
0
-

uestla napsal(a):

Ahoj,

promiň, ale jaká je otázka? :-D

Jestli to chápu správně, snažíš se mít neAJAXovou akci s confirmation dialogem, ale nejde ti to?

Přesně tak, nejde, akce se provede ale ignoruje se potvrzení.

uestla
Backer | 799
+
0
-

Máš pravdu. Confirmation dialog by měl být navěšen klasicky na DOM a ne přes nette.ajax.js.

Zkusím to přidat – nebo mě můžeš zkusit předběhnout s PR ;-)

zapp
Člen | 32
+
0
-

Ahoj,
mám problémy s implementací gridu. Vše jsem se snažil udělat podle dema, ale stále mi to píše chybu v construct metodě hlavního gridu.

Call to undefined method Nette\Http\Session::addComponent().

BaseGrid.php

namespace App\Grid;


use App\Model\Db;
use Nette\Http\Session;
use TwiGrid\DataGrid;

abstract class BaseGrid extends DataGrid
{
    protected $model;

    public function __construct(Session $session, Db $model)
    {
        parent::__construct($session);

        $this->model = $model;
    }

    protected function build()
    {
        parent::build();
    }
}

AccountsAdminGrid.php

namespace App\Grid;


class AccountsAdminGrid extends BaseGrid
{
    protected function build()
    {
        parent::build();

        $this->setPrimaryKey("id");
        $this->addColumn("email", "E-mail");

        $this->setDataLoader([$this, "dataLoader"]);
    }

    public function dataLoader(AccountsAdminGrid $grid, array $filters, array $order, $limit, $offset)
    {
        $data = $this->model->getUsers();

        return $data;
    }
}

úryvek z AccountsPresenter.php

class AccountsPresenter extends BasePresenter {
	/** @var  AccountsAdminGrid @inject */
	public $accountsAdminGridFactory;

	public function createComponentAccountsAdminGrid()
	{
		return $this->accountsAdminGridFactory;
	}
}

V neonu samozřejmě službu zaregistrovanout mám. Nenapadá někoho něco? Děkuji.

Editoval zapp (19. 9. 2017 16:07)

uestla
Backer | 799
+
0
-

Ahoj,

první parametr konstruktoru už není povinný, takže ho můžeš odebrat a volat parent::__constructor() bez parametrů.

Uznávám, že dokumentace není aktuální :-/

zapp
Člen | 32
+
0
-

Děkuji, už vše funguje bez problému.

Ještě jeden malý dotaz. Dá se nějak v šabloně konkrétního gridu překreslit button pro inline editaci?

uestla
Backer | 799
+
0
-

@zapp Stačí v šabloně daného gridu přetížit block inline-buttons.

zapp
Člen | 32
+
0
-

@uestla Děkuji, tohle jsem ale nemyslel, to jsem našel v default šabloně. Měl jsem na mysli input, který vyvolá inline formulář. Standardně má hodnotu „Edit inline“.

uestla
Backer | 799
+
0
-

@zapp Aha, neumím číst :-)

Pro editaci „Edit inline“ buttonu je potřeba bohužel přetížit celý block row-actions a upravit tenhle input. Uznávám, že v tomhle místě granularita šablony není ideální…

zapp
Člen | 32
+
0
-

Ok, moc dík za nakopnutí.

zapp
Člen | 32
+
0
-

Ahoj,
znovu prosím o pomoc. Mám grid kategorií s určitým pid. Každému záznamu bych potřeboval vypsat „subgrid“ příslušných podkategorií. Díky přetížení bloku body-row se mi to povedlo, ovšem nefungují mě řádkové a hromadné akce kvůli nezaregistrovaným komponentám těch subgrid záznamů. Dá se toto nějak elegantně řešit?

Editoval zapp (26. 10. 2017 14:50)

uestla
Backer | 799
+
0
-

@zapp Ahoj, TwiGrid bohužel stromovou strukturu nativně nepodporuje.

chladekt
Člen | 10
+
0
-

@uestla Poběží mi poslední release 11.2.1 a poslední verze 11.2.8 na nette 3? Pokud ne, upravíš TwiGrid pro nette 3?

chladekt
Člen | 10
+
0
-

Rozjiždím TwiGrid pod nette 3.0 a PHP 7.2. Ajaxové tlačítko pro editaci vyvolává tuto chybu:
Nette\InvalidStateException: Cannot send header after HTTP headers have been sent

Dostavá se totiž na výstup grid bez vnitřku tbody. Řeším to následující metodou. Nebylo by lepší řešení?

public function render(): void {
	if ($this->presenter->isAjax()) {
		ob_start();
	}
	parent::render();
	if ($this->presenter->isAjax()) {
		ob_end_clean();
	}
}