我正在使用Drupal 7中自定义主题的一个简单脚本,该脚本应该在用户每次加载页面时仅在不同的背景图像中旋转。这是我在[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,则始终显示相同的图像,则会话永远不会启动。
我假设由于此代码位于视图文件中,因此该视图代码正在缓存给匿名用户,因此该会话永远不会启动,但是我无法弄清楚该如何做我想做的事情。
答案 0 :(得分:1)
不要搞乱Reddit上提到的/u/maiznieks之类的会话。它会影响性能。
过去,我不得不做类似的事情,并且采用了/ u / maiznieks提到的方法。就是这样
Drupal.settings.
上的JS返回数组中的所有URL image[index]
index
为0并显示。将0保存到cookie。您继续缓存。您会在每次页面加载时继续向用户显示新图像。
您可以将当前视图设置为每5分钟进行一次随机排序。然后,您只需要更新上述逻辑即可替换该映像。这样,您可以使没有JS的用户也可以使用类似的功能,而其余功能仍保留此功能。
如果愿意,您可以将以上Cookie替换为HTML5本地存储。
答案 1 :(得分:0)
@hobberwickey,我建议创建一个自定义模块并在模块中实现hook_boot()。按照drupal引导过程,会话层每次都会在缓存层之后调用。 hook_boot可以在缓存页面中以及在引导过程之前调用。您可以获取更多信息here。