From a6e66122c2a0528001eff1e3a3814699fb1e11e6 Mon Sep 17 00:00:00 2001 From: groditi Date: Sat, 1 Aug 2009 20:57:29 +0000 Subject: example of how to create forms that return users to the URI they came from --- lib/ComponentUI/Controller/TestModel/Bar.pm | 21 +++++++++++++++++++++ share/skin/componentui/layout/bar/create.tt | 10 ++++++++++ 2 files changed, 31 insertions(+) create mode 100644 share/skin/componentui/layout/bar/create.tt diff --git a/lib/ComponentUI/Controller/TestModel/Bar.pm b/lib/ComponentUI/Controller/TestModel/Bar.pm index 4859b7d..95f0975 100644 --- a/lib/ComponentUI/Controller/TestModel/Bar.pm +++ b/lib/ComponentUI/Controller/TestModel/Bar.pm @@ -8,6 +8,7 @@ __PACKAGE__->config( collection_name => 'Bar', action => { base => { Chained => '/base', PathPart => 'testmodel/bar' }, + create => { ViewPort => { layout => 'bar/create' } }, list => { ViewPort => { enable_order_by => [qw/name foo published_at/], @@ -29,7 +30,27 @@ sub create :Chained('base') { my $action_vp = $self->next::method(@_); my $self_uri = $c->uri_for($self->action_for('create')); $action_vp->action($self_uri); + + my $params = $c->request->parameters; + if ( defined $params->{return_to_uri} && $params->{return_to_uri} ){ + if( $params->{return_to_uri} ne $c->request->uri ){ + $action_vp->layout_args->{return_to_uri} = $params->{return_to_uri}; + } + } elsif( $c->request->referer ne $c->request->uri) { + $action_vp->layout_args->{return_to_uri} = $c->request->referer; + } + return $action_vp; } +sub on_create_close_callback { + my($self, $c, $vp) = @_; + if ( my $return_to_uri = delete $c->request->parameters->{return_to_uri} ){ + $c->response->redirect( $return_to_uri ); + } else { + $self->redirect_to( $c, 'list' ); + } + $c->detach; +} + 1; diff --git a/share/skin/componentui/layout/bar/create.tt b/share/skin/componentui/layout/bar/create.tt new file mode 100644 index 0000000..e59fbba --- /dev/null +++ b/share/skin/componentui/layout/bar/create.tt @@ -0,0 +1,10 @@ +=widget Action + +=extends action + +=for layout container_list + + +[% call_next %] + +=cut -- cgit v1.2.3-54-g00ecf