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.

All other Modules

Discuss all other Modules here.

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

Random content display - Newbie


Go to End
Reply

9 Posts   3055 Views

Avatar
skywalkerdk

19 June 2009 at 3:11am Community Member, 3 Posts

Hi everyone,

This is my first, ever, post in these forums. (- So be gentle with me.) :o)

I've been trying to setup SilverStripe and have spent about 2 full days now Googling, reading forums and trial-and-erroring my way along. - I decided it was finally time to ask somebody who knews the answer to my question... :o)

The setup:
-------------

I'm using a basic SilverStripe installation with PixelGreen theme (including a righthand sidebar, that came with the theme).

I'm building a VERY basic site, that needs this function:

I need to the site to show a 'quote'. The quotes are plain-text comments basically something like this:
"This is quote number 1 - By number one", and
"This is quote number 2 - By number two", and
"This is quote number 3 - By number three" - You get the idea. :o)

- I need them to show up in random order, one at a time, in the righthandside-sidebar.
- Also, i need all of them listed on a single page.

What i've done / tried:
-----------------------------

I tried using the RandomContentWidget extention, which handles the quote-entries as child-pages. This works rather fine! - Thus, i can't get them displayed in the sidebar the single-page-display works great. I've read every written line in the readme, and Googled the problem thoroughly, still without a solution.

I have 10 years of experience in webdesign but i'm mint-new at SilverStripe, so if i may ask, please be very specific about details and files in your response. :o)

I think i need a very basic solution - either a work-around for the RandomContentWidget to also display in the sidebar, - or another easier solution entirely.

Looking forward to hopefully solving this issue..! :o)

Kind regards
// Thomas, Denmark

Avatar
UncleCheese

19 June 2009 at 3:13am 4085 Posts

public function RandomQuotes()
{
return DataObject::get("Quote",null,"RAND()");
}

<% control RandomQuotes %>

html..

<% end_control %>

Avatar
skywalkerdk

19 June 2009 at 3:25am Community Member, 3 Posts

Thank you for the swift reply! :o)

Where do i put the code? - Does the function and call go in the "sidebar.ss" or in another file?

What do i put in the HTML section between the two control-tags you wrote, what $variable stores the quotes content?

Will it automatically pull the page-childs of the same page that RandomContentWidget uses? OR
- Is it a database-query that makes a random pick? - if so, in which table to do i enter the data?

...I'm veeery new at this, please bear with me. ;o)

Cheers
// Thomas

Avatar
UncleCheese

19 June 2009 at 5:07am 4085 Posts

Have you created a Quote object yet? Where are you managing these Quotes?

Avatar
skywalkerdk

19 June 2009 at 5:14am Community Member, 3 Posts

The quotes (some 40 or so) are plain text pieces in a Word document right now, so i haven't created any object yet.

I just put a few of them into the RandomContentWidget to take it for a spin and see how it handled.

// Thomas

Avatar
UncleCheese

19 June 2009 at 7:01am 4085 Posts

You need to go through Tutorial #5 on DataObject management. Here's a quick example that will allow you to add Quotes to your HomePage, and have them pulled in anywhere on your site. You will need to install the DataObjectManager module.

mysite/code/Quote.php

<?php
class Quote extends DataObject
{
static $db = array (
'Author' => 'Varchar(100)',
'Quote' => 'Text'
);

static $has_one = array(
'HomePage' => 'HomePage'
);

}
?>

mysite/code/HomePage.php

class HomePage extends Page
{
static $has_many = array ('Quotes' => 'Quote');

public function getCMSFields()
{
$f = parent::getCMSFields();
$f->addFieldToTab("Root.Content.Quotes", new DataObjectManager(
$this,
'Quotes',
'Quote',
array('Author' => 'Author', 'Quote' => 'Quote'),
new FieldSet(
new TextField('Author'),
new TextareaField('Quote')
)
));
}
}

class HomePage_Controller extends Page_Controller
{
}

mysite/code/Page.php

// Add to the Page_Controller class:

public function RandomQuotes()
{
$limit = 3;
return DataObject::get("Quote",null,"RAND()",null,$limit);
}

mysite/templates/Layout/SomeTemplate.ss

<% if RandomQuotes %>
<dl>
<% control RandomQuotes %>
<dt>$Author</dt>
<dd>$Quote</dd>
<% end_control %>
</dl>
<% else %>
There are no quotes.
<% end_if %>

Can't promise you that's free of syntax errors cause i did it in like 90 seconds, but you get the idea.

Avatar
Rishi

3 March 2010 at 7:28am (Last edited: 21 March 2010 3:10am), Community Member, 97 Posts

Hello UC as usual your code is almost correct except one return statement.and yes thank for the code

mysite/code/Quote.php

<?php
class Quote extends DataObject
{
static $db = array (
'Author' => 'Varchar(100)',
'Quote' => 'Text'
);

static $has_one = array(
'HomePage' => 'HomePage'
);

}
?>

mysite/code/HomePage.php

class HomePage extends Page
{
static $has_many = array ('Quotes' => 'Quote');

public function getCMSFields()
{
$f = parent::getCMSFields();
$f->addFieldToTab("Root.Content.Quotes", new DataObjectManager(
$this,
'Quotes',
'Quote',
array('Author' => 'Author', 'Quote' => 'Quote'),
new FieldSet(
new TextField('Author'),
new TextareaField('Quote')
)
));
//ADDED LINE
return $f;
}
}

class HomePage_Controller extends Page_Controller
{
}

mysite/code/Page.php

// Add to the Page_Controller class:

public function RandomQuotes()
{
$limit = 3;
return DataObject::get("Quote",null,"RAND()",null,$limit);
}

mysite/templates/Layout/SomeTemplate.ss

<% if RandomQuotes %>
<dl>
<% control RandomQuotes %>
<dt>$Author</dt>
<dd>$Quote</dd>
<% end_control %>
</dl>
<% else %>
There are no quotes.
<% end_if %>

Note: make sure that DataObject module is installed

Avatar
becca

14 March 2010 at 11:10am Community Member, 5 Posts

This was great help! The only thing I was missing (that only took me a few minutes to figure out) was the DataObjectManager module.

Very easy!

Go to Top