X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=lib%2FMaypole.pm;h=5d3e25963c7f2d29fb8c2f3286ba5031b44c9a25;hb=3886be13f39d6d3fc8d0b76d4716175df1bb8056;hp=119a85a29127c9908581bfa6afb34b667d0bd5c9;hpb=a02686080acb66fce170e9657e110761b09e62a2;p=maypole.git diff --git a/lib/Maypole.pm b/lib/Maypole.pm index 119a85a..5d3e259 100644 --- a/lib/Maypole.pm +++ b/lib/Maypole.pm @@ -194,7 +194,7 @@ synopsis of L for an example driver =cut -__PACKAGE__->mk_classdata($_) for qw( config init_done view_object ); +__PACKAGE__->mk_classdata($_) for qw( config init_done view_object model_classes_loaded); __PACKAGE__->mk_accessors( qw( params query objects model_class template_args output path @@ -206,6 +206,8 @@ __PACKAGE__->config( Maypole::Config->new() ); __PACKAGE__->init_done(0); +__PACKAGE__->model_classes_loaded(0); + =head1 HOOKABLE METHODS As a framework, Maypole provides a number of B - methods that are @@ -306,15 +308,16 @@ sub setup_model foreach my $subclass ( @{ $config->classes } ) { - no strict 'refs'; - unshift @{ $subclass . "::ISA" }, $config->model; - - # Load custom model code, if it exists - nb this must happen after the - # unshift, to allow code attributes to work, but before adopt(), - # in case adopt() calls overridden methods on $subclass - $class->load_model_subclass($subclass); - - $config->model->adopt($subclass) if $config->model->can("adopt"); + next if $subclass->isa("Maypole::Model::Base"); + no strict 'refs'; + unshift @{ $subclass . "::ISA" }, $config->model; + + # Load custom model code, if it exists - nb this must happen after the + # unshift, to allow code attributes to work, but before adopt(), + # in case adopt() calls overridden methods on $subclass + $class->load_model_subclass($subclass) unless ($class->model_classes_loaded()); + + $config->model->adopt($subclass) if $config->model->can("adopt"); } }