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.

DataObjectManager Module

Discuss the DataObjectManager module, and the related ImageGallery module.

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

ImageDataObjectManager in SiteConfig


Reply

808 Views

Avatar
arnhoe

25 May 2012 at 11:56pm (Last edited: 25 May 2012 11:56pm), Community Member, 6 Posts

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.