【问题标题】:Bootstrap - How to save the state of collapse in a SESSIONBootstrap - 如何在会话中保存崩溃状态
【发布时间】:2014-06-09 11:07:02
【问题描述】:

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

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

非常感谢

【问题讨论】:

    标签: php twitter-bootstrap-3 session-variables collapse


    【解决方案1】:

    首先,你真的需要将它存储到会话中吗?某些 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
    })
    

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

    在每个请求中,您必须添加折叠变量并通过例如 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 中的 session。

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

    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

    【讨论】:

      【解决方案2】:

      我会在 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:s 看起来更好一些。这可以通过填充隐藏的表单字段或向仅处理折叠状态的 PHP 脚本发送 AJAX 请求来完成。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-20
        • 2013-12-31
        • 1970-01-01
        • 2012-03-08
        • 2013-08-26
        • 1970-01-01
        • 2017-12-12
        • 2012-02-23
        相关资源
        最近更新 更多