Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

DataObjectManager Module /

Discuss the DataObjectManager module, and the related ImageGallery module.

Moderators: martimiz, UncleCheese, Sean, Ed, biapar, Willr, Ingo, swaiba

trying to get the latest images out of an ImageObject


Go to End


5 Posts   1285 Views

Avatar
benni91

Community Member, 72 Posts

1 February 2012 at 10:44pm

Edited: 01/02/2012 10:52pm

Hi @ all,

I'm trying to create my own image gallery. The galleries preview at the holder, should contain the last 4 images of this gallery.
The way i tried it doesn't work. I hope someone could help me.

The relations between the single pages and objects
GalleryHolder.php -> GalleryPage.php -> GalleryImagesObject.php -> Image Image Image ...

The GalleryHolder.php has this two function to sort the galleries and to get the latest 4 images of each gallery

	public function getGalleries() { 
		return DataObject::get('GalleryPage', "ParentID = '$this->ID'", 'Date DESC'); 
	}
	
	function LatestGalleryImages($num=4) {
    	$galleryimage = DataObject::get_one("GalleryHolder");
    	return ($galleryimage) ? DataObject::get("GalleryPage", "ParentID = $galleryimage->ID", "Date DESC", "", $num) : false;
	}

that's the GalleryImagesObject.php

<?php
class GalleryImagesObject extends DataObject {

	public static $db = array(
		'Title' => 'Text',
		'Description' => 'Text'
	);

	public static $has_one = array(
		'GalleryImage' => 'Image',
		'GalleryPage' => 'GalleryPage'
	);

	public function getCMSFields_forPopup() {
    
    return new FieldSet(
    	new TextField('Title', 'Titel des Bildes'),
      	new TextAreaField('Description', 'Beschreibung des Bildes'),
      	new ImageField('GalleryImage', 'Bild(er) hochladen')
    );
    
	}
}

?>

and my GallerHolder.ss looks like this.

<% control getGalleries %>
	<% control GalleryImagesObject %>
		$GalleryImage
	<% end_control %>
	<a href="$Link" title="Die Gallerie $Title anzeigen">$Title</a>
<% end_control %>

-----

Where's the mistake(s) i made? I can see the link but not the images :(
Thx for your Help

Benni

P.s. Website

Avatar
UncleCheese

Forum Moderator, 4102 Posts

2 February 2012 at 4:44am

How does GalleryPage relate to GalleryImageObject?

--------------------
SilverStripe tips, tutorials, screencasts and more: http://www.leftandmain.com

Avatar
benni91

Community Member, 72 Posts

2 February 2012 at 5:08am

Edited: 02/02/2012 7:54am

Sry, i think that was wrong in my first post. I'm not able to describe the relations good in english.

Thats the GalleryPage.php I hope it will help

<?php
class GalleryPage extends Page {
		
	static $allowed_children = 'none';
	static $default_parrent = 'GalleryHolder';
	static $can_be_root = false;

	public static $db = array(
		'Date' => 'Date',
		'Description' => 'HTMLText',
		//'ThumbnailSize' => 'Text',
	);
	
	public static $has_many = array(
		'GalleryImages' => 'GalleryImagesObject'
	);

	function getCMSFields() {
		$fields = parent::getCMSFields();
		$fields->removeFieldFromTab('Root.Content.Main', 'Content');
		$fields->addFieldToTab('Root.Content.Main', $date = new DateField('Date', 'Datum der Aufnahmen'));
		$date->setConfig('showcalendar', true);	
		$fields->addFieldToTab('Root.Content.Main', new SimpleTinyMCEField('Description','Beschreibung der Gallerie'));
		//$fields->addFieldToTab('Root.Content.Main', new TextField('ThumbnailSize','Größe der Thumbnails (in px / muss ausgefüllt sein)'));
		$fields->addFieldToTab('Root.Content.Main', $GalleryImages = new ImageDataObjectManager($this, 'GalleryImages', 'GalleryImagesObject', 'GalleryImage', array('Title' => 'Titel des Bildes', 'Description' => 'Beschreibung des Bildes'), 'getCMSFields_forPopup'));
		$GalleryImages->copyOnImport = false;
		//$GalleryImages->setPageSize( '999' );
		$GalleryImages->setPerPageMap('50');
		$GalleryImages->setPageSize('50');
		return $fields;
	}
}

class GalleryPage_Controller extends Page_Controller {

	public function PrevNextPage($Mode = 'next') {
		if($Mode == 'next'){
			$Where = "ParentID = ($this->ParentID) AND Sort > ($this->Sort)";
			$Sort = "Sort ASC";
		}
		elseif($Mode == 'prev'){
			$Where = "ParentID = ($this->ParentID) AND Sort < ($this->Sort)";
    		$Sort = "Sort DESC";
  		}
  		else{
    		return false;
  		}
  		return DataObject::get("SiteTree", $Where, $Sort, null, 1); 
	}
}
?>

Avatar
benni91

Community Member, 72 Posts

3 February 2012 at 6:21am

BUMB ;)

Avatar
benni91

Community Member, 72 Posts

6 February 2012 at 2:44am

Hmm is it possible to get the latest Entry out of an DataObject with the Mysql Field "Created" ? If got absolutly no knowlege about sql but i think it should be possible?!

Perhapse this is one way?