.. include:: /Includes.rst.txt
.. _cb_package_files:
======================================
Directory structure of a content block
======================================
Although the classic structure of a TYPO3 extension is easier to understand for
TYPO3 developers, we chose to use the `Symfony `__
compliant **src/dist** structure instead. As TYPO3 uses more and more of Symfony
it could be beneficial, especially for people new to TYPO3, to get used to these
structures. Also, src/dist is more easy to understand by frontend developers as
this kind of naming is also common there.
+--------------------------------+------------+---------------------------------+
| Directory / File               | Mandatory? | Could be created by a generator |
+================================+============+=================================+
| composer.json                  |      x     |                x                |
+--------------------------------+------------+---------------------------------+
| ContentBlockIcon.(svg/png/gif) |      x     |                x                |
+--------------------------------+------------+---------------------------------+
| EditorInterface.yaml           |      x     |                x                |
+--------------------------------+------------+---------------------------------+
| src/Language/Default.xlf       |      x     |                x                |
+--------------------------------+------------+---------------------------------+
| src/EditorPreview.html         |            |                x                |
+--------------------------------+------------+---------------------------------+
| src/Frontend.html              |            |                x                |
+--------------------------------+------------+---------------------------------+
| dist/EditorPreview.css         |            |                x                |
+--------------------------------+------------+---------------------------------+
| dist/Frontend.css              |            |                x                |
+--------------------------------+------------+---------------------------------+
| dist/Frontend.js               |            |                x                |
+--------------------------------+------------+---------------------------------+
Content block package files explained
=====================================
composer.json
-------------
refers to: `Composer schema `__
The content block ID (CType) derives from the package name. Therefore one
composer package represents exactly one content block.
**You must**
*  provide this file
*  set the type property to: typo3-cms-contentblock
**You may**
*  use the full composer.json config and define autoloading for ViewHelpers etc.
EditorInterface.yaml
--------------------
refers to: `YAML RFC `__
The content block ID (CType) derives from the package name. Therefore one
composer package represents exactly one content block.
**You must**
*  provide this file
*  define the editor interface of exactly one content block
*  define all the fields and their position in the editing interface
See :ref:`yaml_reference`.
ContentBlockIcon.(svg|png|gif)
------------------------------
This is the icon for the content block. There is no fallback by intention, but
it is easy to generate an SVG with the content block name as a graphical
representation.
**You must**
*  provide this file
*  provide that file in the format svg or png or gif
*  provide a file with 1:1 dimensions
src/Language/Default.xlf
------------------------
**You may**
*  provide that file
*  define your labels with the XLF links in the configuration file