Select 每次重新加载一个随机节点

Select a random node on every reload

我想在每次重新加载时 select 一个随机节点。我的融合文件如下所示:

randomInt = ${Math.randomInt(0, q(node).children(Neos.Neos:Document).count()}
randomNode = ${q(node).children(Neos.Neos:Document).get(this.randomInt)}

很遗憾,结果存储在缓存中。这意味着只有在刷新缓存后才会返回一个新节点。我怎样才能防止这种情况发生?我已经尝试过一些缓存规则,但我还没有想出解决方案。

我要使用的元素在每个页面上。这就是为什么像 unchached 模式这样的东西是一个非常糟糕的主意。

在我的情况下,输出只是一个字符串数组。所以我在我的 Fusion 中做了以下操作。

  1. 在 Fusion 中生成 "almost" 数组

    allMyStrings = Neos.Fusion:Loop {
        items = ${q(node).children(Neos.Neos:Document).get()}
        itemName = 'node'
        itemRenderer = ${"'" + q(node).property('testString') + "'"}
        @glue = ','
    }
    
  2. 在JS中随机选择一个数组

    <p id='replaceMe'></p>
    <script>
      var quoteArray = [{allMyStrings -> f:format.raw()}]
      var randomIndex = Math.floor(Math.random() * quoteArray.length);
      var randomElement = quoteArray[randomIndex];
      document.getElementById('replaceMe').outerHTML= '<p>' + randomElement + '</p>';
    </script>
    

有点hacky,但它有效并且不会损害网站的性能