alexk
30.08.2013, 16:13
Добрый день коллеги, столкнулся тут с необходимостью сделать сложное меню с дополнительными полями из свойств страницы. Поля добавляем через Templavoila, без разметки (в моем случае эти поля нужны были исключительно для информативности), можно так же с разметкой если есть желание добавить дополнительные параметры в header.
Сложность составляет именно вытащить данные из новых полей, т.к. по умолчанию данные этих полей будут хранится в виде XML в таблице tx_templavoila_flex. И при стандартной схеме изъятия через {field:} мы увидим полностью всю таблицу.
Нам же нужно вытащить конкретные значения. Вот простейший пример XML из таблицы tx_templavoila_flex:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3FlexForms>
<data>
<sheet index="sDEF">
<language index="lDEF">
<field index="my_field_1">
<value index="vDEF">Значение 1</value>
</field>
</language>
</sheet>
</data>
</T3FlexForms>
Таким образом у меня появилось дополнительное поле, теперь нужно вытащить информацию из него.
Стандартного решения сделать это только через typoscript нет, по этому я и решил описать эти действия.
Что делаем:
1. Скачиваем и устанавливаем расширение best_getflexfield (typo3.org/extensions/repository/view/best_getflexfield)
2. Пишем следующий TS
lib.title = TEXT
lib.text {
preUserFunc = tx_bestgetflexfield_pi1->getFieldValue
preUserFunc.dbField = tx_templavoila_flex
preUserFunc.flexField = my_field_1
noTrimWrap = |element |
}
Как видите решение простое, но я лично потерял день на поиски, чего вам не желаю:)
Сложность составляет именно вытащить данные из новых полей, т.к. по умолчанию данные этих полей будут хранится в виде XML в таблице tx_templavoila_flex. И при стандартной схеме изъятия через {field:} мы увидим полностью всю таблицу.
Нам же нужно вытащить конкретные значения. Вот простейший пример XML из таблицы tx_templavoila_flex:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3FlexForms>
<data>
<sheet index="sDEF">
<language index="lDEF">
<field index="my_field_1">
<value index="vDEF">Значение 1</value>
</field>
</language>
</sheet>
</data>
</T3FlexForms>
Таким образом у меня появилось дополнительное поле, теперь нужно вытащить информацию из него.
Стандартного решения сделать это только через typoscript нет, по этому я и решил описать эти действия.
Что делаем:
1. Скачиваем и устанавливаем расширение best_getflexfield (typo3.org/extensions/repository/view/best_getflexfield)
2. Пишем следующий TS
lib.title = TEXT
lib.text {
preUserFunc = tx_bestgetflexfield_pi1->getFieldValue
preUserFunc.dbField = tx_templavoila_flex
preUserFunc.flexField = my_field_1
noTrimWrap = |element |
}
Как видите решение простое, но я лично потерял день на поиски, чего вам не желаю:)