Skip to content

Latest commit

 

History

History
126 lines (96 loc) · 16 KB

BeginnersGuide.md

File metadata and controls

126 lines (96 loc) · 16 KB

TYPO3 на базе Fluid: руководство для начинающих

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

Предисловие о пакете Bootstrap

Fabien Udriot из Ecodev создал специальный пакет introduction, который демострирует почти все возможности и лучший опыт по созданию страниц и содержимого на fluid.

Загрузите Bootstrap Introduction Package и разархивируйте его, создайте виртуальный хост Apache для нового сайта. Следуйте указаниям мастера установки, как только все будет готово, вернитесь к этому документу. Можно совмещать чтение этой документации с просмотром соответствующих частей только что установленного сайта - это очень важно, так как все специфические настройки, ресурсы и файлы, упоминающиеся в руководстве, также используются и в пакете.

Помимо прочего, introduction package - отличный инструмент для обучения передовой техники настроек и создания сайтов.

Руководство для начинающих

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

Сначала нужно познакомиться с первыми тремя расширениями: Flux, Fluid Pages и Fluid Content. Ключи этих расширений, соответственно, flux, fluidpages и fluidcontent. О каждом из этих расширений вкратце рассказывается на этой странице, а детально - в других разделах этой же документации.

В текущем документе последовательно расказывается о всех концепциях расширений TYPO3 на базе Fluid. Каждая концепция рассматривается в отдельном разделе, начиная с корневой концепции и далее раскрывается каждая отдельная идея.

Flux: Fluid FlexForms

Шаблон Fluid на основе FlexForm, использующих проекторы (ViewHelpers) для компактных и динамичных настроек.

В основе всех особенностей расширений TYPO3 на базе Fluid лежит Flux. И у него лишь одна цель: интеграция в шаблон Fluid нового типа сверхкомпактрых, супердинамичных форм настроек (Flex Form). Результат? Возможность добавления сложных разделов форм с параметрами настроек, заполняемых редакторами. При помощи Flux возможна тонкая настройка как страниц, так и содержимого на базе Fluid (Fluid Pages и Fluid Content), в то же время возможно индивидуальное определение полей форм непосредственно в шаблоне Fluid для страниц и элементов содержимого, соответственно.

Если это звучит слишком абстрактно, представьте, что имеется элемент содержимого, которому необходим переключатель, например для включения/отключения вывода специального раздела в шаблоне элемента. В традиционных дополнениях необходимо либо дополнить таблицу tt_content, либо воспользоваться формой настроек - FlexForm (с огромной структурой XML данных, просто для добавления этого одного поля, и регистрацией поля pi_flexform). При помощи Flux можно просто добавить тег проектора (ViewHelper) в настройке шаблона, а поле будет выведено при редактировании или добавлении этого типа элемента. Это очень похоже на работу обычных структур данных форм настроек (FlexForm), с одной лишь огромной разницей - для вывода поля нет необходимости создавать специфичного файла XML для данных FlexForm, что не только значительно компактнее, но и придает формам динамику, ввиду возможности использования условий, циклов и много другого из Fluid, что может влиять на структуру полей формы.

Flux FlexForm разработаны так, что могут содержать специальный раздел Preview - предпросмотр (при помощи f:section). Этот специальный раздел может содержать HTML или текстовое представление элемента содержимого, настроек дополнения, настроек typoscript - и всего, что пожелаете.

Flux возможно использовать во всех типах дополнения (в том числе и в pibase) и не только для динамичных Fluid FlexForms, но и для включения дочерних элементов содержимого (как это сделано в самих элементах Fluid Content). Возможность подключать дочерние элементы является функцией Flux, возможной благодаря столбцу со связью родитель-потомок и специальному виджету Fluid, допускающему включать специальную сетку (grid) с элементами содержимого в разделе Preview (предпросмотр).

Пикантные технические детали Flux

Для четкого понимания работы форм Flux, сначала нужно уяснить концепцию FlexForm. Эти специфичные "формы" фактически - специальный тип поля, изначально поддерживаемый ядром TYPO3. В самом поле находится файл определенной XML структуры, содержащей список полей (и более сложные настойки, вроде вкладок - sheets, или разделов с многократно используемыми объектами - но о них позже). Все, что делает Flux - удаляет зависимость от этого самого сложного XML файла, а вместо этого ту же структуру становиться возможным определить в виде специальной последовательности кода в шаблоне, используя лишь проекторы (ViewHelpers) Fluid. В процессе работы, специальные типы проекторов (ViewHelper) Flux хранят настройки (массив форм), необходимый TYPO3 для формирования специфичных "встроенных (inline) форм" - "полей FlexForm".

