Datagrid ublaboo onChange

Gavrilo
Člen | 46
+
0
-

Ahojte,

mohol by mi niekto poradiť ako rozbehnúť onChange v datagride ?

$grid->addColumnStatus('admin', 'Oprávnenie')
            ->addOption(1, 'Správca')
            ->setClass('btn-success')
            ->endOption()
            ->addOption(0, 'Uživateľ')
            ->setClass('btn-primary')
            ->endOption()
            ->onChange[] = [$this, 'changeAdminStatus'];

A v podstate tu som skončil a neviem čo ďalej vytvoriť si funkciu a naplniť ju query alebo ? Niečo takéto ?

public function changeAdminStatus(){

    }

Ďakujem za každú radu

igor.pocta
Člen | 100
+
+1
-

Po kliknutí na select se ti zavolá metoda changeAdminStatus, do které jsou předány dva parametry: id řádku a hodnota, kterou jsi vybral. To si musíš zpracovat, např. uložením do DB.

public function changeAdminStatus($id, $value) {
	// Uložení stavu $value do záznamu $id
}
public function changeAdminStatus($id, $value) {
	// Jen ukázka, https://doc.nette.org/cs/database/explorer#toc-insert-update-delete
	$this->db->table('users')
    	->where('id', $id)
	    ->update([
	        'status' => $value
	    ]);
}

Editoval igor.pocta (2. 10. 2017 22:53)

Gavrilo
Člen | 46
+
0
-

A niečo na opätovné vykreslenie sa tam nevolá ? Pretože query prebehne ale status mi zobrazí ako zmenení až po obnovení (manuálnom) a samozrejme Ďakujem …

igor.pocta
Člen | 100
+
+2
-

Gavrilo napsal(a):

A niečo na opätovné vykreslenie sa tam nevolá ? Pretože query prebehne ale status mi zobrazí ako zmenení až po obnovení (manuálnom) a samozrejme Ďakujem …

To je možné (redrawItem), je to přímo v referenčním zdroj. kódu

public function statusChange($id, $new_status)
{
	if (in_array($new_status, [0, 1, 2])) {
		$this->ndb->table('ublaboo_example')
			->where('id = ?', $id)
			->update(['status' => $new_status]);
	}

	$status_text = ['offline', 'online', 'standby'][$new_status];

	$this->flashMessage("Status of category [$id] was updated to [$status_text].", 'success');

	if ($this->isAjax()) {
		$this->redrawControl('flashes');
		$this['columnsGrid']->redrawItem($id);
	}
}
Gavrilo
Člen | 46
+
0
-
public function changeAdminStatus($id, $value)
{
    $this->userManager->update($id, [
        'admin' => $value
    ]);

    $permission_text = ['Správca', 'Uživateľ'][$value];

    $this->flashMessage("Status of category [$id] was updated to [$permission_text].", 'success');

    if ($this->isAjax()) {
        $this->redrawControl('flashes');
        $this['simpleGrid']->redrawItem($id);
    }
}

Niekde robím chybu a neviem kde nejako mi to nechce bežať…

$grid->addColumnStatus('admin', 'Oprávnenie')
            ->addOption(1, 'Správca')
            ->setClass('btn-success')
            ->endOption()
            ->addOption(0, 'Uživateľ')
            ->setClass('btn-primary')
            ->endOption()
            ->onChange[] = [$this, 'changeAdminStatus'];
Gavrilo
Člen | 46
+
-2
-

REFRESH

BuMoRi
Člen | 109
+
0
-

Ahoj, měl bych taky dotaz k onChange[] v Ublaboo datagridu: lze nějak do volané metody přidat ještě 3. parametr? Jde mi o to, že když mám několik sloupců, ve kterých chci měnit status on/off, abych nemusel vytvářet několik changeXxxStatus metod.