3063 Posts in 864 Topics by 646 members
|
Page:
1
|
Go to End | |
| Author | Topic: | 2392 Views |
-
Passing an ID to a URL

3 March 2009 at 10:33am
I have an EventPage (page) and Event (dataobject). I want to be able to render the dataobject on a page by passing the id to the url. So for example: mysite.com/nu-events/evt/3 would be the 3rd event. I think I have everything setup correctly, but I'm getting the following error... Object::__call() Method 'getViewer' not found in class 'Event'
I have this function in EventPage
function evt() {
if($id = Director::urlParam('ID')) { // check to see we have been passed an ID
return DataObject::get_by_id("Event", $id);
}
}And I have a template named: EventPage_evt.ss following the ClassName_action format, but I can't get that template to show. I can get the dataobject to show if i use renderWith() ie...
function event() {
if($id = Director::urlParam('ID')) { // check to see we have been passed an ID
$evt = DataObject::get_by_id("Event", $id);
return $evt->renderWith('EventPage_evt');
}
}But that strips out the Page template stuff. How can I get SS to recognize the appropriate template. Thanks in advance for your help.
-
Re: Passing an ID to a URL

3 March 2009 at 10:53am
Got it to work with the help of UncleCheese, using this code
function evt() {
if($id = Director::urlParam('ID')) { // check to see we have been passed an ID
$evt = DataObject::get_by_id("Event", $id);
return $this->customise(array('Event' => $evt))->renderWith(array('EventPage', 'Page'));
}
}
Then using EventPage.ss as my template. Calling variables $Event.name. I hope this can help someone else -
Re: Passing an ID to a URL

7 January 2010 at 5:45am
Okay, i'm almost pulling my hair out. I get the most of Silverstripe ( i like to think) but i just can't figure this out.
I'm using modeladmin to manage my tv-series, Serie is a DataObject and Episode is a DataObject
I have a SeriePage.php and i have a SeriePage.ss, that works great. It shows al my Series with Covers and Discription, No problem there.I need to create a Link (function) to link to a (not really existing) Episodes page. (Template i guess).
Now i tried your solution but it just won't work.
-----------------------------------------------------------------------------------------------------------------------------
class SeriePage_Controller extends Page_Controller {
function GetEpisode() {
if($id = Director::urlParam('ID'))
$episode = DataObject::get_by_id("episode", $id);
return $this->customise(array('episode' => $episode))->renderWith(array('EpisodePage', 'Page'));
}
}
-------------------------------------------------------------------------------------------------------
Then in my SeriePage.ss i use the GetEpisode function as Link.-----------------------------------------------
<a href="$GetEpisode">-----------------------------------
I've made a EpisodePage template
------------------------------------------------------------------------
<link href="../../css/typography.css" rel="stylesheet" type="text/css" />
<div class="typography">
<ul>
<% control Episode %><li><a href="mms:\\\" class="left">$Episode.Title</a></li>
<% end_control %>
</ul>
</div>----------------------------------------------------------------------
Where do i go wrong ?????
-
Re: Passing an ID to a URL

7 January 2010 at 12:24pm
$GetEpisode is not a string, it is a DataObject. Thus, to get a link from it one would have to do $GetEpisode.Link
However, the link for the series page should be:
<% control Children %><!-- controlling the episodes of the series -->
...
<a href="{$Series.Link}/GetEpisode/$ID">..</a>
...
<% end_control %>
Then that link will then open a page that is rendered with the EpisodePage template.The template then needs to control 'episode' NOT 'Episode'.
NB: When fetching classes, the class name parameter is case sensitive
-
Re: Passing an ID to a URL

9 January 2010 at 5:56am
Pigeon (tx again ) the way you bring it, it must be so simple
But as i mentioned...I just don't get it
To be honest, i don't even really understand what i'm doing in my 'GetEpisode' function.
Now the solution seems to be that i have to control the children ( i understand that episodes are - in theory - children of a serie).
But i came across different solutions, like http://www.silverstripe.org/data-model-questions/show/257660#post257660 but then i still have nothing to put in my href...How is it possible that i just can't find a simple solution on how to create, in fact, just a dynamic page. I worked tru the Silverstripe book (where they seem to use it for the Jobs DataObject ), i spend days scrolling tru the forum. I think it has something to do with overloading the $Link, but i'm soooooo lost.
All i want;
I list my series which are DataObjects ( got that part )
When i click on a serie it needs to open a page with the Episodes (DataObject) belonging to that serie.------
<ul>
<li><a href= "Episodes belonging to Serie.Name">Serie.Name</a></li>
</ulI really believe that i'm the only one who can't figure this out...please have patiance with me.
-
Re: Passing an ID to a URL

