Как получить несколько разделов с изображениями в форме FluidTYPO3 flux с TYPO3 10?

Я использую FluidTYPO3 (flux и vhs) для запуска веб-страниц TYPO3 уже много лет. С TYPO3 10 я столкнулся с серьезной проблемой. Я быстро напишу о своем варианте использования, о том, как я его решил до сих пор, а затем о том, в чем проблема с 10 LTS.

Пример использования:
я хочу иметь шаблон элемента содержимого для временной шкалы с использованием FluidTYPO3 / flux. Каждая точка на временной шкале должна иметь заголовок, текст и, при необходимости, несколько изображений. В общем, довольно просто (по крайней мере, я так думал).

Решение на данный момент (TYPO3 ‹= 9):
Элементы временной шкалы - это разделы. Изображения используют flux:field.file.

Упрощенный пример формы:

    <flux:form id="timeline" label="timeline">
        <flux:form.section name="timeline" label="Timeline">
            <flux:form.object name="element" label="Element">
                <flux:field.input name="title" label="Heading" />
                <flux:field.text name="label" label="Text" enableRichText="TRUE" />
                <flux:field.file name="images" label="Pictures" allowed="jpg,png,svg" multiple="TRUE" maxItems="50" size="5" showThumbnails="TRUE"
                />
            </flux:form.object>
        </flux:form.section>
    </flux:form>

При этом на шкале времени можно создать несколько элементов, и каждый из них может иметь свой собственный набор изображений.

Проблема в TYPO3 10:
Технология (поля TCA group для выбора файлов), на которую опирается flux:field.file, была объявлена ​​устаревшей в TYPO3 9 и удалена в TYPO3 10, см. это уведомление. Это одна из причин, почему flux:field.file также был помечен как устаревший и будет удален в TYPO3 10.

В уведомлении об устаревании TYPO3 говорится, что вместо этого следует использовать отношения FAL. Конечно, flux также может делать это с flux:field.inline.fal. Однако у вас может быть только одно поле FAL для каждой FlexForm. Это исключает его использование в разделах, поскольку все разделы будут использовать одни и те же изображения. Это ограничение известно некоторое время - см. , например, этот отчет об ошибке, но никогда не исправлялось. . По этой же причине я изначально решил не использовать поля FAL. В то время рекомендованным обходным путем было использование пустых файловых полей.

Вопрос:

Итак - как все это делают? Как добавить несколько полей изображения к гибкой форме в TYPO3 10? РЕДАКТИРОВАТЬ: Более конкретно, как добавить поле изображения как часть раздела Flexform, который может содержать несколько дочерних записей (что приводит к появлению нескольких полей изображения)?

Примечание. Я знаю, что могу вернуть файловое поле, используя поле input с inputLink renderType (например, this), но, насколько я могу судить, он не позволяет связывать несколько изображений.


person user4357465    schedule 21.03.2021    source источник


Ответы (3)


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

В Gridelements это называется функциональным контейнером, поскольку контейнер определяет поведение и внешний вид этих элементов, а сами элементы вовсе не обязательно должны быть настраиваемыми элементами.

Кроме того, это значительно упрощает доступ к содержимому этих элементов, то есть при выполнении поискового запроса.

person Jo Hasenau    schedule 21.03.2021

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

По-прежнему можно использовать поля flux:field.file, если для параметра useFalRelation установлено значение true, даже в TYPO3 v10 LTS и в повторяемых разделах FlexForm. Затем в поле будут помещены sys_file идентификатора записи, разделенные запятой, а не необработанные имена файлов. Их можно использовать как src аргумент, например, для f:image, а также в качестве имени файла, поэтому не нужно изменять сами шаблоны CE. Все существующие CE, для которых useFalRelation установлено значение false, необходимо перенести, чтобы имена файлов были заменены UID sys_file.

Это немного лучше, чем обходной путь inputLink, поскольку он позволяет использовать несколько изображений.

person user4357465    schedule 04.04.2021

В упомянутом вами отчете об ошибке уже содержатся решения, поскольку описанная здесь фактическая проблема заключается в том, что поля FAL в гибкой форме используют одно и то же имя.

Так что вместо

image

согласно отчету об ошибке должно быть

settings.foreground.image

что, конечно, не работает, поскольку точка является частью пути, но не имени. Но на самом деле замена точки подчеркиванием и использование некоторых суффиксов внутри одной и той же вкладки flexform должно помочь:

settings.foreground.settings_foreground_image
settings.foreground.settings_foreground_image2

Таким образом вы убедитесь, что

  1. Имена полей в вашей гибкой форме уникальны
  2. Фактическое имя поля в записи sys_file_reference уже содержит полную информацию о пути
  3. Вы можете использовать эту информацию для получения изображений, то есть в DataProcessor, и при этом знать поле FlexForm, которому они на самом деле принадлежат.

Sitll Я бы порекомендовал полностью отказаться от FlexForms (а значит, и от Flux) в пользу реальных полей в таблице базы данных.

person Jo Hasenau    schedule 21.03.2021
comment
Хотя это работает для нескольких полей изображений верхнего уровня, это не работает для разделов / объектов Flexform. Или нет? - person user4357465; 21.03.2021
comment
Что касается использования вместо этого таблиц БД, это, конечно, в некоторой степени верное решение проблемы. Однако я обнаружил, что и процесс разработки (необходимость создания таблиц базы данных, TCA, подключаемых модулей внешнего интерфейса и т. Д.), И взаимодействие с пользователем (необходимость создания элемента содержимого подключаемого модуля и отображаемых данных по отдельности) не соответствуют потоку. К тому же я не в восторге от миграции (= воссоздания содержимого) 30+ установок TYPO3: D - person user4357465; 21.03.2021
comment
Вам не нужен какой-либо внешний модуль для отображения дополнительных полей данных tt_content с помощью Fluid, так как весь массив данных будет помещен в ваш шаблон жидкости в любом случае, независимо от того, сколько полей там. DataProcessing сделает все остальное и добавит изображения через ссылки sys_file и т.п. Усилия для TCA точно такие же, как и для FlexForms, поскольку FlexForms - это просто XML-представление структур TCA. - person Jo Hasenau; 21.03.2021
comment
Согласно упомянутому вами отчету об ошибке: Технически проблема в том, что когда вы сохраняете запись, которая имеет FlexForm с полем FAL, отношение FAL сохраняется с использованием имени поля без учета вложенности, что означает, что все ваши отношения имеют имя поля изображение после их сохранения. Конечно, когда вы перезагружаете форму, методы, которые предварительно заполняют поля отношения FAL, затем обнаруживают одно и то же отношение во всех полях. Для меня это звучит примерно так: использование разных имен полей решает проблему. - person Jo Hasenau; 21.03.2021
comment
Теоретически проблему решают разные имена полей, но, как ни странно, эта опция просто не существует для полей в повторяемых разделах. Вы можете определить только одно имя поля в TCA для поля - см. Пример XML. Если пользователь добавляет в раздел несколько экземпляров объекта, все они получат одно и то же имя поля в отношении FAL и, таким образом, будут использовать одни и те же файлы. Имя поля должно содержать индекс, чтобы это действительно работало. - person user4357465; 21.03.2021
comment
Хорошо, к счастью, я не очень люблю FlexForms, но, думаю, именно поэтому я перепутал термин «разделы» с «листами». Вот почему я сейчас опубликую еще один ответ, а этот оставлю здесь, поскольку он содержит полезную информацию в комментариях. - person Jo Hasenau; 21.03.2021