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

ImageDataObjectManager in SiteConfig


Go to End


1870 Views

Avatar
arnhoe

Community Member, 6 Posts

25 May 2012 at 11:56pm

Edited: 25/05/2012 11:56pm

Hello,

I have managed to get myself a many_many relationship in the siteconfig, my goal is that, the user is able to upload a image and select one or more items from the menu.

Now, I would like to filter in the CMS on a menu item, and then it will show the images this menu item has. But I am not sure if I created my pages in the way it should be. Is there anyone that would like to check my pages?

<?php
class BannerImages extends DataObject
{
	static $db = array('Title' => 'Text');

	static $has_one = array(
		'SiteConfig' => 'SiteConfig',
		'myImage' => 'BetterImage'
	);

	static $many_many = array('Images' => 'SiteTree');

	public function getCMSFields_forPopup()
	{
		$images = DataObject::get('SiteTree', 'ShowInMenus = 1');
		return new FieldSet(new TextField('Title'), new FileIFrameField('myImage'), new CheckboxSetField('Images', 'Images', $images));
	}

}

<?php

class CustomSiteConfig extends DataObjectDecorator
{

	function extraStatics()
	{
		return array('has_many' => array('Images' => 'BannerImages'));
	}

	public function updateCMSFields(FieldSet &$fields)
	{

		$manager = new ImageDataObjectManager($this -> owner, 'Images', 'BannerImages', 'myImage', array('Title' => 'Title'), 'getCMSFields_forPopup');

		$manager -> setParentClass("SiteConfig");
		$manager -> setPluralTitle('Images');
		$manager -> setRelationAutoSetting(false);
		$manager -> setFilter('ID', // Name of field to filter
		'Filter by Page', // Label for filter
		Dataobject::get("SiteTree") -> toDropdownMap("ID", "Title") // Map for filter (could be $dataObject->toDropdownMap(), e.g.)
		);

		$fields -> addFieldToTab("Root.Images", $manager);

	}

}

And I am calling my code in the following way, I am really certain that this isnt the right way, but I tried DataObject::get, but I cannot call the CurrentPageID to equal with the SiteTreeID.

public function BannerImages()
	{
		// build a new sql query
		$sqlQuery = new SQLQuery();
		$sqlQuery -> select = array('a.SiteTreeID AS sitetreeid, a.BannerImagesID as bannerimagesid, b.myImageID as Image, c.Filename as ImageURL');
		$sqlQuery -> from = array("`bannerimages_images` a LEFT JOIN `bannerimages` b on a.BannerImagesID = b.ID LEFT JOIN `file` c on b.myImageID = c.ID");
		$sqlQuery -> where = array("SiteTreeID = " . $this -> ID . "");
		$sqlQuery -> distinct = true;
		$sqlQuery -> orderby = "RAND()";
		$sqlQuery -> limit = "1";

		$rawSQL = $sqlQuery -> sql();
		$result = $sqlQuery -> execute();

		// create a new data object set
		$myDataObjectSet = new DataObjectSet();

		// push our result into the data object set
		foreach ($result as $row) {
			$myDataObjectSet -> push(new ArrayData($row));
		}

		return $myDataObjectSet;

	}

I hope you guys can help me, so I will be able to help any other people in the future with this matter.