X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FController%2FBase.pm;h=5847b98b5fd9e9b2840ecb86062d212e810be497;hb=9508e215c78bc172721e14d41d21858abb23672e;hp=a233a0eb515cc4ce18971f6ec5bdad0e2bd4437a;hpb=fa7fc7eeb3ca718914affee06c0629a08d571288;p=kivitendo-erp.git diff --git a/SL/Controller/Base.pm b/SL/Controller/Base.pm index a233a0eb5..5847b98b5 100644 --- a/SL/Controller/Base.pm +++ b/SL/Controller/Base.pm @@ -13,7 +13,8 @@ use SL::Presenter; use Rose::Object::MakeMethods::Generic ( - scalar => [ qw(action_name) ], + scalar => [ qw(action_name) ], + 'scalar --get_set_init' => [ qw(js) ], ); # @@ -28,6 +29,7 @@ sub url_for { my %params = ref($_[0]) eq 'HASH' ? %{ $_[0] } : @_; my $controller = delete($params{controller}) || $self->controller_name; my $action = $params{action} || 'dispatch'; + my $fragment = delete $params{fragment}; my $script; if ($controller =~ m/\.pl$/) { @@ -40,7 +42,7 @@ sub url_for { my $query = join '&', map { uri_encode($_->[0]) . '=' . uri_encode($_->[1]) } @{ flatten(\%params) }; - return "${script}?${query}"; + return "${script}?${query}" . (defined $fragment ? "#$fragment" : ''); } sub redirect_to { @@ -98,6 +100,18 @@ sub render { $options->{layout} = 0 if $options->{type} ne 'html'; } + # Let the presenter do the rest of the work. + my $output; + { + local $::form->{title} = $locals{title} if $locals{title}; + $output = $self->presenter->render( + $template, + { type => $options->{type}, process => $options->{process} }, + %locals, + SELF => $self, + ); + } + if ($options->{header}) { # Output the HTTP response and the layout in case of HTML output. @@ -120,14 +134,6 @@ sub render { } } - # Let the presenter do the rest of the work. - my $output = $self->presenter->render( - $template, - { type => $options->{type}, process => $options->{process} }, - %locals, - SELF => $self, - ); - # Print the output if wanted. print $output if $options->{output}; @@ -161,6 +167,8 @@ sub send_file { } else { $::locale->with_raw_io(\*STDOUT, sub { print $$file_name_or_content }); } + + return 1; } sub presenter { @@ -173,6 +181,10 @@ sub controller_name { return $class; } +sub init_js { + SL::ClientJS->new(controller => $_[0]) +} + # # Before/after run hooks # @@ -517,6 +529,9 @@ L. The action to call is given by C<$params{action}>. It defaults to C. +If C<$params{fragment}> is present, it's used as the fragment of the resulting +URL. + All other key/value pairs in C<%params> are appended as GET parameters to the URL. @@ -611,6 +626,10 @@ name the dispatching resolved to. Returns the global presenter object by calling L. +=item C + +Returns an L instance for this controller. + =back =head2 PRIVATE FUNCTIONS