Felix that was awesome. Thanks man!  Your code helps a ton.

-- Daniel

On Sep 20, 12:11 am, Felix Geisendörfer <[EMAIL PROTECTED]> wrote:
> DGPhoebus,
>
>    1. Use jQuery. If you love CakePHP and write your own JS (not using
>       the cake helpers) then this is the way to go, trust me ; ).
>    2. Echoing some text in a cake action w/o rendering a view is done
>       using: $this->autoRender = false; echo 'My text'; inside your
>       controller action
>    3. You may want to use "magic" numbers representing statuses. Neither
>       you nor the poor fellow who may have to make some adjustments 2
>       years down the road will remember them.
>    4. Here are some snippets showing how I would implement your problem:
>
> controller action (ShowSeatsController::reserve):
> --------------------------------------------------------------------------------
> function reserve($show_id = null, $seat_id = null) {
>     if ($this->RequestHandler->isPost()) {
>         return $this->set('success', $this->ShowSeat->reserve($show_id,
> $seat_id));
>     }
>     die('XSRF attacks suck ...');}
>
> --------------------------------------------------------------------------------
> model function (ShowSeat::reserve):
> --------------------------------------------------------------------------------
> function reserve($show_id = null, $seat_id = null) {
>     $this->Show->id = $show_id;
>     $this->Seat->id = $seat_id;
>     if (!$this->Show->exists() || !$this->Seat->exists()) {
>         return 'error';
>     }
>
>     $showSeat = compact('show_id', 'seat_id');
>     if ($this->hasAny($showSeat)) {
>        return 'taken';
>     }
>
>     $this->create($showSeat);
>     if (!$this->save()) {
>        return 'error'
>     }
>     return 'ok';}
>
> --------------------------------------------------------------------------------
> view (reserve.ctp):
> --------------------------------------------------------------------------------
> echo $javascript->object(compact('success'));
> --------------------------------------------------------------------------------
> jquery javascript (reserve.js):
> --------------------------------------------------------------------------------
> function reserveSeat(show_id, seat_id, callback) {
>     $.post('/show_seats/reserve/'+show_id+'/'+seat_id, {}, callback,
> 'json');
>
> }
>
> $(function() {
>     $('table#seats td').click(function() {
>        var data = $(this).attr('id').split('-');
>        reserveSeat(data[0], data[1], function(response) {
>              if (response.success == 'ok') {
>                 // ...
>              }
>        });
>     });
>
> });
>
> If you wonder why I got so detailed here is b/c I think your example is
> very nice for showing some of the strength of CakePHP in an easy to
> understand way, so I hope others will like the above snippets as well.
> (However, all of this was written off the cuff and not tested ^^).
>
> -- Felix
> --------------------------
> My Blog:http://www.thinkingphp.org
> My Business:http://www.fg-webdesign.de
>
> DGPhoebus wrote:
> > Okay here is the situation, I am working on a "Ticketing" website that
> > I have already created in the "old" method of making websites (not
> > CakePHP).  I am redoing it now using CakePHP and I love it.  Here is
> > my problem.  On the old site, I built out the layout of the theatre
> > using a table with each seat being represented by a td cell.  Each td
> > cell had an onclick event that called my own code that either
> > "reserved" or "released" the selected seat by an AJAX call.  My AJAX
> > call would return a value, '1','2', or '0' denoting "success",
> > "failure", or "arleady taken" to my javascript function.  I would then
> > move on based on that response:
>
> > var response = oXmlHttp.responseText;
> > switch (response.charAt(0)) {
> >    case '0':
> >                // Alert that seat was already taken
> >           break;
> >    case '1':
> >            // Success
> >            break;
> >    case '2':
> >            // Alert Error
> >            break;
> > }
>
> > I have re-written this code using Prototype and can make the call to
> > Controller/reserve . BUT.... 1. I have to create a useless "view" for
> > this controller action and 2. I can't return a value of either 1,2, or
> > 0.  If I echo any of those characters the response text contains the
> > entire "view" listing with "headers already sent" error.  If I try to
> > return any of those values it returns the entire view.
>
> > Is there a way to call a controller action without needing a view?  Is
> > there a way to return a value from the controller action like I need
> > 1,2, or 0?
>
> > There are many actions that need to happen based on which return value
> > I get from my AJAX call so it has to happen this way.  The AJAX helper
> > only appears to follow the form of SAVE then UPDATE and that is not
> > enough.
>
> > There has to be a way to do this without doing it the old way of
> > making a call to a single script sitting in the document root.    I am
> > still very new to Cake so if this could be solved by something like a
> > Component or something I would greatly appreciate some direction.
> > Redoing this site with Cake has been fantastic and I have rolled right
> > along up to this point, but I have stalled out.
>
> > Please help!
>
> > Daniel


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake 
PHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to