Flux внедряется (hooks) в TYPO3 и срабатывает каждый раз при появлении поля типа "flex" (пример: tt_content.pi_flexform - такое поле), при этом, вместо анализа файла XML, Flux анализирует файл шаблона Fluid, превращая его в структуру данных.

Интеграция с содержимым и страницами производится за счет разбора записей из таблиц tt_content или pages и анализа значений специального указателя, добавляемого к настройке таблиц TCA расширениями fluidcontent и fluidpages, соответственно. Эти значениия (в контексте страниц, они могут наследоваться от родительских страниц) указывают, в каких файлах находятся определения для форм Flux наряду с фактическим указанием для формирования элементов содержимого, шаблонов страниц, режимов вывода дополнений и т. д.

Для того, чтобы это все было возможно (и некоторые другие операции), Flux использует специальную концепцию: шаблон поставщика настроек - ConfigurationProvider.

Что такое Поставщик настроек - ConfigurationProvider?

ConfigurationProvider - это специальный тип класса для определенных целей, больше всего схожий с классом Extbase Controller, формирующий ответы (Reponses) на запросы (Requests), ConfigurationProvider возвращает значения, необходимые для идентификации файлов шаблона и настраивающие процесс вывода. ConfigurationProvider служит связующим звеном между записью определенного типа и шаблоном Fluid. Это все прото означает, что для того, чтобы Flux знал, какой файл шаблона нужно выводить, он запрашивает ConfigurationProvider о нужном пути к шаблону и названии файла, переменных, которые должны быть переданы в шаблон при его выводе, путях к макетам (Layouts) и шаблонным частям (Partials), используемых в шаблоне и многое другое.

ConfigurationProvider также выступает как обработчик записи, то есть он может манипулировать записью, перед тем, как она будет сохранена после каждой операции с ней в TYPO3. Это происходит при обновлении, удалении, перемещении, скрытии записи и подобных с ней процессах.

Другими, гораздо более краткими, словами, у ConfigurationProvider две цели: одна - указание соответствующего шаблона и связанных с ним настроек для Flux, другая - настройка записей (при необходимости). Каждый метод, читающий эти переменные и обрабатывающий записи, принимает текущую запись (в виде массива), что позволяет ConfigurationProvider, например, вернуть динамическое значение для $templatePathAndFilename полагаясь на редактируемую/выводимую в данный момент запись, также, как работают fluidcontent и fluidpages: используя значение из специального поля в записи, а в него уже может быть занесено название файла шаблона, набор путей к шаблону и многое другое.

Практический пример: стандартный ConfigurationProvider из Flux

Основной ConfigurationProvider во Flux закреплен за таблицей tt_content и срабатывет при всяком сохранении, перемещении и т. п. записей содержимого. Предназначение этого ConfigurationProvider - регулировка позиции элементов содержимого при их сохранении в родительском элементе контейнере, также обрабатываемого во Flux, срабатывает это при всяком создании записей, либо их перемещении мышкой в элемент-контейнер, путём занесения значений, определяющих местоположение элемента содежимого в области родительского и название этой области, в запись.

Далее добавляется ConfigurationProvider для fluidcontent, который срабатывает также при манипуляции записями из таблицы tt_content, но вместо "простой" обработки связей с другими элементами содержимого, этот ConfigurationProvider также способен указывать различные пути к шаблонам и файлам на основе содержимого поля tx_fed_fcefile таблицы tt_content (название этого поля сложилось по традиции, а содержит оно ссылку на выбираемый Fluid тип содержимого и коллекцию, к которой оно принадлежит, специальным образом отформатированную).

Это лишь примеры того, как можно на практике использовать ConfigurationProvider для контроля каждой мелочи при обработке шаблона во Flux - какой шаблон нужно использовать, полагаясь на данные формируемуемой или обрабатываемой в данный момент записи.

Та же концепция применима и для fluidpages, где переключатель срабатывает не на записях tt_content, а на записях pages, а указываются уже файлы, пути, переменные и тому подобное для шаблонов на основе свойств страницы (с наследованием из родительских страниц, что является отличительной чертой ConfigurationProvider fluidpages).

Возможно построить свой класс ConfigurationProvider, если нужен другой уровень контроля над формами Flux, связанными, например, с пользовательским дополнением Extbase.