Nextras\Datagrid – datagrid se vsim jak ma byt

před 2 lety

H0w4rd
Člen | 78
+
0
-

Na ajax pouzivam nette.ajax.js ve verzi 2.3.0.
Jak ti to muze fungovat? V tom demu máš 2.0.0. Bezi to na nette 2.4?

Volani getControl() je v nette cache.
Ja mam v latte toto:
{input $column->name class => "form-control input-sm"}
v cache je v odpovídajícím souboru
echo $_input->getControl()->addAttributes(['class' => "form-control input-sm"]) /* line 6 */ ?>
název souboru:
/data/src/nette-project/temp/cache/latte/datagrid-bootstrap-style-@bootstrap3.datagrid.latte--7acdf16479.php:104

Verze Nette nejnovější.

DODATEK
Teď jsem našel https://github.com/nittro/nittro
Píšou tam Support Nextras/Datagrid – to musím zkusit, ale to stejně neřeší ten problém s tim getControl.

Editoval H0w4rd (30. 3. 2017 14:43)

před 2 lety

Kakaku
Člen | 25
+
0
-

Zdravím, mám problém s řešením následujícího problému:
Používám chartJS koláčové grafy a v něm mám zákazníky roztřízených do různých kategorií. Po kliknutí na koláč se mi vygeneruje url adresa, něco ve stylu domena.cz/ukazVsechnyZakazniky/?mnozina=ObchodniZastupce&typ=A kde tímto datagridem tahám data.

V presenteru bych si natahnul GET parametry a pomocí podmínek zobrazil jen správné zákazníky. Co je problém, že při stránkování či řazení v URL nebudu mít ty get parametry (množina a obchodní zástupce). Nenapadá vás, jak to vyřešit?

před 2 lety

jAkErCZ
Člen | 232
+
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.

před 2 lety

MW
Člen | 582
+
0
-

Prosím o radu. Mám grid a posílám tam ale tento zdroj:

public function getData() {
    return $this->database->table('it_devices')->select('it_devices.*,
                                (SELECT users.name FROM users WHERE users.id = it_devices.edited_by) AS edited_by');
    }

co potřebuji ale, je inline editace a to mě ale bohužel hlásí chybu při získávání dat pro form :

Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous

a to vygeneruje toto:

SELECT `it_devices`.*,
 (
SELECT `name`
FROM `users`
WHERE `users`.`id` = `it_devices`.`edited_by`) AS `edited_by`
FROM `it_devices`
LEFT JOIN `users` ON `it_devices`.`users_id` = `users`.`id`
WHERE (`id` IN (NULL))
LIMIT 25

Poradíte prosím, jak poskládat dotaz do db nebo nastavit primary pro grid?

Díky!

před 2 lety

David Matějka
Moderator | 5812
+
0
-

@MW imho ten spatny where tam davas ty, nextras/datagrid to nedela. nevolas nad tim getData jeste neco?

před 2 lety

MW
Člen | 582
+
0
-

No podle mě ten inline si pouzije getData() a zavola nad tim WHERE primary …

Nebo se pletu? Toto chování bych právě potřeboval nějak upravit..

Ale možná jsem mimo :)

Díky !

před 2 lety

David Matějka
Moderator | 5812
+
0
-

no vzhledem k tomu, ze nextras/datagrid zabudovanou inline editaci nema a vzhledem k tomu, ze nema zadne adaptery na databazove vrstvy (pouze vracis iterable data), tak to ten grid sam delat nemuze :)

před 2 lety

MW
Člen | 582
+
0
-

Zabudovanou inline editaci má a na několika gridech mě jede. Ted mám tento grid jako komponentu a Joinovaný dotaz a ne a ne to rozchodit..

Dyt ten dotaz je getData() + id pro jeden záznam.. Potřebuji mu nějak nacpat, aby se dotazoval na tabulka.id a ne jen na id.. coz se me nedaří ani přes setRowPrimary…

EDIT:
Omlouvám se, v šabloně gridu jsem předlédl render sloupce {$row->users->name} .
Tedy se to automaticky joinovalo na tabulku users podle ID.

ŘEŠENÍ
Přidání dalšího subselectu a ruční render:

