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

Using DataObjectManager inside a DataObject Decorator


Reply

5 Posts   1906 Views

Avatar
dospuntocero

4 December 2009 at 3:15am Community Member, 54 Posts

Hi guys i was wondering why i can't use DataObjectManager inside a DataObjectDecorator... or why ComplexTableField works and DOM throws errors my code is fairly simple i think

I'm using decorators for my HomePage class so I can control stuff that are in all pages using in templates <% control Page(home) %> stuff.

in my _config:    DataObject::add_extension('HomePage', 'LogoDecorator');

<?php

class LogoDecorator extends DataObjectDecorator{

   function extraStatics() {
      return array(
         'has_many' => array(
            'Logos' => 'Logo',
         ),
      );
   }

   public function updateCMSFields(FieldSet &$fields) {
      $Banners = new ComplexTableField(
            $this,
            'Logos',
            'Logo',
            array(
               'TextoAlternativo' =>'TextoAlternativo',
               'Link' =>'Link'
            ),
            'getCMSFields_forPopup'
      );
      $Banners->setParentClass('HomePage');   
      $fields->addFieldToTab( 'Root.Content.Logos', $Banners );      
   }   
}

and my logo class:

<?php

class Logo extends DataObject {

   static $db = array (
      'TextoAlternativo' => 'Varchar(140)',
      'Link' => 'Varchar(255)'
   );
   
   static $has_one = array (
      'HomePage' => 'HomePage',
      'Logo' => 'Image'
   );      
   public function getCMSFields_forPopup()
   {
      return new FieldSet(
         new TextareaField('TextoAlternativo', 'Texto Alternativo (para google) - máximo 140 caracteres'),
         new TextField("Link", "URL de la página de logo (sin http://)"),
         new ImageField('Logo', 'Agregar imagen para el banner')
      );
   }   
}

when i use DOM instead of ComplexTableField, the code just stop working... any clues?

thanks for all guys!

Avatar
UncleCheese

4 December 2009 at 3:45am 4085 Posts

What does "stops working" mean? It's hard to troubleshoot something if you're not explaining the result.

Avatar
dospuntocero

4 December 2009 at 3:56am Community Member, 54 Posts

well the error is a little bit large...

La página en http://sta dice:ERROR [Notice]: Undefined property: LogoDecorator::$ID
IN POST /admin/getitem?ID=5&ajax=1
Line 211 in /Users/francisco/Sites/stachile/dataobject_manager/code/DataObjectManager.php

Source
======
202:       $sort     = isset($params['sort'])? $params['sort']        :    $this->sort;
203:       $sort_dir = isset($params['sort_dir'])? $params['sort_dir'] :    $this->sort_dir;
204:       $filter = isset($params['filter'])? $params['filter']     :    $this->filter;
205:       $search = isset($params['search'])? $params['search']     :    $this->search;
206:       return
"ctf[{$this->Name()}][start]={$start}&ctf[{$this->Name()}][per_page]={$per_page}&ctf[{$this->Name()}][showall]={$show_all}&ctf[{$this->Name()}][sort]={$sort}&ctf[{$this->Name()}][sort_dir]={$sort_dir}&ctf[{$this->Name()}][search]={$search}&ctf[{$this->Name()}][filter]={$filter}";
207:    }
208:    
209:    function FieldHolder()
210:    {
* 211:       if(!$this->controller->ID && $this->isNested)
212:          return $this->renderWith('DataObjectManager_holder');
213:       return parent::FieldHolder();
214:    }
215:
216:    
217:    public function Headings()

<ul>DataObjectManager->FieldHolder()

call_user_func_array(Array,Array)
line 408 of ViewableData.php

ViewableData->XML_val(FieldHolder,,1)
line 74 of .cache.Users.francisco.Sites.stachile.sapphire.templates.TabSetFieldHolder.ss

include(/private/var/tmp/silverstripe-cache-Users-francisco-Sites-stachile/.cache.Users.francisco.Sites.stachile.sapphire.templates.TabSetFieldHolder.ss)
line 354 of SSViewer.php

SSViewer->process(TabSet)
line 773 of ViewableData.php

ViewableData->renderWith(TabSetFieldHolder)
line 62 of TabSet.php

TabSet->FieldHolder()

call_user_func_array(Array,Array)
line 408 of ViewableData.php

ViewableData->XML_val(FieldHolder,,1)
line 59 of .cache.Users.francisco.Sites.stachile.sapphire.templates.TabSetFieldHolder.ss

include(/private/var/tmp/silverstripe-cache-Users-francisco-Sites-stachile/.cache.Users.francisco.Sites.stachile.sapphire.templates.TabSetFieldHolder.ss)
line 354 of SSViewer.php

SSViewer->process(TabSet)
line 773 of ViewableData.php

ViewableData->renderWith(TabSetFieldHolder)
line 62 of TabSet.php

TabSet->FieldHolder()

call_user_func_array(Array,Array)
line 408 of ViewableData.php

ViewableData->XML_val(FieldHolder,,1)
line 70 of .cache.Users.francisco.Sites.stachile.sapphire.templates.Includes.Form.ss

include(/private/var/tmp/silverstripe-cache-Users-francisco-Sites-stachile/.cache.Users.francisco.Sites.stachile.sapphire.templates.Includes.Form.ss)
line 354 of SSViewer.php

SSViewer->process(Form)
line 773 of ViewableData.php

ViewableData->renderWith(Array)
line 982 of Form.php

Form->forTemplate()
line 1005 of Form.php

Form->formHtmlContent()
line 381 of LeftAndMain.php

LeftAndMain->getitem(HTTPRequest)
line 162 of Controller.php

Controller->handleAction(HTTPRequest)
line 129 of RequestHandler.php

RequestHandler->handleRequest(HTTPRequest)
line 122 of Controller.php

Controller->handleRequest(HTTPRequest)
line 277 of Director.php

Director::handleRequest(HTTPRequest,Session)
line 121 of Director.php

Director::direct(/admin/getitem)
line 118 of main.php

</ul>

Avatar
UncleCheese

4 December 2009 at 4:20am 4085 Posts

You're passing $this as the controller, which is the decorator. The controller you want is $this->owner.

Avatar
dospuntocero

4 December 2009 at 4:31am Community Member, 54 Posts

woohooo!!

thanks UncleCheese!! :D now is working perfectly

:D:D:D