【发布时间】:2012-03-28 10:10:45
【问题描述】:
我想在 CakePHP 中使用 html5 缓存清单技术, 但我不知道在 CakePHP 中将缓存清单放在哪里, 我已经寻找解决方案,但我没有找到任何东西。 你能帮帮我吗?
【问题讨论】:
标签: html cakephp cakephp-1.3 cache-manifest
我想在 CakePHP 中使用 html5 缓存清单技术, 但我不知道在 CakePHP 中将缓存清单放在哪里, 我已经寻找解决方案,但我没有找到任何东西。 你能帮帮我吗?
【问题讨论】:
标签: html cakephp cakephp-1.3 cache-manifest
在所有视图中访问一个清单文件的最佳和最简单的方法是查看您的布局,例如
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/
【讨论】:
我尝试了这个解决方案,将清单放在 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 事件更新页面撕裂这个“动态”。
【讨论】:
如果你的意思是清单文件应该进入 /app/webroot,你的虚拟主机也应该用于站点的目录。除此之外,与 CakePHP 没有任何关系。
看看这个:http://www.html5rocks.com/en/tutorials/appcache/beginner/
【讨论】: