Hi All

I've a question about how to delete a session variable when the user
navigates away from a page.

I use a session variable to persist an id that the user has selected
from a drop down list. This id is then used as find conditions in
subsequent operation.

It works like a dream; but when the user navigates away from this page
to another part of the application, and then comes back some time
later, the variable is still present and so I get the "special case"
behaviour instead of the default behaviour.

I could put a session->delete in every other controller; but that's
not very robust as I'm bound to forget when creating new controllers.
Does anyone know of a procedure for deleting session variables when
navigating away from a page?

Or maybe I should be using session variables for this at all.

Here's some code from my controller index method showing the session
variable being set or read:

function index() {

        $displaykpi = null;   // The specific kpi to display the
levels for

        //
        // If something was passed to this method then it must be a
request to
        // display a single KPI rather than the entire list
        //
        if (!empty($this->data))
        {
            $displaykpi = array('kpi_id' => $this->data['KpiLevels']
['kpi_id']);

            //
            // Store the KPI in the session and set up pagination to
only
            // display the KPI we've selected.
            //
            $this->Session->write('displaykpi', $displaykpi);
        }
        else
        {
            //
            // Check is something is set in the session
            //
            if ($this->Session->check('displaykpi'))
            {
                $displaykpi = $this->Session->read('displaykpi'); ##
We only want to do this if user hasn't been
 
##  somewhere else in the app.
            }

        }

        //
        // If we're working on a specific KPI only paginate that KPI
        // otherwise paginate all of them
        //
        if ($displaykpi)
        {
            $kpiLevels = $this->paginate($displaykpi);
        }
        else
        {
            $kpiLevels = $this->paginate();
        }
        //
        // Get all the KPI's so we can give the user the option to
choose just
        // one KPI to display
        //
        $allkpis = $this->KpiLevel->Kpi->find('list');

        $this->set('kpiLevels', compact('kpiLevels', 'allkpis'));

        }

Here's my index.ctp (part of) showing the form that's used to pass the
kpi_id back to index.ctp

<?php
    $javascript->codeBlock('function getKPI(f) {f.form.submit(); } ',
array('inline' => false));
?>
<div class="kpiLevels index">
<h2><?php __('KpiLevels');?></h2>
<div class="kpilevels form">
    <?php
        //
        // Create a form to allow the user to select which specific
KPI to display
        //
        $allkpis = $kpiLevels['allkpis'];
        echo $form->create('KpiLevels', array('action' => 'index'));
        echo $form->label('kpi_id', 'Select a KPI to display');
        echo $form->select('kpi_id', $kpiLevels['allkpis'], null, array
('onChange' => 'getKPI(this)'));
        echo $form->end();
    ?>
</div>

The rest of the index.ctp is box standard pagination code.

Hope someone can help

Regards

David
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" 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