Two types of custom page are creating an out of memory error when viewing the published page. The admin for both custom page types works fine.
Previously these worked on 2.4 so it may be that I’ve missed something whilst upgrading to 3.1.8.
There are some ugly loops in there that may have been the cause, but commenting them out doesn’t seem to remedy the issue.
Here’s the first type of page, which causes an error in /framework/control/Director.php on line 769:
<?php
class Artist extends Page
{
// parent page type
static $default_parent = 'ArtistList';
// disable child pages
static $allowed_children = array();
// db fields
static $db = array (
'Description' => 'HTMLText'
);
// relations
static $belongs_many_many = array (
'Artworks' => 'Artwork'
);
static $has_many = array (
'SampleArtworks' => 'SampleArtwork'
);
static $has_one = array(
'Thumbnail' => 'Image'
);
// fields for CMS
public function getCMSFields()
{
$fields = parent::getCMSFields();
$desc_field = New HtmlEditorField('Description');
$sample_artworks = new GridField('SampleArtworks', null, $this->SampleArtworks(), GridFieldConfig_RelationEditor::create());
$thumbnail_field = new UploadField('Thumbnail', 'Thumbnail');
$thumbnail_field->setFolderName('Uploads/artist_thumbnails/');
$fields->removeFieldFromTab("Root.Main", 'Content');
$fields->renameField("Title", "Name");
$fields->addFieldToTab("Root.Main", $desc_field);
$fields->addFieldToTab("Root.Thumbnail", $thumbnail_field);
$fields->addFieldToTab("Root.Samples of work for profile page", $sample_artworks);
return $fields;
}
// retrieve all exhibitions featuring artworks by this artist
public function Exhibitions() {
$return = new DataList('Exhibition');
// $exhibitions = DataObject::get('Exhibition');
// foreach($exhibitions as $exhibition) {
// $artists = $exhibition->Artists();
// if($artists->byID($this->ID) && !$return->byID($exhibition->ID)) {
// $return->push($exhibition);
// }
// }
return $return;
}
}
class Artist_Controller extends Page_Controller {
}
And the second type of page, which causes an error in /framework/core/Config.php on line 577:
<?php
class Exhibition extends Page
{
// parent page type
private static $default_parent = 'ExhibitionList';
// disable child pages
private static $allowed_children = array();
//db fields
private static $db = array (
'StartDate' => 'Date',
'EndDate' => 'Date',
'Description' => 'Text'
);
// relations
private static $many_many = array (
'Artworks' => 'Artwork'
);
private static $has_one = array(
'Thumbnail' => 'Image'
);
// fields for CMS
public function getCMSFields()
{
$fields = parent::getCMSFields();
$start_date_field = new DateField('StartDate', 'Start date');
$start_date_field->setConfig('showcalendar', true);
$end_date_field = new DateField('EndDate', 'End date');
$end_date_field->setConfig('showcalendar', true);
$desc_field = new TextAreaField('Description');
$thumbnail_field = new UploadField('Thumbnail', 'Thumbnail');
$thumbnail_field->setFolderName('Uploads/exhibition_thumbnails/');
$artworks = new GridField('Artworks', null, $this->Artworks(), GridFieldConfig_RelationEditor::create());
$fields->renameField("Title", "Title");
$fields->removeFieldFromTab("Root.Main", 'Content');
$fields->addFieldToTab("Root.Main", $start_date_field);
$fields->addFieldToTab("Root.Main", $end_date_field);
$fields->addFieldToTab("Root.Main", $desc_field);
$fields->addFieldToTab("Root.Main Image", $thumbnail_field);
$fields->addFieldToTab("Root.Artworks", $artworks);
return $fields;
}
public function Artists() {
$artists = new DataList('Artist');
// $artworks = $this->Artworks();
// loop through artworks and retrieve each related artist.
// return a dataobjectset that contains each artist only once.
// foreach($artworks as $artwork) {
// $next_artists = $artwork->Artists();
// if($next_artists) {
// foreach($next_artists as $check_artist) {
// if(!$artists->byID($check_artist->ID)) {
// $artists->push($check_artist);
// }
// }
// }
// }
return $artists;
}
}
class Exhibition_Controller extends Page_Controller {
function IsExhibition() { return true; }
}
Any ideas?