Массивы Typoscript и их использование в FLUID

Предположим, у меня есть проект со следующими веб-страницами (см. снимок экрана)

введите здесь описание изображения

uid красного, синего, сообщения и страницы блога равны 1,2,3 и 4 соответственно.

Теперь я хотел бы определить массив или какой-то список в Typoscript, который будет содержать заголовки всех корневых веб-страниц. И этот массив я могу использовать в своем шаблоне FLUID и отображать все заголовки.

Пример:

  • в TypoScript

    arrayOfTitles= # заголовки страниц с uid 1,2,3 и 4

  • на странице ЖИДКОСТИ

    <f:for each="{arrayOfTitles}" as="foo">
    <h1> {foo} </h1>
    </f:for>
    

Возможно ли это


person dora    schedule 06.05.2013    source источник


Ответы (1)


TypoScript по своей природе представляет собой массив, поэтому самый простой способ сделать то, что вы хотите, — просто добавить в свой шаблон такую ​​коллекцию:

plugin.tx_yourext {
  settings {
    domains {
      10 = one
      20 = two
      30 = three
      40 = four
    }
  }
}

так что вы можете использовать его прямо в представлении

<f:for each="{settings.domains}" as="title">
    <h1>{title}</h1>
</f:for>

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

Псевдокод SQL:

SELECT title FROM pages WHERE is_siteroot = 1 AND deleted = 0 AND hidden = 0 ORDER BY sorting ASC

Редактировать:

Вы также можете сделать это с обычным HMENU в TypoScript (избегая использования представлений), просто создайте объект меню с помощью special=list (разумеется, вместо 35, 56 нужно указывать uid ваших корневых страниц).

Наконец, оберните каждый элемент <h1>|</h1> и добавьте опцию: doNotLinkIt=1, скорее всего, этот фрагмент будет работать (написано из головы, поэтому вам нужно его проверить):

lib.myTitles = HMENU
lib.myTitles {
  special = list
  special.value = 1,2,3,4

  1 = TMENU
  1.NO.wrapItemAndSub = <h1>|</h1>
  1.NO.ATagTitle.field =  title
  1.NO.doNotLinkIt = 1
}
person biesior    schedule 06.05.2013
comment
Спасибо за ответ. Я новичок в Typo3 и Typoscript. Мне трудно понять решение. Могу ли я создать плагин прямо в моем шаблоне, как вы упомянули? Я действительно сделал это, но ничего не отображается в интерфейсе. Или есть процесс, чтобы сначала инициировать плагин или что-то в этом роде? - person dora; 06.05.2013
comment
Я предположил, что вы создали собственное расширение. Для простого использования в необработанном TS используйте HMENU - проверьте мое редактирование - person biesior; 06.05.2013
comment
Что, если я не хочу, чтобы заголовки были обернуты, но хочу, чтобы они были назначены какой-то переменной. Чтобы я мог делать какие-то дополнительные манипуляции или повторно использовать их во внешнем интерфейсе? - person dora; 06.05.2013
comment
Кроме того, можете ли вы предложить мне какую-либо хорошую ссылку для создания пользовательских расширений? Я использую Typo3 6.0.4. - person dora; 06.05.2013
comment
Конструктор расширений версии 2.5.0+ предназначен для создания расширений в TYPO3 версии 6.0+. - person biesior; 06.05.2013
comment
Вопрос: как settings.domains доступен в представлении Fluid? Можете ли вы дать некоторое представление? Спасибо! - person eduludi; 27.09.2016
comment
@eduludi на самом деле я сделал это в образце;) настройки распространяются автоматически и доступны как обычные переменные жидкости только: {settings}, поэтому вам нужен доступ к нему, который вам нужно использовать, например, {settings.domains} или {settings.domains.10} 20, 30 и т. д. - person biesior; 27.09.2016