10 January 2010 at 3:11am Last edited: 10 January 2010 4:10am
I think that posting my code would help.(?)
----------------------------------------------------------------------------------------------------------------------
class Serie extends DataObject {
static $db = array(
'Name' => 'Varchar',
'Server' => "Enum('Tcamts051,Tcamts052')",
'Folder' => "Enum('series 1,series 2, series3, series 4')",
'Omschrijving' => 'Text'
);
static $has_one = array (
'SerieCover' => 'Image',
'SeriePagina' => 'SeriePagina'
);
static $has_many = array(
'Episodes' => 'Episode'
);
static $searchable_fields = array ('Name');
static $singular_name = 'Serie';
static $plural_name = 'Series';
}
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
class Episode extends DataObject {static $db = array(
'Name' => 'Varchar',
'Season' => "Enum('Season 01,Season 02,Season 03,Season 04,Season 05,Season 06,Season 07,Season 08,Season 09,Season 10,Specials')"
);static $has_one = array(
'MySerie' => 'Serie'
);
}
-------------------------------------------------------------------------------------------------------------------------------------------------I manage those with Modeladmin
-------------------------------------------------------------------------------------------------------------------------------------------------
class SerieAdmin extends ModelAdmin {static $managed_models = array(
'Serie',
'Episode',
);
static $url_segment = 'series';
}
-------------------------------------------------------------------------------------------------------------------------------------------------Then for my SeriePage..
-------------------------------------------------------------------------------------------------------------------------------------------------
class SeriePagina extends Page {
static $db = array ();
static $has_many = array(
'Series' => 'Serie'
);
static $singular_name = 'Serie Pagina';
static $plural_name = 'Serie Paginas';
}class SeriePagina_Controller extends Page_Controller {
function GetEpisode() {
if($id = Director::urlParam('ID')) {
$afl = DataObject::get_by_id('Episode', $id);
return $this->customise(array('Episode' => $afl))->renderWith(array('EpisodePage', 'Page'));
}
}
}
-----------------------------------------------------------------------------------------------------------------------------And my Template for listing the Series
-----------------------------------------------------------------------------------------------------------------------------
<div class="typography"><% if Series %>
<% control Series %>
<table width="757" border="1" align="center">
<tr>
<td width="86"><a href="AND THIS IS THE PROBLEM">$Name</a></td>
<td width="522"> </td>
</tr>
<tr>
<td height="160">$SerieCover.Setwidth(85)</a></td>
<td>$Omschrijving</td>
</tr></table>
<% end_control %>
<% else %>
Geen Series
<% end_if %>
$Content
</div>
------------------------------------------------------------------------------------------------------------------------------------------
I did make a EpisodePage.ss
------------------------------------------------------------------------------------------------------------------------------------------
<link href="../../css/typography.css" rel="stylesheet" type="text/css" />
<div class="typography">
<h2>$Name</h2>
<% if Episode %>
<ul>
<% control Episode %>
<li><a href="mms:\\\$MySerie.Server\$MySerie.Folder\$MySerie.Name\$Season\{$Name}.wmv" class="left">$Name</a></li>
<% end_control %>
</ul>
<% else %>
No episodes yet
<% end_if %>
</div>
------------------------------------------------------------------------------------------------------------------------------------Btw Pigeon, i hope you don't mind but i asked Hamish to look at this also 'cause he handled the same kind of question a while ago.
-
Re: Passing an ID to a URL

10 January 2010 at 4:18am
Okay, i did get a little further...
Now i got it to render with my Episodepage.
I had to use <a href="Serie/GetEpisode/$ID"> in my SeriePage so now i get http:\\localhost\serie\GetEpisode\1 (for the first listed serie) and \2 for the second listed serie etc.
but now ;
when i click on serie 1 i get the episode with ID 1
when i click on serie 2 i get the episode with ID 2Somewhere in the function i need to compare the ID to the Episodes.MySerieID.
-
Re: Passing an ID to a URL

11 January 2010 at 6:38am
Okay...changed the '::get_by_id' into '::get' now at least it shows every episode. But it shows every episode no mather what serie i choose.
I tried to play around with the $this, but i'm missing something.
-----------------------------------------------------------------------------------------------------------
function GetEpisode() {
if($id = Director::urlParam('ID')) {
$afl = DataObject::get('Episode',$this->ID='MySerieID');
return $this->customise(array('Episode' => $afl))->renderWith(array('EpisodePage', 'Page'));
}
}-------------------------------------------------------------------------------------------------------------------
Any ideas?
| 2392 Views | ||
|
Page:
1
|
Go to Top |



