引导-如何保存SESSION中的崩溃状态


Bootstrap - How to save the state of collapse in a SESSION

我使用Bootstrap,我想将当前的崩溃状态(打开或关闭)保存在会话变量PHP中(而不是cookie中)。

你能给我:-将当前状态保存在会话变量PHP中的示例代码。-以及在页面加载时打开或不打开折叠(取决于存储在会话变量中的状态)的示例代码。

非常感谢

首先,您真的需要将其存储到会话中吗?某些PHP脚本可以使用该值吗?

两种情况:

您必须将折叠项目的状态存储在JavaScript变量中的某个位置:

var collapsed = false; // the default value
$('.collapse').on('hide.bs.collapse', function () {
    collapsed = true; // on hide, collapsed is true
})
$('.collapse').on('show.bs.collapse', function () {
    collapsed = false; // on show, collapsed is false
})

是,我需要将其存储到会话中:

在每次请求时,您必须添加折叠的变量并传递它,例如trhough GET方法:

$('a').on('mousedown', function() {
    var c = collapsed ? 1 : 0;
    var href = $(this).attr('href');
    if(href.indexOf('?') !== -1) {
        $(this).attr('href', href + '&collapsed=' + c);
    else {
        $(this).attr('href', href + '?collapsed=' + c);
    }
});

并以某种方式将其保存到会话

$_SESSION['collapsed'] = $_GET['collapsed'];

不,我不需要存储到会话中:

现在大多数现代浏览器都有localStorage变量,它类似于JavaScript中的会话。

保存到变量(例如在事件处理程序中):

if(typeof(Storage)!=="undefined")
{
    window.localStorage.setItem('collapsed', collapsed); // saves with no expiration
    code.sessionStorage.setItem('collapsed', collapsed); // saves until browser is closed
}
else
{
    // Sorry! No Storage support..
}

加载一些启动脚本:

if(typeof(Storage)!=="undefined")
{
    collapsed = window.localStorage.getItem('collapsed'); // again choose one
    collapsed = code.sessionStorage.getItem('collapsed');
    if(collapsed) {
        $('.collapse').collapse('show');
    } else {
        $('.collapse').collapse('hide');
    }
}
else
{
    // Sorry! No Storage support..
}

可能还有其他解决方案,但这些是我唯一能想到的。:)

所有代码都需要jQuery

我会在PHP方面做这样的事情。它允许存储和检索多个ID:s的状态。会话处理不包括在内;函数假定有一个活动会话正在进行。此外,函数是静态的,因为不需要实例化类。而且使用起来更简单。

class Collapse
{
    public static function set_state($id = null, $state = null)
    {
        if ($id === null || $state === null || !is_numeric($state)) {
            return false;
        } else {
            $state = ($state == 0 ? 0 : 1);
            $_SESSION['collapse_state'][$id] = $state;
        }
    }
    public static function state($id = null)
    {
        if ($id === null) {
            return false;
        } else {
            return $_SESSION['collapse_state'][$id];
        }
    }
}
// --- Sets the state for chosen ID.
Collapse::set_state('info', 0);
// --- Returns the state of the ID.
Collapse::state('info');

将此类与TomášTomík Blatný提出的JavaScript一起使用,您将能够保存您的状态。不过,我可能会使用POST而不是GET,以使URL看起来更好。这可以通过填充隐藏的表单字段或向只处理折叠状态的PHP脚本发送AJAX请求来实现。