public function getData() {
    return $this->database->table('it_devices')->select('it_devices.*,
        (SELECT users.name FROM users WHERE users.id = it_devices.edited_by) AS edited_by,
        (SELECT users.name FROM users WHERE users.id = it_devices.users_id) AS user');
    }

Editoval MW (19. 7. 2017 15:41)

před rokem

kolsi
Člen | 127
+
0
-

Tento problém s „Column ‚id‘ in where clause is ambiguous“ vidím jako docela zásadní. Začne se objevovat v podstatě kdykoli je jako model nastaveno spojení více tabulek a následně grid seřazen, filtrován, editován atd. Sice se to dá „vyřešit“ tím, že se při tvoření sloupců uvede celý název sloupce včetně tabulky, ale to trochu postrádá logiku. Je trochu postavené na hlavu, abych v presenterech a controlech měl zadané názvy DB tabulek.

Nedá se toto řešit už na úrovni Nette? Donutit ho, aby tam ty názvy tabulek doplňovalo automaticky?

„Ambiguous“ sice znamená, že není zřejmé jakou tabulku použít, což ale může platit na úrovni MySQL, ale už nikoli na úrovni Nette, kde je ten dotaz tvořen právě nad „$this->database->table(xxx)“ a je tedy jasné, jakou tabulku použít.

před rokem

MW
Člen | 582
+
0
-

Zdravím,

chystám se na jednom projektu, kde je velké množství těchto gridů, je aktualizovat. Je tam verze 2.1. Gridy tam jsou dělané jako samostatné komponenty přes továrny.

Mohl by mě někdo prosím nastínit, jak moc velké změny mě čekají? Dělal to někdo?

Díky

před rokem

David Matějka
Moderator | 5812
+
+1
-

@MW kdyz se kouknes do release notes, tak skoro zadne, asi jen sablony a zmena redefine makra na define (a plus samozrejme to, ze nova verze vyzaduje nove nette)

před rokem

MW
Člen | 582
+
0
-

David Matějka napsal(a):

@MW kdyz se kouknes do release notes, tak skoro zadne, asi jen sablony a zmena redefine makra na define (a plus samozrejme to, ze nova verze vyzaduje nove nette)

Díky moc… Nebyl jsem si jistý.. abych to neupgradoval a pak přepisoval všechny gridy nějak zásadně… Je jich tam asi 50 :)

před 11 měsíci

vymak
Člen | 92
+
0
-

Ahoj,
měl bych dotaz ohledně toho, zda je úplně možné skrýt tlačítko (i sloupec) Filter viz image.

Nyní mám v tabulce tlačítko pro filtrování, nicméně pod tímto tlačítkem úplně chybí sloupce a je tam jen bílé místo.
Chtěl bych tedy Filter odstranit, jelikož filtrování funguje automaticky po změně.

Definice je následující:

{define table-open-tag}
    <div class="table-responsive">
        <table class="table table-bordered table-striped" style="padding: 10px">
{/define}

{define table-close-tag}
        </table>
    </div>
{/define}

{define global-actions}
    <div class="grid-global-actions pull-left" n:ifset="$form[actions]">
        <div class="input-group">
            {input $form[actions][action] class => 'form-control'}
            <span class="input-group-btn">
        {input $form[actions][process] class => 'btn btn-primary'}
        </span>
        </div>
    </div>
{/define}

{define global-filter-actions}
    {input filter class => "btn btn-primary btn-sm"}
    {if $showCancel}
        {input cancel class => "btn btn-default btn-sm"}
    {/if}
{/define}

{define col-filter}
    {input $column->name class => "input-sm form-control"}
{/define}

{define row-actions-edit}
    {input save class => "btn btn-primary btn-xs"}
    {input cancel class => "btn btn-default btn-xs"}
{/define}

{define row-actions-edit-link}
    <a href="{link edit! $primary}" data-datagrid-edit class="ajax btn btn-primary btn-xs">{_'Upravit'}</a>
{/define}

{define pagination}
    <ul class="pagination">
        {if $paginator->isFirst()}
            <li class="disabled"><a>« {_'První'}</a></li>
            <li class="disabled"><a>« {_'Předchozí'}</a></li>
        {else}
            <li><a href="{link paginate!, 'page' => 1}" class="ajax">« {_'První'}</a></li>
            <li><a href="{link paginate!, 'page' => $paginator->page - 1}" class="ajax">« {_'Předchozí'}</a></li>
        {/if}

        <li class="active">
            <a><strong>{$paginator->page}</strong> / {$paginator->pageCount}</a>
        </li>

        {if $paginator->isLast()}
            <li class="disabled"><a>{_'Další'} »</a></li>
            <li class="disabled"><a>{_'Poslední'} »</a></li>
        {else}
            <li><a href="{link paginate!, 'page' => $paginator->page + 1}" class="ajax">{_'Další'} »</a></li>
            <li><a href="{link paginate!, 'page' => $paginator->pageCount}" class="ajax">{_'Poslední'} »</a></li>
        {/if}
    </ul>
{/define}

Když jsem zkusil

{define global-filter-actions}
{/define}

prázdný sloupec stále přetrvává.

Nette 2.4
PHP 7.2.2
Datagrid 3.0.1

Díky.
Libor

před 8 měsíci

MW
Člen | 582
+
0
-

Zdravím,

updatoval jsem na verzi 3.0.1 a NETTE 2.4.
Vše jsem rozchodil až na dvě věci, třeba se s tím někdo setkal:

1/ kam se poděl dřívější blok global-action vpravo nahoře ? Dával jsem tam např. tisk, export atd.. Nyní je to vázané na hasGlobalActionColumn – hromadné akce? Musím to dostat do šablony ručně nebo je za to nějaká náhrada ?

2/ Nefunguje mě vůbec řazení. V url vidím správný odkaz, ale stále to řadí podle primary klíče a do modelu mě $order chodí s hodnotou NULL.

