Отображение списка при нажатии кнопки сетки? (в Agile Toolkit)

У меня есть сетка с кнопками в одном из столбцов, например: как я могу показать список или новую сетку при нажатии кнопки?

   $grid=$page->add('Grid');
        $grid->setModel('Tickets',array('subject','date','time','department','status','text'));
        $grid->addColumn("button",'read_ticket_id','Read');

        if($_GET['read_ticket_id']){
            // this generates javascript to be executed on buttion click
       //how can I show a lister or a new grid when the button clicked?
        }

person webelizer    schedule 19.10.2012    source источник
comment
Пожалуйста, уточните, чего вы хотите достичь. Вы хотите открыть новую страницу с этим идентификатором записи? Новая сетка или список (где?)?   -  person DarkSide    schedule 19.10.2012
comment
Спасибо за ответ. Я хочу загрузить шаблон (вид) в новый слой.   -  person webelizer    schedule 20.10.2012


Ответы (2)


Ознакомьтесь с примерами в ATK4 Codepad. http://agiletoolkit.org/codepad/gui/grid

Изменить: это фрагмент одной из моих страниц. Может быть, вы найдете это полезным. Идея заключается в том, что вы фактически генерируете JavaScript внутри этого оператора IF, а затем JavaScript отправляется обратно в ваш браузер, который затем может сделать еще один запрос на что-то (перезагрузить существующий объект, создать новый, перенаправить куда-то и т. д.).

...
if($_GET['ticket']){
    // Join this report with selected ticket
    $this->grid->model->addToTicket($_GET['ticket']);
    // Reload
    $this->js(null,array(
        $x->js()->reload(),
        $this->js()->univ()->successMessage('Successfully saved')
    ))->execute();
}
...

С помощью $_GET['ticket'] вы получаете идентификатор записи в сетке, в которой вы нажали кнопку "Добавить в тикет". $x — это какой-то другой объект на этой странице, например, какая-то форма, поле, вкладка или другая сетка. С $this->grid->model вы получаете ссылку на модель, связанную с этой сеткой, и в этой модели у меня есть определенное действие/метод - addToTicket, который что-то делает с базой данных.

Вы также можете перенаправить на другую страницу с помощью $this->js()->redirect() или $this->js()->location() и т. д. По сути, вы можете делать все, что хотите, но все это должно генерировать JavaScript как результат или инструкции для вашего браузера, что делать дальше.

И не забудьте добавить ->execute() в конце! Это остановит дальнейший анализ вашей страницы и мгновенно сгенерирует ответ JS.

person DarkSide    schedule 19.10.2012
comment
Спасибо за ответ. Я хочу загрузить шаблон (вид) в новый слой. - person webelizer; 20.10.2012

Я нашел хороший пример для этого вопроса:

http://agiletoolkit.org/doc/grid/interaction

==========

$g=$p->add('Grid');
$g->setSource('user');
$g->addColumn('name');
$g->addColumn('surname');
$g->addColumn('button','info','More Info');
$g->dq->where('name is not null')->limit(5);

if($_GET['info']){
    $g->js()->univ()->dialogURL('More info',
            $this->api->getDestinationURL(
                null,array(
                    'more_info'=>$_GET['info'],
                    'cut_object'=>'myform'
                    )))
        ->execute();
}

if($_GET['more_info']){
    $f=$this->add('Form','myform');
    $f->addField('readonly','name');
    $f->addField('readonly','surname');
    $f->setSource('user');
    $f->setConditionFromGET('id','more_info');
}
person webelizer    schedule 21.10.2012
comment
Небольшое примечание: 1) Лучше использовать url() вместо getDestinationURL(). Это то же самое, но метод getDestinationURL устарел и, вероятно, будет удален в какой-то момент в будущем. 2) setConditionFromGET() устарел и удален, поэтому вам, вероятно, нужно использовать setCondition или что-то в этом роде. - person DarkSide; 30.10.2012