переменные не или не все заменены - PullRequest
0 голосов
/ 25 января 2020

В следующем шаблоне я использую три переменные: GA_TRACKING_ID, CC_POPUP_BGCOL и CC_POPUP_TXTCOL

<script src="fileadmin/templates/js/cookieconsent.min.js" data-cfasync="false"></script>
<script>
  function loadGAonConsent(){
    var gs = document.createElement("script");
    gs.async = true;
    gs.src = "https://www.googletagmanager.com/gtag/js?id={GA_TRACKING_ID}";
    var h = document.getElementsByTagName("head")[0];
    h.appendChild(gs, h);
    gs.onload = function (){
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments)};
      gtag('js', new Date());
      gtag('config', '{GA_TRACKING_ID}', { 'anonymize_ip': true });
      testfunc('{CC_POPUP_BGCOL}', '{CC_POPUP_TXTCOL}');
    }
  }

  if(document.cookie.split(';').filter(function(item){return item.indexOf('cookieconsent_status=allow') >= 0}).length)
    loadGAonConsent();

  window.cookieconsent.initialise({
    "palette": {
      "popup": {
      "background": "{CC_POPUP_BGCOL}",
      "text": "{CC_POPUP_TXTCOL}"
      },
      "button": {
      "background": "#4b81e8"
      }
    },
    "theme": "classic",
    "type": "opt-in",
    "content": {
      "policy": "policy",
      "message": "message",
      "deny": "deny",
      "allow": "allow",
      "link": "link",
      "href": "#"
    },
    onStatusChange:function(status,chosenBefore){
      if(this.hasConsented())
        loadGAonConsent();
    }
  });
</script>

Все появления GA_TRACKING_ID заменены, как и ожидалось, но не оба CC_POPUP_xxx в JS -функции window.cookieconsent.initialise().

Итак Я добавил вызов к несуществующему веселью c testfunc('{CC_POPUP_BGCOL}', '{CC_POPUP_TXTCOL}') сразу после вызовов gtag() (для имитации аналогичного вызова функции), и неожиданно эти два появления были заменены.

Может кто-нибудь объяснить это?

Ответы [ 3 ]

1 голос
/ 25 января 2020

Если это шаблон Fluid, я настоятельно рекомендую вам не рассчитывать на то, что Fluid заменит ваши переменные. В шаблоне, который включает JavaScript (особенно с {), анализатор Fluid очень (!!!) ненадежен. Даже если он работает, это не значит, что он будет работать после обновления Fluid / TYPO3 или даже на другом сервере.

Избегайте его, где это возможно.

Я предлагаю удалить любую переменную маркеры из вашего JavaScript и вместо этого поместите их в HTML и загрузите их через JavaScript оттуда.

Как пример:

<script id="cookieconsent-script" 
        src="fileadmin/templates/js/cookieconsent.min.js" 
        data-ga-tracking-id="12345ABC"` />

<script>
  var cookieconsentScriptEl = document.getElementById('cookieconsent-script')
  var gaTrackingId = cookieconsentScriptEl.dataset.gaTrackingId
</script>

См. https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes

1 голос
/ 25 января 2020

Жидкость не может знать, принадлежат ли ваши фигурные скобки жидкости или JavaScript. Таким образом, он останавливается, если не может его разрешить.

Попробуйте добавить {whatEver->f:format.raw()}, в вашем случае '{CC_POPUP_BGCOL->f:format.raw()}' и т. Д.

0 голосов
/ 25 января 2020

Вы можете перевести Fluid в режим анализа, поместив тег Fluid внутри тега script. При этом я всегда стараюсь максимально отделить определения переменных от фактического Javascript кода.

Попробуйте что-нибудь связать это.

<script>
      <f:comment>Wake up, fluid!</f:comment>
      var ccbackground= "{CC_POPUP_BGCOL}";
      var cctext = "{CC_POPUP_TXTCOL}";
      var cctrackingId = "{GA_TRACKING_ID}";
</script>

<script src="fileadmin/templates/js/cookieconsent.min.js" data-cfasync="false"></script>
<script>
  function loadGAonConsent(){
    var gs = document.createElement("script");
    gs.async = true;
    gs.src = "https://www.googletagmanager.com/gtag/js?id=cctrackingId";
    var h = document.getElementsByTagName("head")[0];
    h.appendChild(gs, h);
    gs.onload = function (){
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments)};
      gtag('js', new Date());
      gtag('config', 'cctrackingId', { 'anonymize_ip': true });
      testfunc('ccbackground', 'cctext');
    }
  }

  if(document.cookie.split(';').filter(function(item){return item.indexOf('cookieconsent_status=allow') >= 0}).length)
    loadGAonConsent();

  window.cookieconsent.initialise({
    "palette": {
      "popup": {
      "background": ccbackground,
      "text": cctext
      },
      "button": {
      "background": "#4b81e8"
      }
    },
    "theme": "classic",
    "type": "opt-in",
    "content": {
      "policy": "policy",
      "message": "message",
      "deny": "deny",
      "allow": "allow",
      "link": "link",
      "href": "#"
    },
    onStatusChange:function(status,chosenBefore){
      if(this.hasConsented())
        loadGAonConsent();
    }
  });
</script>
...