]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/Maypole.pm
fixes to plain CDBI model
[maypole.git] / lib / Maypole.pm
index 119a85a29127c9908581bfa6afb34b667d0bd5c9..5d3e25963c7f2d29fb8c2f3286ba5031b44c9a25 100644 (file)
@@ -194,7 +194,7 @@ synopsis of L<Maypole::Plugin::FormBuilder> 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<hooks> - 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");
     }
 }