Session Drupal 7忽略模板中的$\会话
我正在Drupal7中的自定义主题中编写一个简单的脚本,该脚本应该在用户每次加载页面时通过不同的背景图像进行旋转。这是我在Session Drupal 7忽略模板中的$\会话,session,drupal,drupal-7,Session,Drupal,Drupal 7,我正在Drupal7中的自定义主题中编写一个简单的脚本,该脚本应该在用户每次加载页面时通过不同的背景图像进行旋转。这是我在[view].tpl.php中的代码,用于选择要使用的图像 $img_index = (!isset($_SESSION["img_index"]) || is_null($_SESSION["img_index"])) ? 1 : $_SESSION["img_index"] + 1; if ($img_index > 2) { $img_index = 0; }
[view].tpl.php
中的代码,用于选择要使用的图像
$img_index = (!isset($_SESSION["img_index"]) || is_null($_SESSION["img_index"])) ? 1 : $_SESSION["img_index"] + 1;
if ($img_index > 2) {
$img_index = 0;
}
$_SESSION["img_index"] = $img_index;
非常简单的东西,只要Drupal启动一个会话,它就可以正常工作。但是,如果我删除会话cookie,然后始终显示相同的图像,则会话将永远不会启动
我假设,由于此代码位于视图文件中,视图代码正在为匿名用户进行缓存,因此会话从未启动,但我不知道如何以其他方式执行我想要的操作 @hobberwickey,我建议创建一个自定义模块并在模块中实现。根据drupal引导过程,会话层每次都会在缓存层之后调用。hook_boot可以在缓存页中调用,也可以在引导过程之前调用。您可以获取更多信息。不要像Reddit上提到的那样干扰会话。这将影响性能 我过去也曾做过类似的事情,采用了/u/maiznieks提到的方法。是这样的
- 通过
Drupal.settings上的JS返回数组中的所有URL。
- 检查是否设置了cookie。
- 如果不是,则将其设置并将其值设置为0
- 如果已设置,则获取值,将值增加1,然后将其保存到cookie
- 有了这个值,现在就有了索引李>
- 检查是否存在
图像[索引]
- 如果有,则向用户显示
- 如果没有,则将索引重置为0并显示该值。将0保存到cookie
如果愿意,您可以用HTML5本地存储替换上面的cookie 你最终想要实现什么?