Narazil na toto někdo? Nemusím mít na NETTE 2.4 @dev verzi?

Díky

před 8 měsíci

hrach
Člen | 1812
+
0
-

@MW
1/ Tim, ze byla pridana podpora pro globalni akce, tak obecne to bylo movnuto dolu. Asi by nebylo od veci vratit moznost si definovat toto policko vpravo nahore. Jde ti o pozici? Commit zde: https://github.com/…c584a2bb7c19#…

2/ O tom nic nevim, kdy se ti to podaril onejak oddebugovat, budu rad.

před 8 měsíci

MW
Člen | 582
+
0
-

@hrach

2/ O tom nic nevim, kdy se ti to podaril onejak oddebugovat, budu rad.

Jakou má mít funkci toto :

if (!$this->data) {
...

if ($this->orderColumn !== NULL && !isset($this->columns[$this->orderColumn])) {
$this->orderColumn = NULL;
}
...
}

v datagrid.php v metodě getData() ?

Protože když to dám pryč, vše funguje jak má.. Ted otázka na co to tam je? Nebo kde mám já naopak co blbě :)

Díky !

Editoval MW (1. 8. 2018 21:52)

před 8 měsíci

David Matějka
Moderator | 5812
+
0
-

@MW nepridavas sloupecky nejak pozde? treba az v render nebo tak?

před 8 měsíci

MW
Člen | 582
+
0
-

@DavidMatějka

Klasicky přes továrnu, a svoji třídu, kde rozšiřuji původní Datagrid a zde přepisuji Render(). Ale i bez přepisování Renderu se to chová stejně. Sloupečky ale v Render metodě přidává samotný grid.

Hlavně vše funguje, kromě řazení.. leda by se mě někde ztratily $this->data .. viz ten kod nahoře, protože bez toho

if ($this->orderColumn !== NULL && !isset($this->columns[$this->orderColumn])) {
$this->orderColumn = NULL;

to vše jede jak ma…

před 8 měsíci

MW
Člen | 582
+
0
-

Tak jsem na to přišel, ale nevím jak to správně vyřešit, moc prosím o radu:

ve své třídě, kterou dědím od Datagrid, přepisuji metodu AddColumn :

public function addColumn($name, $label = NULL) {
    if (!$this->rowPrimaryKey) {
        $this->rowPrimaryKey = $name;
    }

    $label = $label ? $this->translate($label) : ucfirst($name);
    return $this->columns[] = new ExtColumn($name, $label, $this);
}

a to proto, že si přidávám svůj typ sloupce a tedy volám ExtColumn, což je třída, která rozšiřuje Column :

final class ExtColumn extends \Nextras\Datagrid\Column {


    /** @var string */
    protected $sum = FALSE;

    /** @var string */
    public $col = NULL;


    // add sum column
    public function enableSum($col = NULL) {

    If($col) $this->col = $col;

    $this->sum = TRUE;
    return $this;
    }

    public function isSum() {
    return $this->sum;
    }

}

A tady musím mít něco blbě, protože když toto osdstraním, jede grid ja má.. Nevidíte někdo nějakou chybu prosím?

Editoval MW (2. 8. 2018 9:38)

před 8 měsíci

David Matějka
Moderator | 5812
+
0
-

@MW zkratka to vypada, ze ve chvili, kdy se vola tenhle kus kodu, tak neexistuji vsechny sloupecky (respektive alespon ten, kde ktereho radis). takze si oddebuguj, kdy se to vola a jakto, ze neexisutje

před 8 měsíci

David Matějka
Moderator | 5812
+
+1
-

@MW ten sloupecek musis pridat pod spravnym klicem do $this->columns https://github.com/…Datagrid.php#L110

před 8 měsíci

MW
Člen | 582
+
0
-

@DavidMatějka
Předtím to valilo… tuto změnu jsem úplně přehlédl.

Moc díky !!!

před měsícem

ondrejd
Člen | 24
+
0
-

Dobrý den, chtěl bych se zeptat, když u datagridu použiju filter, jde nějak zakázat, aby se přidal nový sloupec pro tlačítka submit/cancel filter?
Buď bych je potřeboval přesunout do již existujícího sloupce „actions“ nebo ty tlačítka (VČETNĚ vytvořeného nadbytečného sloupce) úplně odstranit a ponechat odesílání filtru jen přes JavaScript.
Děkuji předem.

před měsícem

ondrejd
Člen | 24
+
0
-

ondrejd napsal(a):

Dobrý den, chtěl bych se zeptat, když u datagridu použiju filter, jde nějak zakázat, aby se přidal nový sloupec pro tlačítka submit/cancel filter?
Buď bych je potřeboval přesunout do již existujícího sloupce „actions“ nebo ty tlačítka (VČETNĚ vytvořeného nadbytečného sloupce) úplně odstranit a ponechat odesílání filtru jen přes JavaScript.
Děkuji předem.

Tak už není třeba, vyřešil jsem si sám.

Stránky: Prev 1 … 9 10 11 RSS tématu