GetModels: Funktion zum Setzen zusätzlicher URL-Parameter
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 28 Jul 2014 10:04:22 +0000 (12:04 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 28 Jul 2014 10:07:08 +0000 (12:07 +0200)
SL/Controller/Helper/GetModels.pm

index 6d85228..ec970e5 100644 (file)
@@ -11,7 +11,7 @@ use Scalar::Util qw(weaken);
 
 use Rose::Object::MakeMethods::Generic (
   scalar => [ qw(controller model query with_objects filtered sorted paginated finalized final_params) ],
-  'scalar --get_set_init' => [ qw(handlers source) ],
+  'scalar --get_set_init' => [ qw(handlers source additional_url_params) ],
   array => [ qw(plugins) ],
 );
 
@@ -113,6 +113,8 @@ sub finalize {
 
   return %{ $self->final_params } if $self->finalized;
 
+  $self->register_handlers(callback => sub { shift; (@_, %{ $self->additional_url_params }) }) if %{ $self->additional_url_params };
+
   push @{ $params{query}        ||= [] }, @{ $self->query || [] };
   push @{ $params{with_objects} ||= [] }, @{ $self->with_objects || [] };
 
@@ -131,6 +133,14 @@ sub register_handlers {
   map { push @{ $handlers->{$_} }, $additional_handlers{$_} if $additional_handlers{$_} } keys %$handlers;
 }
 
+sub add_additional_url_params {
+  my ($self, %params) = @_;
+
+  $self->additional_url_params({ %{ $self->additional_url_params }, %params });
+
+  return $self;
+}
+
 sub get_models_url_params {
   my ($self, $sub_name_or_code) = @_;
 
@@ -190,6 +200,8 @@ sub init_source {
   $::form
 }
 
+sub init_additional_url_params { +{} }
+
 1;
 __END__
 
@@ -254,6 +266,13 @@ one of the controller's functions.
 The value returned by C<SUB> must be either a single hash
 reference or a hash of key/value pairs to add to the URL.
 
+=item add_additional_url_params C<%params>
+
+Sets additional parameters that will be added to each URL generated by
+this model (e.g. for pagination/sorting). This is just sugar for a
+proper call to L<get_models_url_params> with an anonymous sub adding
+those parameters.
+
 =item get_callback
 
 Returns a URL suitable for use as a callback parameter. It maps to the