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.

Template Questions

Control loop of Data Object not working


Reply

2 Posts   1527 Views

Avatar
J4m3s

24 May 2011 at 1:57pm (Last edited: 24 May 2011 1:58pm), Community Member, 2 Posts

Hi

I have set up a data object of testimonials that I want to display on the homepage of my site.

I've set it up so I add my testimonials on a testimonials tab when editing the homepage. It all seems to work fine, but I am having trouble displaying them through a control loop.

Quote.php

<?php
/**
* Defines the Quote data object
*/
class Quote extends DataObject {

   static $db = array (
      'Quote' => 'Text',
      'Company' => 'Varchar(255)',
      'Name' => 'Varchar(255)'
   );
   
   function getCMSFields_forPopup() {
      $fields = new FieldSet();
      
      $fields->push( new TextField( 'Quote' ) );
      $fields->push( new TextField( 'Company' ) );
      $fields->push( new TextField( 'Name' ) );
      
      return $fields;
      
   }
   
static $has_one = array (
      'HomePage' => 'HomePage'
   );         

}

Homepage.php

<?php
/**
* Defines the HomePage page type
*/

class HomePage extends Page {

static $db = array(
'H1Heading' => 'Text',
      'BannerHeading' => 'Text',
      'BannerTxt' => 'HTMLText'
       );

static $has_one = array(
);

static $has_many = array (
      'Quotes' => 'Quote'
   );

public function getCMSFields() {
$fields = parent::getCMSFields();

$fields->addFieldsToTab('Root.Content.Main', new TextField('H1Heading', 'H1 Heading'), 'Content');
      $fields->addFieldsToTab('Root.Content.Main', new TextField('BannerHeading', 'Banner Heading'), 'Content');
      $fields->addFieldsToTab('Root.Content.Main', new HtmlEditorField("BannerTxt","Banner Text"), 'Content');
      
      $tablefield = new HasManyComplexTableField(
         $this,
         'Quotes',
         'Quote',
         array(
            'Quote' => 'Quote','Company'=>'Company','Name' => 'Name'
            ),
         'getCMSFields_forPopup'
         );
         
         $tablefield->setAddTitle( 'A Testimonial' );
         
         $fields->addFieldToTab( 'Root.Content.Quotes', $tablefield );
      
return $fields;
}

}

class HomePage_Controller extends Page_Controller {

}

HomePage.ss Control Loop

<% if Quotes %>
   <% control Quotes %>
   <div class="testimonials">
<p><span class="quoteStart">&#8220;</span>$Quote<span class="quoteEnd">&#8221;</span></p>
<div class="quoteSource"><p>$Name<strong>$Company</strong></p></div>
</div>
   <% end_control %>
<% else %>
No Quotes
<% end_if %>

I'm new to Silverstripe and think I have got everything correct. If anyone could let me know what I might have wrong, that would be great.

Thanks in advance
James

Avatar
swaiba

24 May 2011 at 8:32pm Forum Moderator, 1796 Posts

As always the exact "trouble" would be handy to know, I'll assume "No Quotes" is showing...

Firstly, read this for the debugging stuff (if you have not already), http://www.silverstripe.org/general-questions/show/16055

Secondly I would create a new controller function like this to test things are generally working...

function MyQuotes() {
return DataObject::get('Quote');
}

Then I'd try...

function MyQuotes() {
return DataObject::get('Quote','HomePageID='.$this->ID);
}


or

function MyQuotes() {
return $this->Quote;
}

I'd use Debug::show to check each of the functions is being called and returning the right values...