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.

We've moved the forum!

Please use forum.silverstripe.org for any new questions (announcement).
The forum archive will stick around, but will be read only.

You can also use our Slack channel or StackOverflow to ask for help.
Check out our community overview for more options to contribute.

General Questions /

General questions about getting started with SilverStripe that don't fit in any of the categories above.

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

Diplay DataObject in a popup via ajax?


Go to End


6 Posts   3306 Views

Avatar
micahsheets

Community Member, 165 Posts

10 July 2009 at 5:12am

I have a DataObject that contains some HTMLText and possibly a link to a file for download. When a front end user clicks a link I want a popup to show up and display the DataObject via an ss template. I am not sure how to go about this.

I do know how to make jQuery send an ajax request to a helper Controller that gets the DataObject that the user clicked on. However I don't know how to write the code that will render the DataObject with a template and send the link back to the client computer so that it can open a lightbox or similar with the url of the rendered data. I am not using a PageType for the DataObject.

Avatar
Wolfbane

Community Member, 5 Posts

10 July 2009 at 2:06pm

I'm trying to do the exact same thing and I am equally as confused.. :(

Avatar
dacar

Community Member, 173 Posts

1 September 2009 at 11:09pm

i am looking for some advice, too. How do implement an template.ss which does not interherit from page but from dataobject class?

Does anybody know a good tutorial?

Avatar
zenmonkey

Community Member, 545 Posts

2 September 2009 at 6:14am

This may Help http://doc.silverstripe.org/doku.php?id=recipes:ajax_basics

Essentially you have to tell the object if its called with AJAX to render the data with differently.

There's a lot of good stuff in the Recipes section, but the Link to them isn't as obvious as it should be
http://doc.silverstripe.org/doku.php?id=recipes:start

Also check ssbit.com, it has some really well written tutorials explaining stuff better than some of the documentation

Avatar
dacar

Community Member, 173 Posts

3 September 2009 at 12:26am

Hi Zenmonkey,

thanks for your reply. I went through the ajax_basics and everything is working fine. But i am not sure where to go from here? I have got ajaxSnippet.ss Template that will be loaded into a <div> in page.ss. But what i need is to open the thickbox and load the ajaxSnippet.ss into the thickbox.

Link to open thickbox:
<a href="/silverstripe/ajax.php?refid=$ID&#38;height=381&#38;width=613" class="thickbox" title="$Headline">

Link to load asynchronisly content into <div>:
<a href="$URLSegment" onclick="jQuery('#ajaxContent').load('$URLSegment/showImage'); return false;" >

Can anybody help?

Greetings, Carsten.

Avatar
zenmonkey

Community Member, 545 Posts

3 September 2009 at 1:52am

Edited: 03/09/2009 1:53am

I've never used Thickbox. I usually go with FaceBox or ColorBox. But you should just be able to structure your Thick box URL something like:

<a href="$Link?height=220&width=400" class="thickbox" title="$Headline">$Title</a>  

But I'm not sure how the wrapping controls are structured. You're using $URLSegment which returns the Current Page Segment (ie everything after '/silverstripe/' which isn't the full link. You should be forming the link to point to the Dataobject as if it were a page. Silverstripe will see that the call is an AJAX call and render it accordingly. The only problem I can see is Silverstripe may not like the URL Parameters, so another Model Box Plug-in may be more useful.

At least thats where I'd start. Right now I'm just using modal boxes to hold login and review forms. I use jQuery to hide the div's, that way if the user has Javascript disabled they can still access the content. I find the solution is simpler. I tend to avoid Ajax calls for SEO reasons, and better degradation.