每次重新加载时选择一个随机节点



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

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

不幸的是,结果存储在缓存中。这意味着只有在刷新缓存后才会返回一个新节点。我该如何防止这种情况?我已经对缓存规则进行了一些实验,但我还没有想出解决方案。

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

在我的情况下,输出只是一个字符串数组。所以我在我的融合中做了后续工作。

  1. 在融合中生成"几乎"一个数组

    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>
    

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

最新更新