Drupal |缓存页面中未缓存的JS cookie /跟踪代码算法

时间:2015-11-17 14:14:43

标签: javascript variables caching drupal

我使用“跟踪代码”模块(https://www.drupal.org/project/tracking_code)来添加跟踪代码段。

我将这些代码添加到After <BODY>

我也有自己的跟踪Cookie,其中包含userID

目标:userID设置为每个跟踪代码段

问题:我启用了缓存,因此缓存了这些代码段代码。这意味着我无法用PHP解析cookie并设置全局js变量,这些变量可以在每个片段中访问。

解: 使用javascript解析cookie,因此即使代码被缓存,变量仍然会被更新。

问题: 通常的drupal JS,如:

(function($) {
  Drupal.behaviors.user_cookie = {
    attach: function (context, settings) {
   ...
     //Im getting some variables from PHP here and using them
    }
  }
})(jQuery);

执行得太晚,这意味着跟踪代码段中没有定义的变量。

解决方案:使用以下代码,我可以设置js变量,可以从代码段中访问它们

(function ($, Drupal, window, document, undefined) {
   // Is executed on time!
   // How to get variables from php here??
})(jQuery, Drupal, this, this.document);

问题:我不能再使用代码从PHP获取一些静态变量(可以缓存):

function user_cookie_page_build(&$page) {
  drupal_add_js(array('user_cookie' => array('someVariable' => $someValue)), 'setting');
  drupal_add_js(drupal_get_path('module', 'user_cookie') . '/js/user_cookie.js');
}   

解决方案(替代方法):head中执行内联脚本设置变量,但我不喜欢这种方式。

  drupal_add_js( 'Drupal.user_cookie.cookieName = "'
                . variable_get('user_cookie_fname') . '";',
      array(
          'type' => 'inline', 
          'scope' => 'head',
          'weight' => 0
      )
  );
  drupal_add_js(drupal_get_path('module', 'ft_user_cookie') . '/js/ft_user_cookie.js');

如果有人有更好的解决方案(Ajax不是我的方式),请告诉我!

1 个答案:

答案 0 :(得分:0)

我想到了一个解决方法,但它不是一个完美的解决方案:

  drupal_add_js(  'Drupal.ft_user_cookie.cookieName = "' . 
                   variable_get('user_cookie_fname') . '";',,
      array(
          'type' => 'inline', 
          'scope' => 'head',
          'weight' => 0
      )
  );

在我的剧本之前添加此内容

  drupal_add_js(drupal_get_path('module', 'ft_user_cookie') . '/js/ft_user_cookie.js');

解决问题。