TYPO3: Счетчики. Вывод последовательной нумерации для меню, контент блоков и т.д.

Часто возникающий вопрос: “Как реализовать счетчик в TYPO3?” “Как пронумеровать пункты меню?” Хотя для этого есть нумерованные списки HTML, иногда они могут быть не применимы. Например если требуется управляемый процесс выставления номеров или какие-либо действия в зависимости от порядкового номера элемента.

Привыкнув к циклам в языках программирования, многие разработчики ищут подобные структуры в TypoScript. Но TypoScript не язык программирования – это всего лишь конфигурация системы и циклов там нет. Но можно задать конфигурацию где организовывать счетчик и указать как его вычислять.

Для реализации счетчика потребуется переменная для хранения текущего значения. В TYPO3 для хранения значений на этапе вывода используются регистры (registers), в которые можно сохранять любые данные и использовать их при выводе информации на сайт.

Вычисления осуществляются функцией prioriCalc, которая задает, что значение находящееся в потоке вывода является арифметическую формулу и должно подвергнуться вычислению.

Собственно это все, что требуется для организации счетчика в итерационных процессах. Далее следует поместить в цикл увеличение счетчика на каждой итерации:

1
2
3
4
5
6
7
10 = LOAD_REGISTER
10.counter {
  cObject = TEXT
  cObject.data = register:counter
  cObject.wrap = |+1
  prioriCalc = intval
}

Идея проста – на каждой итерации любого цикла, LOAD_REGISTER будет выбирать значение регистра “counter” и дописывать к нему “+1″. Далее это значение будет вычисляться и помещаться назад в регистр “counter”.
Данный код может быть размещен в любом месте где Вам необходимо что либо считать: элемент меню – для вывода порядкового номера, RenderObj – для вывода порядкового номера контент блока.

А организация циклов, это уже внутренне дело TYPO3, хотя в любом месте можно устроить искусственный цикл с помощью optionSplit.

Share and Enjoy:
  • Print this article!
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • StumbleUpon
  • TwitThis

Leave a Reply