Выберите случайный узел при каждой перезагрузке

#neoscms

#neoscms

Вопрос:

Я хочу выбирать случайный узел при каждой перезагрузке. Мой файл fusion выглядит следующим образом:

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

К сожалению, результат сохраняется в кэше. Это означает, что только после очистки кэша будет возвращен новый узел. Как я могу предотвратить это? Я уже немного поэкспериментировал с правилами кэша, но пока не нашел решения.

Ответ №1:

Элемент, который я хочу использовать, находится на каждой странице. Вот почему что-то вроде unchached режима было бы действительно плохой идеей.

В моей ситуации результатом является только массив строк. Итак, я сделал следующее в своем Fusion.

  1. Генерирует «почти» массив в Fusion

     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>
      

Немного халтурно, но это работает, и это не вредит производительности веб-сайта