我想在每次重新加载时选择一个随机节点。我的融合文件如下所示:
randomInt = ${Math.randomInt(0, q(node).children(Neos.Neos:Document).count()}
randomNode = ${q(node).children(Neos.Neos:Document).get(this.randomInt)}
不幸的是,结果存储在缓存中。这意味着只有在刷新缓存后才会返回一个新节点。我该如何防止这种情况?我已经对缓存规则进行了一些实验,但我还没有想出解决方案。
我想使用的元素在每个页面上。这就是为什么像unchached
模式这样的东西将是一个非常糟糕的主意。
在我的情况下,输出只是一个字符串数组。所以我在我的融合中做了后续工作。
-
在融合中生成"几乎"一个数组
allMyStrings = Neos.Fusion:Loop { items = ${q(node).children(Neos.Neos:Document).get()} itemName = 'node' itemRenderer = ${"'" + q(node).property('testString') + "'"} @glue = ',' }
-
在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>
有点笨拙,但它有效并且不会损害网站的性能