NiftyGrid problém se subgridem a smazání záznamu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Nevinho
Člen | 77
+
0
-

Zdarec, dělám si niftyGrid a používám verzi z doplňků na nette.org.

Mám ovšem jeden problém, nebo spíše dva..

Když si udělám subgrid, tak po kliknutí na ten zelený křížek se nic nestane subgrid se vůbec nevykreslí, jako kdyby se nevykonala žádná akce, a za druhé, nemůžu přijít na to jak smazat záznam(jednotlivý řádek), po kliknutí na křížek se pouze zobrazí hláška, jestli chci smazat záznam a po kliknutí na ok se zase nic neprovede.
KontaktSubGrid:

<?php
use \NiftyGrid\Grid;

class KontaktSubGrid extends Grid
{
    protected $kontakty;

    protected $pobocky_id;

    public function __construct($kontakty, $pobocky_id)
    {
        parent::__construct();
        $this->kontakty = $kontakty;
        $this->pobocky_id = $pobocky_id;
    }

    protected function configure($presenter)
    {
        $source = new \NiftyGrid\NDataSource($this->kontakt->select('kontakty.id, telefon,mail,fax,www, pobocky.id')->where('pobocky_id = ?', $this->pobocky_id));

        $this->setDataSource($source);


        $this->addColumn('telefon', 'Telefon', '200px')
             ->setTextFilter()
             ->setTextEditable()
             ->setAutocomplete(5);

        $this->addColumn('email', 'E-mail', '80px')
             ->setTextFilter()
             ->setTextEditable()
             ->setAutocomplete(5);

        $this->addColumn('fax', 'Fax', '200px')
             ->setTextFilter()
             ->setTextEditable()
             ->setAutocomplete(5);

        $this->addColumn('www', 'Webové stránky', '150px')
             ->setTextFilter()
             ->setTextEditable()
             ->setAutocomplete(5);




       $self = $this;


        $this->setRowFormCallback(function($values) use ($self, $presenter){
                $vals = array(
                    "id" => $values["id"],
                    "telefon" => $values["telefon"],
                    "email" => $values["email"],
                    "fax" => $values["fax"],
                    "www" => $values["www"]

                );
                $presenter->context->database->table('kontakty')->where("id", $vals["id"])->update($vals);
                $self->flashMessage("Záznam byl úspěšně uložen.","grid-successful");
            }
        );

        $this->addButton(Grid::ROW_FORM, "Editace")
            ->setClass("fast-edit");


        $this->addButton("delete", "Smazat")
            ->setClass("delete")
            ->setLink(function($row) use ($self){return $self->link("delete!", $row['id']);})
            ->setConfirmationDialog(function($row){return "Určitě chcete smazat tento záznam?";});


}


             public function handleDelete($id)
    {
        $this->flashMessage("Tato funkce zatím nefunguje", "grid-info");
    }

    }

?>

PobockyGrid

<?php

<?php
use \NiftyGrid\Grid;

class PobockyGrid extends Grid
{
    protected $pobocky;

    public function __construct($pobocky)
    {
        parent::__construct();
        $this->pobocky = $pobocky;
    }

    protected function configure($presenter)
    {
        $source = new \NiftyGrid\NDataSource($this->pobocky->select('pobocky.id,typ,ulice, psc, mesto, kraj, firmy.nazev_firmy'));

        $this->setDataSource($source);

        $this->setWidth("800px");


        $this->addColumn('nazev_firmy', 'Firma', '100px')
             ->setTableName("firmy.nazev_firmy")
             ->setTextFilter()
             ->setAutocomplete(5);


        $this->addColumn('typ', 'Typ', '80px')
             ->setTextFilter()
             ->setTextEditable()
             ->setAutocomplete(5);

        $this->addColumn('ulice', 'Ulice', '200px')
             ->setTextFilter()
             ->setTextEditable()
             ->setAutocomplete(5);

        $this->addColumn('psc', 'PSÄŚ', '100px')
             ->setTextFilter()
             ->setTextEditable()
             ->setAutocomplete(5);

        $this->addColumn('mesto', 'Město', '200px')
             ->setTextFilter()
             ->setTextEditable()
             ->setAutocomplete(5);

        $this->addColumn('kraj', 'Kraj', '100px')
             ->setTextFilter()
             ->setTextEditable()
             ->setAutocomplete(5);


       $self = $this;


        $this->setRowFormCallback(function($values) use ($self, $presenter){
                $vals = array(
                    "id" => $values["id"],
                    "ulice" => $values["ulice"],
                    "psc" => $values["psc"],
                    "mesto" => $values["mesto"],
                    "kraj" => $values["kraj"]

                );
                $presenter->context->database->table('pobocky')->where("id", $vals["id"])->update($vals);
                $self->flashMessage("Záznam byl úspěšně uložen.","grid-successful");
            }
        );

        $this->addButton(Grid::ROW_FORM, "Editace")
            ->setClass("fast-edit");


        $this->addButton("delete", "Smazat")
            ->setClass("delete")
            ->setLink(function($row) use ($self){return $self->link("delete!", $row['id']);})
            ->setConfirmationDialog(function($row){return "Určitě chcete smazat tento záznam?";});


        $this->addSubGrid("kontakt", "Zobrazit kontakty na poboÄŤku")
            ->setGrid(new KontaktSubGrid($presenter->context->database->table('kontakty'), $this->activeSubGridId))
            ->settings(function($grid){
                $grid->setWidth("800px;");
            })
            ->setCellStyle("background-color:#f6f6f6; padding:20px;");

}


             public function handleDelete($id)
                 {
                 $this->finance->find('id', $id)->delete();
                 $this->flashMessage("Záznam byl smazán", "grid-info");
    }
}
?>

Za každou radu předem díky.

Editoval Nevinho (3. 12. 2012 15:17)

Twista
Člen | 48
+
0
-

Nevinho napsal(a):

použij na mazání něco jako tohle

$this->addButton("delete", "Smazat")
                ->setClass("delete")
                ->setAjax(false)
                ->setLink(function($row) use ($presenter) {
                            return $presenter->link("delete!", $row['id']);
                        })
                ->setConfirmationDialog(function($row) {
                            return "Určitě chcete odstranit jídlo " . $row['name_cs'] . "?";
                        });

s tim ze v presenteru uz jen vytvoris signal delete, napr:

public function handleDelete($id){
        $this->facade->removeItem($id);
    }
Nevinho
Člen | 77
+
0
-

Nemělo by být v tom addButton místo tohohohle řádku

<?php
>setLink(function($row) use ($presenter) {
                            return $presenter->link("delete!", $row['id']);

?>

Tento?

<?php

->setLink(function($id) use ($self){return $self->handleDelete($id);})
?>

Editoval Nevinho (2. 12. 2012 14:09)

Nevinho
Člen | 77
+
0
-

Opravdu nikdo nemá nějakou radu, jak by se dalo vyřešit aspoň to vykreslení subgridu? Už si s tim lámu hlavu 2 dny, a pořád nic. A to jsem postupoval uplne stejne jak ve vzorovém příkladu. Po kliknutí na zelený křížek, se nic nevypíše, jen dole v liště se ukáže url s odpovídajícím id, ale nic se nevykreslí, nevíte někdo kde může být chyba?

MW
Člen | 626
+
0
-

napr.:

$self = $this;
	$this->addButton("delete", "Smazat")
		->setClass("delete")
		->setLink(function($row) use ($self) {
			    return $self->link("delete!", $row['id']);
			})
		->setConfirmationDialog(function($row) {
			    return "Ostranit záznam s ID $row[id]?";
			});