10446 Posts in 2223 Topics by 1719 members
| Go to End | Next > | |
| Author | Topic: | 2591 Views |
-
Random content display - Newbie

19 June 2009 at 3:11am
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 -
Re: Random content display - Newbie

19 June 2009 at 3:13am
public function RandomQuotes()
{
return DataObject::get("Quote",null,"RAND()");
}<% control RandomQuotes %>
html..
<% end_control %>
-
Re: Random content display - Newbie

19 June 2009 at 3:25am
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 -
Re: Random content display - Newbie

19 June 2009 at 5:07am
Have you created a Quote object yet? Where are you managing these Quotes?
-
Re: Random content display - Newbie

19 June 2009 at 5:14am
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
-
Re: Random content display - Newbie

19 June 2009 at 7:01am
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.
-
Re: Random content display - Newbie

3 March 2010 at 7:28am Last edited: 21 March 2010 3:10am
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
-
Re: Random content display - Newbie

14 March 2010 at 11:10am
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!
| 2591 Views | ||
| Go to Top | Next > |



