On Fri, Jan 21, 2011 at 9:05 AM, WhyNotSmile <sharongilmor...@gmail.com> wrote: > In my admin area, I would like to give the user the option to > 'Preview' the page they are creating or editing. I just can't quite > get my head around how to do it, so wondered if anyone can advise me. > > Ideally, here's what I'd like: the user is editing a page in the admin > area, and at any time can click a button which says 'Preview'. This > opens a new window which shows what the page would look like if the > current information was saved. The user can close the window, edit > the page some more, and preview it as much as they want. > > The issue is this: >> If I use a 'Preview' button, I can send the current data to the controller >> and show a page with that data. However, this doesn't let me open the page >> in a new window. I don't really want the user to have to use the back >> button, as that interrupts the flow of the process. >> If I use a Preview link, I can open a new window, but cannot send the data >> to the page for display. > > Has anyone done this before, and can you suggest how I might go about > it? Would I need to use javascript or ajax? I haven't used Ajax > before, although I'm happy enough with javascript.
I've done this. It was for an HTML newsletter (yuk!) and I included a preview button which did exactly this. I used JQuery and the form plugin to submit the form with AJAX. $('#newsletter_preview_btn').click(function(e) { showIndicator('body'); /* allow editor to update itself */ $.wymeditors(0).update(); $(this).parents('form').ajaxSubmit({ url: '/admin/newsletter/preview', error: function(XMLHttpRequest, textStatus, errorThrown) { alert(textStatus); }, success: function(responseText) { hideIndicator(); $('#newsletter_modal').jqmShow().find('#newsletter_modal_content').html(responseText); } }); e.preventDefault(); }); So, here, I was using WYMEditor for the markup and JQModal for the pop-up. Not what I'd use today but this was quite a while ago. public function admin_preview($id = null) { Configure::write('debug', 0); $this->layout = 'email/html/newsletter'; $this->viewPath = 'elements/email/html'; if (!empty($this->data)) { $this->Newsletter->save($this->data); $newsletter = $this->Newsletter->read(null, $id); } else if (isset($id)) { $newsletter = $this->Newsletter->read(null, $id); } else { return null; } $this->set( 'newsletter', $this->Newsletter->prepareForDelivery($newsletter) ); $this->render('newsletter'); } The prepareForDelivery() method just did a bunch of str_replace() to add inline CSS, etc. I really loathe HTML email. -- Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions. To unsubscribe from this group, send email to cake-php+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php