diff options
author | groditi <groditi@03d0b0b2-0e1a-0410-a411-fdb2f4bd65d7> | 2009-08-01 20:57:29 +0000 |
---|---|---|
committer | groditi <groditi@03d0b0b2-0e1a-0410-a411-fdb2f4bd65d7> | 2009-08-01 20:57:29 +0000 |
commit | a6e66122c2a0528001eff1e3a3814699fb1e11e6 (patch) | |
tree | e478e17b58fb8a7b62e8129ab860470f0d7f45c5 | |
parent | 27862e257c286d0a88a789eb08caf7537a7feccb (diff) | |
download | reaction-a6e66122c2a0528001eff1e3a3814699fb1e11e6.tar.gz reaction-a6e66122c2a0528001eff1e3a3814699fb1e11e6.zip |
example of how to create forms that return users to the URI they came from
-rw-r--r-- | lib/ComponentUI/Controller/TestModel/Bar.pm | 21 | ||||
-rw-r--r-- | share/skin/componentui/layout/bar/create.tt | 10 |
2 files changed, 31 insertions, 0 deletions
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 + +<input type="hidden" name="return_to_uri" value="[% return_to_uri %]"> +[% call_next %] + +=cut |