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 中做了以下操作。
在 Fusion 中生成 "almost" 数组
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>
有点hacky,但它有效并且不会损害网站的性能
我想在每次重新加载时 select 一个随机节点。我的融合文件如下所示:
randomInt = ${Math.randomInt(0, q(node).children(Neos.Neos:Document).count()}
randomNode = ${q(node).children(Neos.Neos:Document).get(this.randomInt)}
很遗憾,结果存储在缓存中。这意味着只有在刷新缓存后才会返回一个新节点。我怎样才能防止这种情况发生?我已经尝试过一些缓存规则,但我还没有想出解决方案。
我要使用的元素在每个页面上。这就是为什么像 unchached
模式这样的东西是一个非常糟糕的主意。
在我的情况下,输出只是一个字符串数组。所以我在我的 Fusion 中做了以下操作。
在 Fusion 中生成 "almost" 数组
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>
有点hacky,但它有效并且不会损害网站的性能