7913 Posts in 1355 Topics by 930 members
DataObjectManager Module
SilverStripe Forums » DataObjectManager Module » latest dataobject to appear on home page
Discuss the DataObjectManager module, and the related ImageGallery module.
Moderators: martimiz, UncleCheese, Howard, Sean, Ryan M., biapar, Willr, Ingo, swaiba, simon_w
| Go to End | Next > | |
| Author | Topic: | 1897 Views |
-
latest dataobject to appear on home page

29 May 2010 at 10:05am Last edited: 29 May 2010 10:06am
Hi Guys
I am missing something really basic here, just can not see it
I have created a showcaseholder ,using dataObjectManager and this works perfectly.(1st time using this)I am now trying to pull the latest image onto the home page and keep getting the error message "Line 21 in /home/stagton/public_html/mysite/code/HomePage.php"
this is line 21 of HomePage.php
return ($latestportfolio) ? DataObject::get("Portfolio", "ParentID = {$portfolio->ID}", "", "", $num) : false;
If you can debug this for me it would be great
thanks
Craighere is my code
ShowcaseHolder.php
<?php
/**
* Defines the
*/
class ShowcaseHolder extends Page {
static $has_many = array (
'Portfolios' => 'Portfolio'
);public function getCMSFields()
{
$f = parent::getCMSFields();
$manager = new ImageDataObjectManager(
$this, // Controller
'Portfolios', // Source name
'Portfolio', // Source class
'PortfolioPhoto', // File name on DataObject
array(
'BusinessName' => 'Business Name',
'DomainName' => 'Domain Name'
), // Headings
'getCMSFields_forPopup' // Detail fields (function name or FieldSet object)
// Filter clause
// Sort clause
// Join clause
);
$manager->setAddTitle("Image");
$f->addFieldToTab("Root.Content.Portfolio",$manager);
return $f;
}}
class ShowcaseHolder_Controller extends Page_Controller {
public function init() {
parent::init();
Requirements::themedCSS("lightbox");
Requirements::javascript("mysite/javascript/jquery.lightbox-0.5.js");
Requirements::javascript("mysite/javascript/custom.litebox.js");
}}
?>
portfolio.php
<?phpclass Portfolio extends DataObject{
static $db = array(
'BusinessName' => 'Text',
'DomainName' => 'Text'
);
static $has_one = array(
'PortfolioPhoto' => 'Image',
'ShowcaseHolder' => 'ShowcaseHolder',);
public function getCMSFields_forPopup()
{
return new FieldSet(
new TextField('BusinessName','Business Name'),
new TextField('DomainName','Domain Name')
);
}
}?>
?php
/**
* Defines the ArticlePage page type
*/
class HomePage extends Page {
static $db = array();
static $allowed_children = array('SliderPage');
}class HomePage_Controller extends Page_Controller {
function ShowPortfolio ($num=1){
$latestportfolio = DataObject::get("Portfolio");
return ($latestportfolio) ? DataObject::get("Portfolio", "ParentID = {$portfolio->ID}", "", "", $num) : false;}
public function init(){
parent::init();
Requirements::themedCSS("slider");Requirements::javascript("mysite/javascript/jquery.cycle.all.2.74.js");
Requirements::javascript("mysite/javascript/slider.js");}
}
?> -
Re: latest dataobject to appear on home page

29 May 2010 at 10:20am
DataObject::get() will return a DataObjectSet. You just want a single record.
$latestportfolio = DataObject::get_one("Portfolio");
-
Re: latest dataobject to appear on home page

29 May 2010 at 11:11am
Hi
Thanks, made the change, ran dev build, flush=1, still getting the same error
using version 2.4
Craig
code from homepage.php
19 function ShowPortfolio ($num=1){
20 $latestportfolio = DataObject::get("Portfolio");
21 return ($latestportfolio) ? DataObject::get("Portfolio", "ParentID = {$portfolio->ID}", "", "", $num) : false;Error message Line 21 in /home/stagton/public_html/mysite/code/HomePage.php
-
Re: latest dataobject to appear on home page

29 May 2010 at 11:28am
Hi,
What's the exact error message? And you don't seem to have followed UncleCheese's advice of using a get_one.
-
Re: latest dataobject to appear on home page

29 May 2010 at 11:33am
Sorry I pasted the incorrect code, this is what I have in homepage.php
function ShowPortfolio ($num=1){
$latestportfolio = DataObject::get_one("Portfolio");
return ($latestportfolio) ? DataObject::get_one("Portfolio", "ParentID = $portfolio->ID", "", "") : false;}
the error message is[Notice] Undefined variable: portfolio
GET /?flush=1Line 21 in /home/stagton/public_html/mysite/code/HomePage.php
And I am new to this so If you could spell out exactly what I could change I would appreciate this
thanks
Craig -
Re: latest dataobject to appear on home page

29 May 2010 at 11:52am
Change $portfolio->ID to $this->ID and see where that gets you...
-
Re: latest dataobject to appear on home page

29 May 2010 at 12:08pm
code changed to
function ShowPortfolio ($num=1){
$latestportfolio = DataObject::get_one("Portfolio");
return ($latestportfolio) ? DataObject::get_one("Portfolio", "ParentID = $this->ID", "", "") : false;}
new error
[User Error] Couldn't run query: SELECT "Portfolio"."ClassName", "Portfolio"."Created", "Portfolio"."LastEdited", "Portfolio"."BusinessName", "Portfolio"."DomainName", "Portfolio"."SortOrder", "Portfolio"."PortfolioPhotoID", "Portfolio"."ShowcaseHolderID", "Portfolio"."ID", CASE WHEN "Portfolio"."ClassName" IS NOT NULL THEN "Portfolio"."ClassName" ELSE 'Portfolio' END AS "RecordClassName" FROM "Portfolio" WHERE (ParentID = 100) ORDER BY SortOrder ASC LIMIT 1 Unknown column 'ParentID' in 'where clause'
-
Re: latest dataobject to appear on home page

29 May 2010 at 12:29pm
$latestportfolio = DataObject::get_one("Portfolio");
return ($latestportfolio) ? DataObject::get_one("Portfolio", "ParentID = $this->ID", "", "") : false;The code makes pretty much no sense. Your getting a random portfolio to check if you should return a portfolio. I think what you want to do is get your showcaseholder first then get one portfolio from that...
function ShowPortfolio ($num=1){
$latestportfolio = DataObject::get_one("ShowcaseHolder");
return ($latestportfolio) ? DataObject::get("Portfolio", "ShowcaseHolderID = '$latestportfolio->ID'", "", "", $num) : false;Or if you only have 1 showcase holder then getting that first is pointless - if you only have 1 portfolio section you can reduce that function down to
function ShowPortfolio ($num=1){
return DataObject::get('Portfolio', '','','',$num);
}
| 1897 Views | ||
| Go to Top | Next > |


