【问题标题】:How can I use html5 cache manifest with CakePHP?如何在 CakePHP 中使用 html5 缓存清单?
【发布时间】:2012-03-28 10:10:45
【问题描述】:

我想在 CakePHP 中使用 html5 缓存清单技术, 但我不知道在 CakePHP 中将缓存清单放在哪里, 我已经寻找解决方案,但我没有找到任何东西。 你能帮帮我吗?

【问题讨论】:

    标签: html cakephp cakephp-1.3 cache-manifest


    【解决方案1】:

    在所有视图中访问一个清单文件的最佳和最简单的方法是查看您的布局,例如

    View/Layouts/default.ctp
    

    并将<html>替换为

    <?php echo "<html manifest='".$this->webroot."manifest.php'>"; ?>
    

    manifest.php所在的位置

    app/webroot/manifest.php
    

    看起来像这样:

    <?php
        header('Content-Type: text/cache-manifest');
        echo "CACHE MANIFEST\n";
        echo "\n\nNETWORK:\n";
        echo "*\n";
    
        echo "\n\nCACHE:\n"; 
    
        echo "# Version: 1\n";
    ?>
    

    所以manifest.php只需要一次,所有视图都可以使用。

    提示:
    对于动态清单文件,您可以使用此处的代码 sn-p:
    http://nial.me/2010/01/using-the-html5-cache-manifest-with-dynamic-files/

    【讨论】:

      【解决方案2】:

      我尝试了这个解决方案,将清单放在 default.ctp 中,但它会导致一些问题,我所有的页面都被缓存了......我认为它在the spec 中有描述“......引用清单的页面是自动的即使没有明确提及,也会被缓存”。

      ...因为我所有的页面都被缓存了,在每个页面中都检查了清单。当其他用户登录时,他们会看到最后一个用户主页和其他页面。

      最终解决方案:创建重定向/加载页面

      1 - 创建重定向页面: 我在 Pages 控制器中创建了 Pages/redirect.ctp 文件和函数 redirect(){}。一个简单的页面,只有一个 hello 消息和一个基于 applicationCache 进度事件的加载栏:

      var appCache = window.applicationCache;
      appCache.addEventListener('progress', function(event) { console.log(event.loaded + " of " + event.total + " files..."); //对页面的加载栏进行一些更改 },假);

      2 - 仅在重定向页面中加载清单: 在 View/Layouts/default.ctp 我过滤了标签以仅在重定向页面中显示清单:

      if($this->request->params['controller']=='pages' &&
      $this->request->params['action']=='redirect'): ?>



      万一; ?>

      3 - 使用 auth 组件中的重定向页面来引导我的用户
      登录后重定向页面:
      在 appController 中设置了这样的身份验证组件

      公共 $components = 数组 (
      '会话',
      'Auth' => 数组 (
      'authError' => "用户或密码无效",
      'unauthorizedRedirect' => "/pages/redirect?err=login",
      'loginRedirect' => "/pages/redirect",
      'logoutRedirect' => "/",
      'loginAction' => "/user/login",
      '授权' => 数组('控制器')
      )
      );

      现在只有放在清单中的元素会被缓存。重定向页面被缓存(根据规范),但 applicationCache 事件更新页面撕裂这个“动态”。

      【讨论】:

        【解决方案3】:

        如果你的意思是清单文件应该进入 /app/webroot,你的虚拟主机也应该用于站点的目录。除此之外,与 CakePHP 没有任何关系。

        看看这个:http://www.html5rocks.com/en/tutorials/appcache/beginner/

        【讨论】:

        • 好的,我知道什么是应用程序缓存。我试图找到的是如何在 CakePHP 应用程序上使用清单文件 foreach 视图。但是如果我必须把它放到 /app/webroot 中,它就是一个适用于所有 CakePHP 应用程序的清单文件。
        • 阅读我提供的链接。缓存文件没有限制。当 Cake 生成页面时,它总是会渲染一个带有 html 标签的布局文件,除非它不是您渲染的 html 视图/布局。只需在那里设置一个默认清单文件,例如 if (!isset($cacheManifist)) { echo 'default.mf'; } 其他 { 回声 $cacheManifest;从任何视图文件中设置 var。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-20
        • 2010-12-05
        • 2012-10-23
        • 1970-01-01
        • 2010-09-21
        • 2011-01-04
        • 2016-07-04
        相关资源
        最近更新 更多