first commit
No files matched your search
@@ -0,0 +1,97 @@
|
||||
<?php
|
||||
namespace TYPO3\CMS\FluidStyledContent\ViewHelpers\Link;
|
||||
|
||||
/*
|
||||
* This file is part of the TYPO3 CMS project.
|
||||
*
|
||||
* It is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License, either version 2
|
||||
* of the License, or any later version.
|
||||
*
|
||||
* For the full copyright and license information, please read the
|
||||
* LICENSE.txt file that was distributed with this source code.
|
||||
*
|
||||
* The TYPO3 project - inspiring people to share!
|
||||
*/
|
||||
|
||||
use TYPO3\CMS\Core\Resource\FileInterface;
|
||||
use TYPO3\CMS\Core\TypoScript\TypoScriptService;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
|
||||
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
|
||||
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
|
||||
use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
|
||||
|
||||
/**
|
||||
* A ViewHelper for creating a link for an image popup.
|
||||
*
|
||||
* = Example =
|
||||
*
|
||||
* <code title="enlarge image on click">
|
||||
* <ce:link.clickEnlarge image="{image}" configuration="{settings.images.popup}"><img src=""></ce:link.clickEnlarge>
|
||||
* </code>
|
||||
*
|
||||
* <output>
|
||||
* <a href="url" onclick="javascript" target="thePicture"><img src=""></a>
|
||||
* </output>
|
||||
*
|
||||
* @internal this is not part of TYPO3 Core API.
|
||||
*/
|
||||
class ClickEnlargeViewHelper extends AbstractViewHelper
|
||||
{
|
||||
use CompileWithRenderStatic;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $escapeOutput = false;
|
||||
|
||||
/**
|
||||
* Initialize ViewHelper arguments
|
||||
*/
|
||||
public function initializeArguments()
|
||||
{
|
||||
$this->registerArgument('image', FileInterface::class, 'The original image file', true);
|
||||
$this->registerArgument(
|
||||
'configuration',
|
||||
'mixed',
|
||||
'String, \TYPO3\CMS\Core\Resource\File or \TYPO3\CMS\Core\Resource\FileReference with link configuration',
|
||||
true
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $arguments
|
||||
* @param \Closure $renderChildrenClosure
|
||||
* @param RenderingContextInterface $renderingContext
|
||||
* @return string
|
||||
*/
|
||||
public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
|
||||
{
|
||||
$image = $arguments['image'];
|
||||
if ($image instanceof FileInterface) {
|
||||
self::getContentObjectRenderer()->setCurrentFile($image);
|
||||
}
|
||||
$configuration = self::getTypoScriptService()->convertPlainArrayToTypoScriptArray($arguments['configuration']);
|
||||
$content = $renderChildrenClosure();
|
||||
$configuration['enable'] = true;
|
||||
|
||||
return self::getContentObjectRenderer()->imageLinkWrap($content, $image, $configuration);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ContentObjectRenderer
|
||||
*/
|
||||
protected static function getContentObjectRenderer()
|
||||
{
|
||||
return $GLOBALS['TSFE']->cObj;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return TypoScriptService
|
||||
*/
|
||||
protected static function getTypoScriptService(): TypoScriptService
|
||||
{
|
||||
return GeneralUtility::makeInstance(TypoScriptService::class);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
defined('TYPO3_MODE') or die();
|
||||
|
||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
|
||||
'fluid_styled_content',
|
||||
'Configuration/TypoScript/',
|
||||
'Fluid Content Elements'
|
||||
);
|
||||
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile(
|
||||
'fluid_styled_content',
|
||||
'Configuration/TypoScript/Styling/',
|
||||
'Fluid Content Elements CSS (optional)'
|
||||
);
|
||||
@@ -0,0 +1,38 @@
|
||||
# Bullet List:
|
||||
# A single bullet list.
|
||||
#
|
||||
# CType: bullets
|
||||
|
||||
tt_content.bullets =< lib.contentElement
|
||||
tt_content.bullets {
|
||||
templateName = Bullets
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\SplitProcessor
|
||||
10 {
|
||||
if {
|
||||
value = 2
|
||||
isLessThan.field = bullets_type
|
||||
}
|
||||
fieldName = bodytext
|
||||
removeEmptyEntries = 1
|
||||
as = bullets
|
||||
}
|
||||
20 = TYPO3\CMS\Frontend\DataProcessing\CommaSeparatedValueProcessor
|
||||
20 {
|
||||
fieldName = bodytext
|
||||
if {
|
||||
value = 2
|
||||
equals.field = bullets_type
|
||||
}
|
||||
fieldDelimiter = |
|
||||
as = bullets
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], bodytext [bullets_type]
|
||||
editIcons {
|
||||
beforeLastTag = 1
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.bullets
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
# Divider:
|
||||
# This element inserts a visual divider, which is by default a horizontal line.
|
||||
#
|
||||
# CType: div
|
||||
|
||||
tt_content.div =< lib.contentElement
|
||||
tt_content.div {
|
||||
templateName = Div
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
# Header Only:
|
||||
# Adds a header only.
|
||||
#
|
||||
# CType: header
|
||||
|
||||
tt_content.header =< lib.contentElement
|
||||
tt_content.header {
|
||||
templateName = Header
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout|header_link], subheader, date
|
||||
editIcons {
|
||||
beforeLastTag = 1
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.header
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
# Plain HTML:
|
||||
# With this element you can output raw HTML code on the page.
|
||||
#
|
||||
# CType: html
|
||||
|
||||
tt_content.html =< lib.contentElement
|
||||
tt_content.html {
|
||||
templateName = Html
|
||||
stdWrap {
|
||||
editIcons = tt_content: bodytext
|
||||
editIcons {
|
||||
beforeLastTag = 1
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.html
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
# Image:
|
||||
# ...
|
||||
#
|
||||
# CType: image
|
||||
|
||||
tt_content.image =< lib.contentElement
|
||||
tt_content.image {
|
||||
templateName = Image
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = image
|
||||
}
|
||||
20 = TYPO3\CMS\Frontend\DataProcessing\GalleryProcessor
|
||||
20 {
|
||||
maxGalleryWidth = {$styles.content.textmedia.maxW}
|
||||
maxGalleryWidthInText = {$styles.content.textmedia.maxWInText}
|
||||
columnSpacing = {$styles.content.textmedia.columnSpacing}
|
||||
borderWidth = {$styles.content.textmedia.borderWidth}
|
||||
borderPadding = {$styles.content.textmedia.borderPadding}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content : image [imageorient|imagewidth|imageheight], [imagecols|imageborder], image_zoom
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.image
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
# General Plugin:
|
||||
# This is the default rendering definition for plugins.
|
||||
#
|
||||
# CType: list
|
||||
|
||||
tt_content.list =< lib.contentElement
|
||||
tt_content.list {
|
||||
templateName = List
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], list_type, layout, pages [recursive]
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.list
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
# Menu of subpages of selected pages including abstracts:
|
||||
# ...
|
||||
#
|
||||
# CType: menu_abstract
|
||||
|
||||
tt_content.menu_abstract =< lib.contentElement
|
||||
tt_content.menu_abstract {
|
||||
templateName = MenuAbstract
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
|
||||
10 {
|
||||
special = directory
|
||||
special.value.field = pages
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = media
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], pages
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.menu
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
# Content elements for selected categories:
|
||||
# ...
|
||||
#
|
||||
# CType: menu_categorized_content
|
||||
|
||||
tt_content.menu_categorized_content =< lib.contentElement
|
||||
tt_content.menu_categorized_content {
|
||||
templateName = MenuCategorizedContent
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
|
||||
10 {
|
||||
table = tt_content
|
||||
selectFields = tt_content.*
|
||||
groupBy = uid
|
||||
pidInList.data = leveluid : 0
|
||||
recursive = 99
|
||||
join.data = field:selected_categories
|
||||
join.wrap = sys_category_record_mm ON uid = sys_category_record_mm.uid_foreign AND sys_category_record_mm.uid_local IN(|)
|
||||
where.data = field:category_field
|
||||
where.wrap = tablenames='tt_content' and fieldname='|'
|
||||
orderBy = tt_content.sorting
|
||||
as = content
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = image
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], selected_categories, category_field
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.menu
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
# Pages for selected categories:
|
||||
# ...
|
||||
#
|
||||
# CType: menu_categorized_pages
|
||||
|
||||
tt_content.menu_categorized_pages =< lib.contentElement
|
||||
tt_content.menu_categorized_pages {
|
||||
templateName = MenuCategorizedPages
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
|
||||
10 {
|
||||
special = categories
|
||||
special {
|
||||
value.field = selected_categories
|
||||
relation.field = category_field
|
||||
sorting = title
|
||||
order = asc
|
||||
}
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = media
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], selected_categories, category_field
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.menu
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
# Menu of selected pages:
|
||||
# ...
|
||||
#
|
||||
# CType: menu_pages
|
||||
|
||||
tt_content.menu_pages =< lib.contentElement
|
||||
tt_content.menu_pages {
|
||||
templateName = MenuPages
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
|
||||
10 {
|
||||
special = list
|
||||
special.value.field = pages
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = media
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], pages
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.menu
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
# Recently updated pages:
|
||||
# ...
|
||||
#
|
||||
# CType: menu_recently_updated
|
||||
|
||||
tt_content.menu_recently_updated =< lib.contentElement
|
||||
tt_content.menu_recently_updated {
|
||||
templateName = MenuRecentlyUpdated
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
|
||||
10 {
|
||||
special = updated
|
||||
special {
|
||||
value.field = pages
|
||||
maxAge = 3600*24*7
|
||||
excludeNoSearchPages = 1
|
||||
}
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = media
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], pages
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.menu
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
# Related pages (based on keywords):
|
||||
# ...
|
||||
#
|
||||
# CType: menu_related_pages
|
||||
|
||||
tt_content.menu_related_pages =< lib.contentElement
|
||||
tt_content.menu_related_pages {
|
||||
templateName = MenuRelatedPages
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
|
||||
10 {
|
||||
special = keywords
|
||||
special {
|
||||
value.field = pages
|
||||
excludeNoSearchPages = 1
|
||||
}
|
||||
alternativeSortingField = title
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = media
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], pages
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.menu
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
# Section index (page content marked for section menus):
|
||||
# ...
|
||||
#
|
||||
# CType: menu_section
|
||||
|
||||
tt_content.menu_section =< lib.contentElement
|
||||
tt_content.menu_section {
|
||||
templateName = MenuSection
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
|
||||
10 {
|
||||
// Always activate includeNotInMenu for a section menu of the current page
|
||||
includeNotInMenu.override = 1
|
||||
includeNotInMenu.override.if.isFalse.field = pages
|
||||
special = list
|
||||
special {
|
||||
value {
|
||||
field = pages
|
||||
override {
|
||||
data = page:uid
|
||||
if {
|
||||
isFalse.field = pages
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = media
|
||||
}
|
||||
20 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
|
||||
20 {
|
||||
table = tt_content
|
||||
pidInList.field = uid
|
||||
as = content
|
||||
where = sectionIndex = 1
|
||||
orderBy = sorting
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = image
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], pages
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.menu
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
# Menu of subpages of selected pages including sections:
|
||||
# ...
|
||||
#
|
||||
# CType: menu_section_pages
|
||||
|
||||
tt_content.menu_section_pages =< lib.contentElement
|
||||
tt_content.menu_section_pages {
|
||||
templateName = MenuSectionPages
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
|
||||
10 {
|
||||
special = directory
|
||||
special.value.field = pages
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = media
|
||||
}
|
||||
20 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
|
||||
20 {
|
||||
table = tt_content
|
||||
pidInList.field = uid
|
||||
orderBy = sorting
|
||||
as = content
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = image
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], pages
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.menu
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
# Sitemap:
|
||||
# ...
|
||||
#
|
||||
# CType: menu_sitemap
|
||||
|
||||
tt_content.menu_sitemap =< lib.contentElement
|
||||
tt_content.menu_sitemap {
|
||||
templateName = MenuSitemap
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
|
||||
10 {
|
||||
levels = 7
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = media
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], pages
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.menu
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
# Sitemaps of selected pages:
|
||||
# ...
|
||||
#
|
||||
# CType: menu_sitemap_pages
|
||||
|
||||
tt_content.menu_sitemap_pages =< lib.contentElement
|
||||
tt_content.menu_sitemap_pages {
|
||||
templateName = MenuSitemapPages
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
|
||||
10 {
|
||||
special = directory
|
||||
special.value.field = pages
|
||||
levels = 7
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = media
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], pages
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.menu
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
# Menu of subpages of selected pages:
|
||||
# ...
|
||||
#
|
||||
# CType: menu_subpages
|
||||
|
||||
tt_content.menu_subpages =< lib.contentElement
|
||||
tt_content.menu_subpages {
|
||||
templateName = MenuSubpages
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
|
||||
10 {
|
||||
special = directory
|
||||
special.value.field = pages
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = media
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], pages
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.menu
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
# Insert records:
|
||||
# This element embeds other content elements.
|
||||
#
|
||||
# CType: shortcut
|
||||
|
||||
tt_content.shortcut =< lib.contentElement
|
||||
tt_content.shortcut {
|
||||
templateName = Shortcut
|
||||
|
||||
# Keep this, since the "conf" option can be used
|
||||
variables.shortcuts = RECORDS
|
||||
variables.shortcuts {
|
||||
source.field = records
|
||||
tables = {$styles.content.shortcut.tables}
|
||||
}
|
||||
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], records
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.shortcut
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
# Table:
|
||||
# A simple table.
|
||||
#
|
||||
# CType: table
|
||||
|
||||
tt_content.table =< lib.contentElement
|
||||
tt_content.table {
|
||||
templateName = Table
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\CommaSeparatedValueProcessor
|
||||
10 {
|
||||
fieldName = bodytext
|
||||
fieldDelimiter.char.cObject = TEXT
|
||||
fieldDelimiter.char.cObject {
|
||||
field = table_delimiter
|
||||
}
|
||||
fieldEnclosure.char.cObject = TEXT
|
||||
fieldEnclosure.char.cObject {
|
||||
field = table_enclosure
|
||||
}
|
||||
fieldEnclosure {
|
||||
if {
|
||||
value = 0
|
||||
equals.field = table_enclosure
|
||||
negate = 1
|
||||
}
|
||||
}
|
||||
maximumColumns.field = cols
|
||||
as = table
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], bodytext, [table_caption|cols|table_header_position|table_tfoot]
|
||||
editIcons {
|
||||
beforeLastTag = 1
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.table
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
# Regular Text Element:
|
||||
# A regular text element with header and bodytext fields.
|
||||
#
|
||||
# CType: text
|
||||
|
||||
tt_content.text =< lib.contentElement
|
||||
tt_content.text {
|
||||
templateName = Text
|
||||
stdWrap {
|
||||
editIcons = tt_content: bodytext
|
||||
editIcons {
|
||||
beforeLastTag = 1
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.html
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
# Text & Media:
|
||||
# Any number of media wrapped right around a regular text element.
|
||||
#
|
||||
# CType: textmedia
|
||||
|
||||
tt_content.textmedia =< lib.contentElement
|
||||
tt_content.textmedia {
|
||||
templateName = Textmedia
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = assets
|
||||
}
|
||||
20 = TYPO3\CMS\Frontend\DataProcessing\GalleryProcessor
|
||||
20 {
|
||||
maxGalleryWidth = {$styles.content.textmedia.maxW}
|
||||
maxGalleryWidthInText = {$styles.content.textmedia.maxWInText}
|
||||
columnSpacing = {$styles.content.textmedia.columnSpacing}
|
||||
borderWidth = {$styles.content.textmedia.borderWidth}
|
||||
borderPadding = {$styles.content.textmedia.borderPadding}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], bodytext, assets [imageorient|imagewidth|imageheight], [imagecols|imageborder], image_zoom
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.textmedia
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
# Text and Images:
|
||||
# Text with images.
|
||||
#
|
||||
# CType: textpic
|
||||
|
||||
tt_content.textpic =< lib.contentElement
|
||||
tt_content.textpic {
|
||||
templateName = Textpic
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = image
|
||||
}
|
||||
20 = TYPO3\CMS\Frontend\DataProcessing\GalleryProcessor
|
||||
20 {
|
||||
maxGalleryWidth = {$styles.content.textmedia.maxW}
|
||||
maxGalleryWidthInText = {$styles.content.textmedia.maxWInText}
|
||||
columnSpacing = {$styles.content.textmedia.columnSpacing}
|
||||
borderWidth = {$styles.content.textmedia.borderWidth}
|
||||
borderPadding = {$styles.content.textmedia.borderPadding}
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], bodytext, image [imageorient|imagewidth|imageheight], [imagecols|imageborder], image_zoom
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.textpic
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
# File Links:
|
||||
# Makes a list of files for download.
|
||||
#
|
||||
# CType: uploads
|
||||
|
||||
tt_content.uploads =< lib.contentElement
|
||||
tt_content.uploads {
|
||||
templateName = Uploads
|
||||
dataProcessing {
|
||||
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
|
||||
10 {
|
||||
references.fieldName = media
|
||||
collections.field = file_collections
|
||||
sorting.field = filelink_sorting
|
||||
sorting.direction.field = filelink_sorting_direction
|
||||
}
|
||||
}
|
||||
stdWrap {
|
||||
editIcons = tt_content: header [header_layout], media, file_collections, filelink_sorting, [filelink_size|uploads_description|uploads_type]
|
||||
editIcons {
|
||||
iconTitle.data = LLL:EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf:editIcon.uploads
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
# Default configuration for content elements which are using FLUIDTEMPLATE directly
|
||||
lib.contentElement >
|
||||
lib.contentElement = FLUIDTEMPLATE
|
||||
lib.contentElement {
|
||||
templateName = Default
|
||||
templateRootPaths {
|
||||
0 = EXT:fluid_styled_content/Resources/Private/Templates/
|
||||
10 = {$styles.templates.templateRootPath}
|
||||
}
|
||||
partialRootPaths {
|
||||
0 = EXT:fluid_styled_content/Resources/Private/Partials/
|
||||
10 = {$styles.templates.partialRootPath}
|
||||
}
|
||||
layoutRootPaths {
|
||||
0 = EXT:fluid_styled_content/Resources/Private/Layouts/
|
||||
10 = {$styles.templates.layoutRootPath}
|
||||
}
|
||||
settings {
|
||||
defaultHeaderType = {$styles.content.defaultHeaderType}
|
||||
media {
|
||||
popup {
|
||||
bodyTag = <body style="margin:0; background:#fff;">
|
||||
wrap = <a href="javascript:close();"> | </a>
|
||||
width = {$styles.content.textmedia.linkWrap.width}
|
||||
height = {$styles.content.textmedia.linkWrap.height}
|
||||
crop.data = file:current:crop
|
||||
JSwindow = 1
|
||||
JSwindow {
|
||||
newWindow = {$styles.content.textmedia.linkWrap.newWindow}
|
||||
if.isFalse = {$styles.content.textmedia.linkWrap.lightboxEnabled}
|
||||
}
|
||||
directImageLink = {$styles.content.textmedia.linkWrap.lightboxEnabled}
|
||||
linkParams.ATagParams.dataWrap = class="{$styles.content.textmedia.linkWrap.lightboxCssClass}" rel="{$styles.content.textmedia.linkWrap.lightboxRelAttribute}"
|
||||
}
|
||||
additionalConfig {
|
||||
no-cookie = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
# Creates persistent ParseFunc setup for non-HTML content.
|
||||
lib.parseFunc {
|
||||
makelinks = 1
|
||||
makelinks {
|
||||
http {
|
||||
keep = {$styles.content.links.keep}
|
||||
extTarget = {$styles.content.links.extTarget}
|
||||
}
|
||||
mailto {
|
||||
keep = path
|
||||
}
|
||||
}
|
||||
tags {
|
||||
link = TEXT
|
||||
link {
|
||||
current = 1
|
||||
typolink {
|
||||
parameter.data = parameters : allParams
|
||||
extTarget = {$styles.content.links.extTarget}
|
||||
}
|
||||
parseFunc.constants = 1
|
||||
}
|
||||
a = TEXT
|
||||
a {
|
||||
current = 1
|
||||
typolink {
|
||||
parameter.data = parameters:href
|
||||
title.data = parameters:title
|
||||
ATagParams.data = parameters:allParams
|
||||
# the target attribute takes precedence over config.intTarget
|
||||
target.ifEmpty.data = parameters:target
|
||||
# the target attribute takes precedence over the constant (styles.content.links.extTarget)
|
||||
# which takes precedence over config.extTarget
|
||||
# do not pass extTarget as reference, as it might not be set resulting in the string being
|
||||
# written to the target attribute
|
||||
extTarget.ifEmpty < config.extTarget
|
||||
extTarget.ifEmpty.override = {$styles.content.links.extTarget}
|
||||
extTarget.override.data = parameters:target
|
||||
}
|
||||
}
|
||||
}
|
||||
allowTags = {$styles.content.allowTags}
|
||||
denyTags = *
|
||||
sword = <span class="ce-sword">|</span>
|
||||
constants = 1
|
||||
nonTypoTagStdWrap {
|
||||
HTMLparser = 1
|
||||
HTMLparser {
|
||||
keepNonMatchedTags = 1
|
||||
htmlSpecialChars = 2
|
||||
}
|
||||
}
|
||||
htmlSanitize = 1
|
||||
}
|
||||
|
||||
|
||||
# Creates persistent ParseFunc setup for RTE content (which is mainly HTML) based on the "default" transformation.
|
||||
lib.parseFunc_RTE < lib.parseFunc
|
||||
lib.parseFunc_RTE {
|
||||
# Processing <ol>, <ul> and <table> blocks separately
|
||||
externalBlocks = article, aside, blockquote, div, dd, dl, footer, header, nav, ol, section, table, ul, pre
|
||||
externalBlocks {
|
||||
ol {
|
||||
stripNL = 1
|
||||
stdWrap.parseFunc = < lib.parseFunc
|
||||
}
|
||||
ul {
|
||||
stripNL = 1
|
||||
stdWrap.parseFunc = < lib.parseFunc
|
||||
}
|
||||
pre {
|
||||
stdWrap.parseFunc < lib.parseFunc
|
||||
}
|
||||
table {
|
||||
stripNL = 1
|
||||
stdWrap {
|
||||
HTMLparser = 1
|
||||
HTMLparser {
|
||||
tags.table.fixAttrib.class {
|
||||
default = contenttable
|
||||
always = 1
|
||||
list = contenttable
|
||||
}
|
||||
keepNonMatchedTags = 1
|
||||
}
|
||||
}
|
||||
HTMLtableCells = 1
|
||||
HTMLtableCells {
|
||||
# Recursive call to self but without wrapping non-wrapped cell content
|
||||
default.stdWrap {
|
||||
parseFunc = < lib.parseFunc_RTE
|
||||
parseFunc.nonTypoTagStdWrap.encapsLines.nonWrappedTag =
|
||||
}
|
||||
addChr10BetweenParagraphs = 1
|
||||
}
|
||||
}
|
||||
div {
|
||||
stripNL = 1
|
||||
callRecursive = 1
|
||||
}
|
||||
article < .div
|
||||
aside < .div
|
||||
blockquote < .div
|
||||
footer < .div
|
||||
header < .div
|
||||
nav < .div
|
||||
section < .div
|
||||
dl < .div
|
||||
dd < .div
|
||||
}
|
||||
nonTypoTagStdWrap {
|
||||
HTMLparser = 1
|
||||
HTMLparser {
|
||||
keepNonMatchedTags = 1
|
||||
htmlSpecialChars = 2
|
||||
}
|
||||
encapsLines {
|
||||
encapsTagList = p,pre,h1,h2,h3,h4,h5,h6,hr,dt
|
||||
remapTag.DIV = P
|
||||
nonWrappedTag = P
|
||||
innerStdWrap_all.ifBlank =
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,79 @@
|
||||
plugin.tx_frontend._CSS_DEFAULT_STYLE (
|
||||
.ce-align-left { text-align: left; }
|
||||
.ce-align-center { text-align: center; }
|
||||
.ce-align-right { text-align: right; }
|
||||
|
||||
.ce-table td, .ce-table th { vertical-align: top; }
|
||||
|
||||
.ce-textpic, .ce-image, .ce-nowrap .ce-bodytext, .ce-gallery, .ce-row, .ce-uploads li, .ce-uploads div { overflow: hidden; }
|
||||
|
||||
.ce-left .ce-gallery, .ce-column { float: left; }
|
||||
.ce-center .ce-outer { position: relative; float: right; right: 50%; }
|
||||
.ce-center .ce-inner { position: relative; float: right; right: -50%; }
|
||||
.ce-right .ce-gallery { float: right; }
|
||||
|
||||
.ce-gallery figure { display: table; margin: 0; }
|
||||
.ce-gallery figcaption { display: table-caption; caption-side: bottom; }
|
||||
.ce-gallery img { display: block; }
|
||||
.ce-gallery iframe { border-width: 0; }
|
||||
.ce-border img,
|
||||
.ce-border iframe {
|
||||
border: {$styles.content.textmedia.borderWidth}px solid {$styles.content.textmedia.borderColor};
|
||||
padding: {$styles.content.textmedia.borderPadding}px;
|
||||
}
|
||||
|
||||
.ce-intext.ce-right .ce-gallery, .ce-intext.ce-left .ce-gallery, .ce-above .ce-gallery {
|
||||
margin-bottom: {$styles.content.textmedia.textMargin}px;
|
||||
}
|
||||
.ce-intext.ce-right .ce-gallery { margin-left: {$styles.content.textmedia.textMargin}px; }
|
||||
.ce-intext.ce-left .ce-gallery { margin-right: {$styles.content.textmedia.textMargin}px; }
|
||||
.ce-below .ce-gallery { margin-top: {$styles.content.textmedia.textMargin}px; }
|
||||
|
||||
.ce-column { margin-right: {$styles.content.textmedia.columnSpacing}px; }
|
||||
.ce-column:last-child { margin-right: 0; }
|
||||
|
||||
.ce-row { margin-bottom: {$styles.content.textmedia.rowSpacing}px; }
|
||||
.ce-row:last-child { margin-bottom: 0; }
|
||||
|
||||
.ce-above .ce-bodytext { clear: both; }
|
||||
|
||||
.ce-intext.ce-left ol, .ce-intext.ce-left ul { padding-left: 40px; overflow: auto; }
|
||||
|
||||
/* Headline */
|
||||
.ce-headline-left { text-align: left; }
|
||||
.ce-headline-center { text-align: center; }
|
||||
.ce-headline-right { text-align: right; }
|
||||
|
||||
/* Uploads */
|
||||
.ce-uploads { margin: 0; padding: 0; }
|
||||
.ce-uploads li { list-style: none outside none; margin: 1em 0; }
|
||||
.ce-uploads img { float: left; padding-right: 1em; vertical-align: top; }
|
||||
.ce-uploads span { display: block; }
|
||||
|
||||
/* Table */
|
||||
.ce-table { width: 100%; max-width: 100%; }
|
||||
.ce-table th, .ce-table td { padding: 0.5em 0.75em; vertical-align: top; }
|
||||
.ce-table thead th { border-bottom: 2px solid #dadada; }
|
||||
.ce-table th, .ce-table td { border-top: 1px solid #dadada; }
|
||||
.ce-table-striped tbody tr:nth-of-type(odd) { background-color: rgba(0,0,0,.05); }
|
||||
.ce-table-bordered th, .ce-table-bordered td { border: 1px solid #dadada; }
|
||||
|
||||
/* Space */
|
||||
.frame-space-before-extra-small { margin-top: 1em; }
|
||||
.frame-space-before-small { margin-top: 2em; }
|
||||
.frame-space-before-medium { margin-top: 3em; }
|
||||
.frame-space-before-large { margin-top: 4em; }
|
||||
.frame-space-before-extra-large { margin-top: 5em; }
|
||||
.frame-space-after-extra-small { margin-bottom: 1em; }
|
||||
.frame-space-after-small { margin-bottom: 2em; }
|
||||
.frame-space-after-medium { margin-bottom: 3em; }
|
||||
.frame-space-after-large { margin-bottom: 4em; }
|
||||
.frame-space-after-extra-large { margin-bottom: 5em; }
|
||||
|
||||
/* Frame */
|
||||
.frame-ruler-before:before { content: ''; display: block; border-top: 1px solid rgba(0,0,0,0.25); margin-bottom: 2em; }
|
||||
.frame-ruler-after:after { content: ''; display: block; border-bottom: 1px solid rgba(0,0,0,0.25); margin-top: 2em; }
|
||||
.frame-indent { margin-left: 15%; margin-right: 15%; }
|
||||
.frame-indent-left { margin-left: 33%; }
|
||||
.frame-indent-right { margin-right: 33%; }
|
||||
)
|
||||
@@ -0,0 +1,60 @@
|
||||
styles.templates {
|
||||
# cat=content/templates/b1; type=string; label= Path of Fluid Templates for all defined content elements
|
||||
templateRootPath =
|
||||
# cat=content/templates/b2; type=string; label= Path of Fluid Partials for all defined content elements
|
||||
partialRootPath =
|
||||
# cat=content/templates/b3; type=string; label= Path of Fluid Layouts for all defined content elements
|
||||
layoutRootPath =
|
||||
}
|
||||
|
||||
styles.content {
|
||||
# cat=content/cHeader/h0; type=int[1-5]; label=Default Header type: Enter the number of the header layout to be used by default
|
||||
defaultHeaderType = 2
|
||||
|
||||
# cat=content/cShortcut/t0; type=string; label=List of accepted tables
|
||||
shortcut.tables = tt_content
|
||||
|
||||
# cat=content/parseFunc/a0; type=string; label=List of allowed HTML tags when rendering RTE content
|
||||
allowTags = a, abbr, acronym, address, article, aside, b, bdo, big, blockquote, br, caption, center, cite, code, col, colgroup, dd, del, dfn, dl, div, dt, em, font, footer, header, h1, h2, h3, h4, h5, h6, hr, i, img, ins, kbd, label, li, link, meta, nav, ol, p, pre, q, s, samp, sdfield, section, small, span, strike, strong, style, sub, sup, table, thead, tbody, tfoot, td, th, tr, title, tt, u, ul, var
|
||||
|
||||
textmedia {
|
||||
# cat=content/cTextmedia/b1; type=int+; label= Max Image/Media Width: This indicates that maximum number of pixels (width) a block of media elements inserted as content is allowed to consume
|
||||
maxW = 600
|
||||
# cat=content/cTextmedia/b2; type=int+; label= Max Image/Media Width (Text): Same as above, but this is the maximum width when text is wrapped around an block of media elements. Default is 50% of the normal Max Media Item Width
|
||||
maxWInText = 300
|
||||
|
||||
# cat=content/cTextmedia/g1; type=int[0-100]; label= Advanced, Column space: Horizontal distance between media elements in a block in content elements of type "Media & Images". If you change this manually in your CSS, you need to adjust this setting accordingly
|
||||
columnSpacing = 10
|
||||
# cat=content/cTextmedia/g2; type=int[0-100]; label= Advanced, Row space: Vertical distance after each media elements row in content elements of type ""Text & Media". If you change this manually in your CSS, you need to adjust this setting accordingly
|
||||
rowSpacing = 10
|
||||
# cat=content/cTextmedia/g3; type=int[0-100]; label= Advanced, Margin to text: Horizontal distance between an imageblock and text in content elements of type "Text & Images"
|
||||
textMargin = 10
|
||||
|
||||
# cat=content/cTextmedia/i1; type=color; label= Media element border, color: Bordercolor of media elements in content elements when "Border"-option for an element is set
|
||||
borderColor = #000000
|
||||
# cat=content/cTextmedia/i2; type=int[0-100]; label= Media element border, thickness: Thickness of border around media elements in content elements when "Border"-option for element is set
|
||||
borderWidth = 2
|
||||
# cat=content/cTextmedia/i3; type=int+; label= Media element border, padding: Padding left and right to the media element, around the border
|
||||
borderPadding = 0
|
||||
|
||||
# cat=content/cTextmedia/c1; type=string; label= Click-enlarge Media Width: This specifies the width of the enlarged media element when click-enlarge is enabled
|
||||
linkWrap.width = 800m
|
||||
# cat=content/cTextmedia/c2; type=string; label= Click-enlarge Media Height: This specifies the height of the enlarged media element when click-enlarge is enabled
|
||||
linkWrap.height = 600m
|
||||
# cat=content/cTextmedia/c3; type=boolean; label= Advanced, New window: If set, every click-enlarged media element will open in it's own popup window and not the current popup window (which may have a wrong size for the media element to fit in)
|
||||
linkWrap.newWindow = 0
|
||||
# cat=content/cTextmedia/c4; type=boolean; label= Lightbox click-enlarge rendering: Whether media elements with click-enlarge checked should be rendered lightbox-compliant
|
||||
linkWrap.lightboxEnabled = 0
|
||||
# cat=content/cTextmedia/c5; type=string; label= Lightbox CSS class: Which CSS class to use for lightbox links (only applicable if lightbox rendering is enabled)
|
||||
linkWrap.lightboxCssClass = lightbox
|
||||
# cat=content/cTextmedia/c6; type=string; label= Lightbox rel="" attribute: Which rel="" attribute to use for lightbox links (only applicable if lightbox rendering is enabled)
|
||||
linkWrap.lightboxRelAttribute = lightbox[{field:uid}]
|
||||
}
|
||||
|
||||
links {
|
||||
# cat=content/links/l2; type=small; label= Target for external links
|
||||
extTarget = _blank
|
||||
# cat=content/links/l3; type=string; label= Parts to keep when building links: Comma separated list of the link parts to show when building the link-text: scheme,path,query. Example: "" (empty) => www.example.com, "scheme,path" => http://www.example.com
|
||||
keep = path
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
# Include setup
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/Helper/ContentElement.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/Helper/ParseFunc.typoscript">
|
||||
|
||||
|
||||
# Content element rendering
|
||||
tt_content {
|
||||
stdWrap {
|
||||
# Setup the edit panel for all content elements
|
||||
editPanel = 1
|
||||
editPanel {
|
||||
allow = move, new, edit, hide, delete
|
||||
label = %s
|
||||
onlyCurrentPid = 1
|
||||
previewBorder = 1
|
||||
edit.displayRecord = 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Typical content elements
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/Bullets.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/Div.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/Header.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/Html.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/Image.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/List.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/Shortcut.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/Table.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/Text.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/Textmedia.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/Textpic.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/Uploads.typoscript">
|
||||
|
||||
|
||||
# Menu content elements
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/MenuAbstract.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/MenuCategorizedContent.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/MenuCategorizedPages.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/MenuPages.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/MenuSubpages.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/MenuSection.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/MenuSectionPages.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/MenuRecentlyUpdated.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/MenuRelatedPages.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/MenuSitemap.typoscript">
|
||||
<INCLUDE_TYPOSCRIPT: source="FILE:EXT:fluid_styled_content/Configuration/TypoScript/ContentElement/MenuSitemapPages.typoscript">
|
||||
@@ -0,0 +1,17 @@
|
||||
.. include:: ../Includes.txt
|
||||
|
||||
|
||||
.. _adding-your-own-content-elements:
|
||||
|
||||
================================
|
||||
Adding Your Own Content Elements
|
||||
================================
|
||||
|
||||
.. attention::
|
||||
|
||||
This page has been merged into :ref:`TYPO3 Explained <t3coreapi:adding-your-own-content-elements>`
|
||||
since core version 8.7.
|
||||
|
||||
**Older versions:**
|
||||
|
||||
Please refer to "Related Links" in the lower left corner of the page.
|
||||
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,47 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
|
||||
.. _constant-editor:
|
||||
|
||||
===============
|
||||
Constant Editor
|
||||
===============
|
||||
|
||||
The Constant Editor can be found in the module "Web > Template".
|
||||
|
||||
.. figure:: Images/WebTemplate.png
|
||||
:alt: Location of the Template module
|
||||
|
||||
Web > Template
|
||||
|
||||
Select the page in the page tree which contains the root template of your website. This is
|
||||
mostly the root page of your website as well.
|
||||
|
||||
.. figure:: Images/RootPage.png
|
||||
:alt: Location of the Root Page in the page tree
|
||||
|
||||
The Root Page in the page tree
|
||||
|
||||
Select "Constant Editor" in the dropdown at the top of the "Web > Template" module. This
|
||||
should show the root template of your website if it is available below the sentence
|
||||
"Edit constants for template".
|
||||
|
||||
.. figure:: Images/DropDown.png
|
||||
:alt: Location of the dropdown in the Template module
|
||||
|
||||
The dropdown in the template module
|
||||
|
||||
In the dropdown list "Category" select the category "Content".
|
||||
|
||||
.. figure:: Images/CategoryDropdown.png
|
||||
:alt: Location of the category dropdown in the Template module
|
||||
|
||||
The category dropdown in the template module
|
||||
|
||||
This will give you a list with all the constants of this extension. All constants are
|
||||
described and can be edited by clicking the pencil in front of the current value or by
|
||||
editing the available field.
|
||||
|
||||
Don't forget to save the new values afterwards by using the appropriate button at the top
|
||||
of the module. The new values will be stored in the "Constants" field of the root template
|
||||
of your website.
|
||||
@@ -0,0 +1,31 @@
|
||||
.. include:: ../Includes.txt
|
||||
|
||||
.. _configuration:
|
||||
|
||||
=============
|
||||
Configuration
|
||||
=============
|
||||
|
||||
Configuring content elements can be done for the frontend and for the backend.
|
||||
|
||||
The easiest way to change the appearance of content elements in the frontend is by using
|
||||
the "Constant Editor". These settings are global, which means they are not configurable in
|
||||
a single content element. Constants are predefined.
|
||||
|
||||
TYPO3 CMS is using TypoScript as a configuration language and is used by the frontend
|
||||
rendering. By overriding TypoScript you can influence the rendering of most of the
|
||||
frontend.
|
||||
|
||||
For the backend, fields can be shown or hidden, depending on the fields you are using or
|
||||
the fields an editor is allowed to use. Configuration like this is done using
|
||||
"Page TSconfig" or "User TSconfig".
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 5
|
||||
:titlesonly:
|
||||
:glob:
|
||||
|
||||
ConstantEditor/Index
|
||||
TypoScript/Index
|
||||
OverridingFluidTemplates/Index
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _overriding-fluid-templates:
|
||||
|
||||
==============================
|
||||
Overriding the FLUID templates
|
||||
==============================
|
||||
|
||||
At :ref:`typoscript` we have described the way content elements are rendered.
|
||||
|
||||
By default these settings are done in the file :file:`setup.typoscript` which can be found in the
|
||||
folder :file:`EXT:fluid_styled_content/Configuration/TypoScript/`.
|
||||
|
||||
|
||||
.. _overriding-fluid-templates-using-lib-fluidcontent:
|
||||
|
||||
Using lib.contentElement
|
||||
========================
|
||||
|
||||
This option gives you the possibility to add another `templateRootPath` and can be defined
|
||||
the same as `partialRootPaths` and `layoutRootPaths`:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
lib.contentElement {
|
||||
templateRootPaths {
|
||||
200 = EXT:your_extension_key/Resources/Private/Templates/
|
||||
}
|
||||
partialRootPaths {
|
||||
200 = EXT:your_extension_key/Resources/Private/Partials/
|
||||
}
|
||||
layoutRootPaths {
|
||||
200 = EXT:your_extension_key/Resources/Private/Layouts/
|
||||
}
|
||||
}
|
||||
|
||||
A content element is using a `templateName`, which is defined in :file:`setup.typoscript`. You
|
||||
can override this value, but the template from the extension "fluid_styled_content" will
|
||||
not be loaded then, since its name is still the default value.
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
tt_content {
|
||||
bullets {
|
||||
templateName = ChangedName
|
||||
}
|
||||
}
|
||||
|
||||
|
After Width: | Height: | Size: 77 KiB |
@@ -0,0 +1,95 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _typoscript:
|
||||
|
||||
==========
|
||||
TypoScript
|
||||
==========
|
||||
|
||||
At the section :ref:`using-the-rendering-definitions` you've already added the static
|
||||
templates. Static templates are a collection of TypoScript files. These files are located
|
||||
in the directory :file:`EXT:fluid_styled_content/Configuration/TypoScript/`.
|
||||
|
||||
.. figure:: Images/FileStructure.png
|
||||
:alt: Structure of the TypoScript files
|
||||
|
||||
Structure of the TypoScript files
|
||||
|
||||
In this folder there are two files:
|
||||
|
||||
- :file:`constants.typoscript` - The file with the default constants. The "Constant Editor", as
|
||||
described above, is using this file for its default settings.
|
||||
|
||||
- :file:`setup.typoscript` - This file will first include some other files which are located in
|
||||
the "Setup" folder in the same directory. More about these files later.
|
||||
|
||||
In the folder :file:`ContentElement` there are files which are included by the file
|
||||
:file:`setup.typoscript` as mentioned above. These files contain the rendering definitions of all
|
||||
content elements, that are provided by the TYPO3 core. These are:
|
||||
|
||||
- :file:`Bullets.typoscript` - Configuration for Content Element "Bullet List"
|
||||
|
||||
- :file:`Div.typoscript` - Configuration for Content Element "Divider"
|
||||
|
||||
- :file:`Header.typoscript` - Configuration for Content Element "Header Only"
|
||||
|
||||
- :file:`Html.typoscript` - Configuration for Content Element "Plain HTML"
|
||||
|
||||
- :file:`Image.typoscript` - Configuration for Content Element "Image"
|
||||
|
||||
- :file:`List.typoscript` - Configuration for Content Element "General Plugin"
|
||||
|
||||
- :file:`MenuAbstract.typoscript` - Configuration for Content Element "Menu of subpages of selected pages including abstracts"
|
||||
|
||||
- :file:`MenuCategorizedContent.typoscript` - Configuration for Content Element "Content elements for selected categories"
|
||||
|
||||
- :file:`MenuCategorizedPages.typoscript` - Configuration for Content Element "Pages for selected categories"
|
||||
|
||||
- :file:`MenuPages.typoscript` - Configuration for Content Element "Menu of selected pages"
|
||||
|
||||
- :file:`MenuRecentlyUpdated.typoscript` - Configuration for Content Element "Recently updated pages"
|
||||
|
||||
- :file:`MenuRelatedPages.typoscript` - Configuration for Content Element "Related pages (based on keywords)"
|
||||
|
||||
- :file:`MenuSection.typoscript` - Configuration for Content Element "Section index (page content marked for section menus)"
|
||||
|
||||
- :file:`MenuSectionPages.typoscript` - Configuration for Content Element "Menu of subpages of selected pages including sections"
|
||||
|
||||
- :file:`MenuSitemap.typoscript` - Configuration for Content Element "Sitemap"
|
||||
|
||||
- :file:`MenuSitemapPages.typoscript` - Configuration for Content Element "Sitemaps of selected pages"
|
||||
|
||||
- :file:`MenuSubpages.typoscript` - Configuration for Content Element "Menu of subpages of selected pages"
|
||||
|
||||
- :file:`Shortcut.typoscript` - Configuration for Content Element "Insert records"
|
||||
|
||||
- :file:`Table.typoscript` - Configuration for Content Element "Table"
|
||||
|
||||
- :file:`Text.typoscript` - Configuration for Content Element "Regular Text Element"
|
||||
|
||||
- :file:`Textmedia.typoscript` - Configuration for Content Element "Text and Media"
|
||||
|
||||
- :file:`Textpic.typoscript` - Configuration for Content Element "Text and Images"
|
||||
|
||||
- :file:`Uploads.typoscript` - Configuration for Content Element "File Links"
|
||||
|
||||
Since we move away from TypoScript as much as possible, these rendering
|
||||
definitions only declare the following:
|
||||
|
||||
- Can FLUIDTEMPLATE be used immediately or do we need data processing first?
|
||||
A processor is sometimes used to do some data manipulation before all the data is sent
|
||||
to the Fluid template.
|
||||
|
||||
- Assigning the Fluid template file for each type of content element separately.
|
||||
|
||||
- The configuration of the edit panel and the edit buttons for frontend editing. You
|
||||
need to activate the extension "Frontend Editing (feedit)" in the Extension Manager to
|
||||
see this in action.
|
||||
|
||||
In the folder :file:`Helper` there are files which are included by the file
|
||||
:file:`setup.typoscript` as mentioned above. These are:
|
||||
|
||||
- :file:`ContentElement.typoscript` - Default configuration for content elements using
|
||||
FLUIDTEMPLATE
|
||||
|
||||
- :file:`ParseFunc.typoscript` - Creates persistent ParseFunc setup for non-HTML content
|
||||
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 36 KiB |
@@ -0,0 +1,45 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _content-element-bullets:
|
||||
|
||||
===========
|
||||
Bullet list
|
||||
===========
|
||||
|
||||
.. figure:: Images/BackendFieldBodytext.png
|
||||
:alt: Backend display of the field for the Bullet list in the General tab
|
||||
|
||||
The field "Bullet list" in the "General" tab
|
||||
|
||||
With this content element you can provide unordered and ordered bullet lists, but also a
|
||||
definition list, in the frontend.
|
||||
|
||||
The content is added in the field "Bullet list", where each new line is a new bullet.
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
Bullet 1
|
||||
Bullet 2
|
||||
Bullet 3
|
||||
|
||||
For definition lists you use one line for a single definition which starts with the term,
|
||||
followed by the description, separated by a vertical bar "|".
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
Term 1|Description 1
|
||||
Term 2|Description 2
|
||||
Term 3|Description 3
|
||||
|
||||
.. figure:: Images/BackendTabAppearance.png
|
||||
:alt: Backend display of the Appearance tab
|
||||
|
||||
The "Appearance" tab
|
||||
|
||||
The type of list can be defined with the field "Type of bullets", available in the
|
||||
"Appearance" tab.
|
||||
|
||||
.. figure:: Images/Frontend.png
|
||||
:alt: Frontend rendering of the content element Bullet list
|
||||
|
||||
Frontend output, showing all three types of bullet lists.
|
||||
@@ -0,0 +1,10 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
|
||||
.. _content-element-div:
|
||||
|
||||
=======
|
||||
Divider
|
||||
=======
|
||||
|
||||
Nothing more than a horizontal rule.
|
||||
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,23 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _content-element-header:
|
||||
|
||||
======
|
||||
Header
|
||||
======
|
||||
|
||||
.. figure:: Images/BackendFields.png
|
||||
:alt: Backend display of the fields to configure the content element Header
|
||||
|
||||
The backend fields
|
||||
|
||||
The content element "Header" will render a header, which can be linked. There is the
|
||||
possibility to add a subheader and a date. The fields used for this content elements are
|
||||
the same as :ref:`content-elements-general-header`, but with a field for the subheader.
|
||||
|
||||
.. figure:: Images/Frontend.png
|
||||
:alt: Frontend rendering of the content element header, with a subheader and date
|
||||
grouped together
|
||||
|
||||
Frontend rendering of the content element header, with a subheader and date
|
||||
|
||||
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,15 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _content-element-html:
|
||||
|
||||
====
|
||||
HTML
|
||||
====
|
||||
|
||||
.. figure:: Images/BackendFieldsHtml.png
|
||||
:alt: Backend display of the fields for the HTML content element in the General tab
|
||||
|
||||
The fields for "HTML" in the "General" tab.
|
||||
|
||||
Insert HTML directly using this content element.
|
||||
|
||||
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
@@ -0,0 +1,142 @@
|
||||
.. include:: ../Includes.txt
|
||||
|
||||
.. _content-elements:
|
||||
|
||||
====================
|
||||
The content elements
|
||||
====================
|
||||
|
||||
This chapter will describe the basic set of content elements provided by the TYPO3 CMS
|
||||
core. It will show you a description, screenshots of the backend fields and a screenshot
|
||||
of the frontend rendering, only styled with the basic styling provided by the static
|
||||
template "Content Elements CSS (optional) (fluid_styled_content)" described in chapter
|
||||
:ref:`using-the-rendering-definitions`.
|
||||
|
||||
The screenshots of the fields are made with the extension configuration option
|
||||
"Show only a minimum set of editing fields" SET TO OFF as described in chapter
|
||||
:ref:`extension-manager-configuration`.
|
||||
|
||||
|
||||
.. _content-elements-general:
|
||||
|
||||
General fields
|
||||
==============
|
||||
|
||||
These are fields which are used by (almost) every content element.
|
||||
|
||||
|
||||
.. _content-elements-general-header:
|
||||
|
||||
Header
|
||||
------
|
||||
|
||||
.. figure:: Images/PaletteHeader.png
|
||||
:alt: The header fields in the backend
|
||||
|
||||
The header fields
|
||||
|
||||
Almost every content element can contain a header, which consists of the following parts:
|
||||
|
||||
Header
|
||||
The text of the header
|
||||
|
||||
Type
|
||||
The type of heading (heading 1, heading 2, heading 3 ... or if the header is hidden).
|
||||
When not choosing an option, the default heading will be used, which can be configured
|
||||
at :ref:`constant-editor`.
|
||||
|
||||
Date
|
||||
Have the possibility to group the header with a date
|
||||
|
||||
Link
|
||||
Link wrapping the header text. This can be a TYPO3 CMS page, an external page, an email
|
||||
address or a link to a file.
|
||||
|
||||
The header fields can be found in the "General" tab of a content element.
|
||||
|
||||
.. figure:: Images/LinkedHeaderAndDate.png
|
||||
:alt: Frontend rendering of a linked header with a date
|
||||
|
||||
Frontend rendering of a linked header with a date
|
||||
|
||||
|
||||
.. _content-elements-general-show-in-section-menus:
|
||||
|
||||
Show in section menu's
|
||||
----------------------
|
||||
|
||||
Using this option will only be visible when using menu's based on sections. This will be
|
||||
described in the chapter :ref:`content-element-menu`.
|
||||
|
||||
This field can be found in the *Appearance* tab.
|
||||
|
||||
.. figure:: Images/ShowInSectionMenus.png
|
||||
:alt: Backend display of the field to show the content element in section menu's
|
||||
|
||||
The field "Show In Section Menu's"
|
||||
|
||||
|
||||
.. _content-elements-general-link-to-top:
|
||||
|
||||
Append with Link to Top of Page
|
||||
-------------------------------
|
||||
|
||||
.. figure:: Images/AppendWithLinkToTopOfPage.png
|
||||
:alt: Backend display of the field to show a link to the top of the page
|
||||
|
||||
The field "Append with link to top of page"
|
||||
|
||||
When checked, this will render a link below the content element to bring the visitor the
|
||||
top of the page. This will be very convenient for your visitors when having long pages.
|
||||
|
||||
.. figure:: Images/FrontendToTop.png
|
||||
:alt: Frontend rendering of the To Top link
|
||||
|
||||
Frontend rendering of the To Top link
|
||||
|
||||
|
||||
.. _content-elements-general-access:
|
||||
|
||||
Access
|
||||
------
|
||||
|
||||
.. figure:: Images/Access.png
|
||||
:alt: Backend display of the Access tab
|
||||
|
||||
The Access tab with all its fields
|
||||
|
||||
These fields define if and when a visitor has access to this content element. The access
|
||||
fields all reside in the *Access* tab:
|
||||
|
||||
Visibility of content element
|
||||
By checking this option the content element will not be visible to any visitor.
|
||||
|
||||
Publish Date
|
||||
The date on which the content has to be published, which means making visible at a
|
||||
certain date.
|
||||
|
||||
Expiration Date
|
||||
The date on which the content will be expired, which means the content will be hidden
|
||||
on a certain date
|
||||
|
||||
Usergroup Access Rights
|
||||
Here you can select whether the content element only is available to a certain
|
||||
frontend user group, if it has to be visible only when the visitor is logged in or if
|
||||
it has to be hidden at a login.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 5
|
||||
:titlesonly:
|
||||
:glob:
|
||||
|
||||
Header/Index
|
||||
TextMedia/Index
|
||||
Bullets/Index
|
||||
Table/Index
|
||||
Uploads/Index
|
||||
Menu/Index
|
||||
Shortcut/Index
|
||||
List/Index
|
||||
Div/Index
|
||||
Html/Index
|
||||
|
||||
|
After Width: | Height: | Size: 41 KiB |
@@ -0,0 +1,19 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _content-element-list:
|
||||
|
||||
=============
|
||||
Insert plugin
|
||||
=============
|
||||
|
||||
.. figure:: Images/BackendTabPlugin.png
|
||||
:alt: Backend display of the fields for the Insert Plugin content element in the
|
||||
Plugin tab
|
||||
|
||||
The fields for "Insert Plugin" in the "Plugin" tab. This can be different for selected
|
||||
plugins.
|
||||
|
||||
Extensions sometimes provide plugins to render frontend output, but basically they are the
|
||||
same as content elements. When an extension depends on a plugin, select the plugin in this
|
||||
content element. The fields might change depending on the plugin.
|
||||
|
||||
|
After Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 36 KiB |
@@ -0,0 +1,75 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _content-element-menu:
|
||||
|
||||
=====
|
||||
Menus
|
||||
=====
|
||||
|
||||
In websites menus are often created outside the content element scope, because they have
|
||||
to reappear within every page. These could be the main menu, a sub menu, a bread crumb or
|
||||
a language menu. However, there are situations where you would like to create a menu
|
||||
specifically on one page. The following content elements will give you some options to render
|
||||
a menu. These available content elements are:
|
||||
|
||||
Menu of selected pages
|
||||
The menu consists of links to the selected pages in the TYPO3 CMS backend.
|
||||
|
||||
Menu of subpages of selected pages
|
||||
The menu consists of links to the subpages of the selected pages in the TYPO3 CMS
|
||||
backend.
|
||||
|
||||
Menu of subpages of selected pages including abstracts
|
||||
The same as above, but showing the abstract of these pages as well, when not empty.
|
||||
|
||||
Menu of subpages of selected pages including sections
|
||||
This will render a menu of the subpages of the selected pages. Below each subpage an
|
||||
extra menu will be showing the titles of content elements which belong to that certain
|
||||
subpage, which have the option "Show in Section Menus" in the Appearance tab enabled.
|
||||
This makes it possible for the website visitor to jump to the selected content element,
|
||||
within that page, immediately.
|
||||
|
||||
Sitemap
|
||||
Render a full sitemap of the website, starting at the root page.
|
||||
|
||||
Sitemaps of selected pages
|
||||
Render one or more sitemaps at once. The starting point of each site map will be a
|
||||
single selected page.
|
||||
|
||||
Section index (page content marked for section menus)
|
||||
Menu of content elements within the selected page, which have the option "Show in
|
||||
Section Menus" in the Appearance tab enabled. This makes it possible for the website
|
||||
visitor to jump to the selected content element, within that page, immediately.
|
||||
|
||||
Recently updated pages
|
||||
Shows a list of pages which are updated in the last 7 days. Updated does only mean a
|
||||
change in the page properties, not the content on the page.
|
||||
|
||||
Related pages (based on keywords)
|
||||
Shows a list of the selected page and all other pages, which have one or more keywords,
|
||||
entered in the page properties, in common.
|
||||
|
||||
Pages for selected categories
|
||||
Displays a menu of all pages which have been assigned one or more of the selected
|
||||
categories.
|
||||
|
||||
Content elements for selected categories
|
||||
Displays a menu of all content elements which have been assigned one or more of the
|
||||
selected categories.
|
||||
|
||||
The availability of links in each type of menu will depend on access rights. If a website
|
||||
visitor has no access to a certain part (with a frontend login), the link will not be
|
||||
shown.
|
||||
|
||||
.. figure:: Images/BackendFieldsMenuAndSitemap.png
|
||||
:alt: Backend display of the fields for the Menu in the General tab
|
||||
|
||||
The fields for "Menu and Sitemap" in the "General" tab
|
||||
|
||||
In case no pages are selected (in most options), the menu will be rendered from the
|
||||
current page where the menu is put on.
|
||||
|
||||
.. figure:: Images/Frontend.png
|
||||
:alt: Frontend example of a menu with type 'Menu of subpages of selected pages including sections'
|
||||
|
||||
Example of the frontend output of a menu
|
||||
|
After Width: | Height: | Size: 52 KiB |
@@ -0,0 +1,30 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _content-element-shortcut:
|
||||
|
||||
==============
|
||||
Insert Records
|
||||
==============
|
||||
|
||||
Ever have content on one page that you want on another one? But you don't want to have to
|
||||
maintain both, keeping them in sync? And you don't want to show the whole content from one
|
||||
page on another. Using insert records you can add one content element from a page or all
|
||||
the content elements from a page. You can also add content element from several pages.
|
||||
|
||||
.. figure:: Images/BackendFieldsRecords.png
|
||||
:alt: Backend display of the fields for the Insert Records content element in the General tab
|
||||
|
||||
The fields for "Insert Records" in the "General" tab
|
||||
|
||||
Just select the content elements you want to display and if necessary, put them in the
|
||||
right order.
|
||||
|
||||
In the frontend the referenced content elements will show up the same as the original one
|
||||
(if the styling is not different for that page)
|
||||
|
||||
.. note::
|
||||
|
||||
This is the only content element still using a bit of TypoScript in the rendering
|
||||
process. This is done because you can add different rendering for records from
|
||||
different tables. Take a look at :ts:`tt_content.shortcut.20`.
|
||||
|
||||
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 47 KiB |
|
After Width: | Height: | Size: 53 KiB |
@@ -0,0 +1,58 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _content-element-table:
|
||||
|
||||
=====
|
||||
Table
|
||||
=====
|
||||
|
||||
The "Table" content element allows to provide data as "comma separated values (CSV)", a
|
||||
plain text form of storing tabular data (numbers and text). This form is often used to
|
||||
move tabular data between two programs that natively operate on incompatible (often
|
||||
proprietary and/or undocumented) formats, like Microsoft Office Excel. These programs
|
||||
often provide CSV as an export method.
|
||||
|
||||
.. figure:: Images/BackendFieldsTable.png
|
||||
:alt: Backend display of the fields for the Table in the General tab
|
||||
|
||||
The "General" table settings
|
||||
|
||||
Each line in the field *Table content* represents a row in the table. Columns are
|
||||
separated by a *field delimiter*, which can be configured with the corresponding field.
|
||||
Columns can be enclosed by a character, configured in the field
|
||||
*Text enclosure*. This is especially helpful when you want to have newlines within a
|
||||
column. By default the *Field delimiter* is a vertical bar "|", the *Text enclosure* set
|
||||
to **none**.
|
||||
|
||||
.. code-block:: none
|
||||
|
||||
row 1 column 1|row 1 column 2|row 1 column 3
|
||||
row 2 column 1|row 2 column 2|row 2 column 3
|
||||
row 3 column 1|row 3 column 2|row 3 column 3
|
||||
|
||||
A *Table caption* can be provided as a heading for the table.
|
||||
|
||||
.. figure:: Images/BackendTabAppearance.png
|
||||
:alt: Backend display of the Appearance tab
|
||||
|
||||
The "Appearance" tab
|
||||
|
||||
Also some appearance options are available for the table. These can be found in the
|
||||
*Appearance* tab:
|
||||
|
||||
Columns
|
||||
The maximum amount of columns. Even when more columns are defined in the
|
||||
*Table content* field, the table will only show the maximum amount of columns.
|
||||
|
||||
Table header position
|
||||
The first row or the first column can be used as a table header.
|
||||
|
||||
Use table footer
|
||||
The last row will be used to group the table’s footer area (which may be a summary, an
|
||||
addition of column values, or some call to action based on the preceding content).
|
||||
|
||||
.. figure:: Images/Frontend.png
|
||||
:alt: Frontend rendering of two tables, one with a header position on top, the other one on the left
|
||||
|
||||
Frontend output, showing the different options of "Table header position"
|
||||
|
||||
|
After Width: | Height: | Size: 232 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 231 KiB |
@@ -0,0 +1,43 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _content-element-textmedia:
|
||||
|
||||
============
|
||||
Text & Media
|
||||
============
|
||||
|
||||
This content element allows to combine text and media elements, like images and/or movies.
|
||||
|
||||
The text can be entered in the Rich Text Editor (RTE) on the "General" tab.
|
||||
|
||||
.. figure:: Images/BackendFieldsRte.png
|
||||
:alt: Backend display of the fields for the Rich Text Editor in the General tab
|
||||
|
||||
The Rich Text Editor (RTE) in the "General" tab
|
||||
|
||||
The media elements can be added in the "Media" tab. In this tab there is also the option
|
||||
to turn the "enlarge on click" behaviour on for images.
|
||||
|
||||
.. figure:: Images/BackendTabMedia.png
|
||||
:alt: Backend display of the Media tab
|
||||
|
||||
The "Media" tab
|
||||
|
||||
Multiple images and movies are combined as a gallery, which can be configured using the
|
||||
"Appearance" tab. Options there are specific width or height for each element, if a border
|
||||
should be shown around each element, the position of the gallery in relation to the text
|
||||
and the amount of columns which should be used for the gallery.
|
||||
|
||||
.. figure:: Images/BackendTabAppearance.png
|
||||
:alt: Backend display of the Appearance tab
|
||||
|
||||
The "Appearance" tab
|
||||
|
||||
The maximum width of the gallery can be different when the gallery is on top or bottom of
|
||||
the text, or inside the text. This can be set using the :ref:`constant-editor`:
|
||||
|
||||
.. figure:: Images/Frontend.png
|
||||
:alt: Frontend rendering of the content element Text & Media
|
||||
|
||||
Frontend output, using one image aligned left of the text. The text is wrapping the
|
||||
image.
|
||||
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 45 KiB |
@@ -0,0 +1,50 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _content-element-uploads:
|
||||
|
||||
==========
|
||||
File links
|
||||
==========
|
||||
|
||||
This content element gives you the opportunity to offer downloadable files to the visitors
|
||||
of your website.
|
||||
|
||||
.. figure:: Images/BackendFieldsFiles.png
|
||||
:alt: Backend display of the fields for the File links in the General tab
|
||||
|
||||
The "General" file links fields
|
||||
|
||||
You can add or select single files but also use a file collection. A file collection can
|
||||
be one of the following:
|
||||
|
||||
- A static selection of files
|
||||
- A folder within a storage, holding the files
|
||||
- A file selection by category
|
||||
|
||||
When combining both methods, single files and file collections, all files from these
|
||||
methods will be presented to the website visitor.
|
||||
|
||||
.. figure:: Images/BackendTabAppearance.png
|
||||
:alt: Backend display of the Appearance tab for the File links
|
||||
|
||||
The "Appearance" settings for file links
|
||||
|
||||
In the "Appearance" tab you will find several options how the files will be presented:
|
||||
|
||||
Display file/icon/thumbnail
|
||||
In this dropdown you can select if you only want to show the file name, the file name
|
||||
and a corresponding icon, based on the file extension, or the file name with a
|
||||
thumbnail, if it is possible for TYPO3 CMS to generate a thumbnail from the file.
|
||||
|
||||
Display file size information
|
||||
Will show the file size calculated from the amount of bytes and presented as a human
|
||||
readable string with the proper unit (B, KB, MB ...).
|
||||
|
||||
Display description
|
||||
Will display the description of each file, if available.
|
||||
|
||||
.. figure:: Images/Frontend.png
|
||||
:alt: Frontend rendering of a file, with thumbnail, description and file size set
|
||||
|
||||
Frontend output of a file, with thumbnail, description and file size set
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
.. This is 'Includes.txt'. It is included at the very top of each and
|
||||
.. every ReST source file in this documentation project (= manual).
|
||||
|
||||
.. role:: typoscript(code)
|
||||
|
||||
.. role:: ts(typoscript)
|
||||
:class: typoscript
|
||||
|
||||
.. role:: php(code)
|
||||
|
||||
.. highlight:: php
|
||||
|
||||
.. default-role:: code
|
||||
@@ -0,0 +1,58 @@
|
||||
.. include:: Includes.txt
|
||||
|
||||
|
||||
.. _start:
|
||||
|
||||
===============================
|
||||
Content Elements based on Fluid
|
||||
===============================
|
||||
|
||||
:Extension key:
|
||||
fluid_styled_content
|
||||
|
||||
:Version:
|
||||
|release|
|
||||
|
||||
:Language:
|
||||
en
|
||||
|
||||
:Description:
|
||||
Frontend rendering for TYPO3 CMS.
|
||||
|
||||
:Keywords:
|
||||
frontend, content, fluid
|
||||
|
||||
:Copyright:
|
||||
2015-2021
|
||||
|
||||
:Author:
|
||||
TYPO3 CMS Core Development Team
|
||||
|
||||
:License:
|
||||
Open Content License available from http://www.opencontent.org/opl.shtml
|
||||
|
||||
:Rendered:
|
||||
|today|
|
||||
|
||||
The content of this document is related to TYPO3,
|
||||
a GNU/GPL CMS/Framework available from http://typo3.org
|
||||
|
||||
.. only:: html
|
||||
|
||||
.. tip::
|
||||
|
||||
:ref:`Sitemap`
|
||||
|
||||
**Table of Contents**
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 5
|
||||
:titlesonly:
|
||||
:glob:
|
||||
|
||||
Introduction/Index
|
||||
Installation/Index
|
||||
Configuration/Index
|
||||
ContentElements/Index
|
||||
AddingYourOwnContentElements/Index
|
||||
Targets
|
||||
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 82 KiB |
@@ -0,0 +1,45 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _extension-manager:
|
||||
|
||||
=================
|
||||
Extension Manager
|
||||
=================
|
||||
|
||||
The extension is a system extension and is installed by default.
|
||||
|
||||
.. figure:: Images/ExtensionManager.png
|
||||
:alt: fluid_styled_content in the Extension Manager
|
||||
|
||||
"fluid_styled_content" is installed by default in the Extension Manager
|
||||
|
||||
|
||||
.. _extension-manager-configuration:
|
||||
|
||||
Configuration
|
||||
=============
|
||||
|
||||
In the extension manager you have the possibility to configure the extension. Click on the
|
||||
name of the extension or click the "cogwheel" icon under "Actions" behind the extension
|
||||
name.
|
||||
|
||||
.. figure:: Images/ConfigurationButton.png
|
||||
:alt: Location of the configuration button in the Extension Manager
|
||||
|
||||
The location of the "cogwheel" icon under "Actions"
|
||||
|
||||
At the configuration screen you will find the next configuration options:
|
||||
|
||||
- **Load Page TSconfig with "New Content Element Wizard" definitions. The definitions can also**
|
||||
**be loaded manually by including it in a page.** - When this option is selected, the PageTSconfig
|
||||
of the extension is automatically included and does not need to be included manually. Use this
|
||||
if you have a TYPO3 installation that uses `fluid_styled_content` everywhere without exception.
|
||||
|
||||
.. figure:: Images/Configuration.png
|
||||
:alt: The configuration options in the Extension Manager
|
||||
|
||||
The configuration options in the Extension manager
|
||||
|
||||
When you are done configuring the extension, you can store your preferences by clicking
|
||||
the "Save" (you will stay at the configuration screen) or "Save and Close" button (you
|
||||
will be redirected to the extension list).
|
||||
@@ -0,0 +1,19 @@
|
||||
.. include:: ../Includes.txt
|
||||
|
||||
.. _installation:
|
||||
|
||||
============
|
||||
Installation
|
||||
============
|
||||
|
||||
This chapter describes the installation process.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 5
|
||||
:titlesonly:
|
||||
:glob:
|
||||
|
||||
ExtensionManager/Index
|
||||
Upgrading/Index
|
||||
UsingTheRenderingDefinitions/Index
|
||||
InsertingContentPageTemplate/Index
|
||||
@@ -0,0 +1,103 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _inserting-content-page-template:
|
||||
|
||||
=======================================
|
||||
Inserting content in your page template
|
||||
=======================================
|
||||
|
||||
To get the different columns from the backend displayed in the frontend you can use
|
||||
predefined CONTENT objects. Depending on the page templating you are using you would do
|
||||
something in your TypoScript template like the following examples.
|
||||
|
||||
|
||||
.. _inserting-content-page-template-template:
|
||||
|
||||
Based on the TEMPLATE content object (cObj)
|
||||
===========================================
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
page = PAGE
|
||||
page {
|
||||
10 = TEMPLATE
|
||||
10 {
|
||||
file = your/html/template.html
|
||||
subparts {
|
||||
MAIN_CONTENT = CONTENT
|
||||
MAIN_CONTENT {
|
||||
table = tt_content
|
||||
select {
|
||||
orderBy = sorting
|
||||
where = {#colPos}=0
|
||||
languageField = sys_language_uid
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.. _inserting-content-page-template-fluidtemplate:
|
||||
|
||||
Based on the FLUIDTEMPLATE content object (cObj)
|
||||
================================================
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
lib.dynamicContent = COA
|
||||
lib.dynamicContent {
|
||||
10 = LOAD_REGISTER
|
||||
10.colPos.cObject = TEXT
|
||||
10.colPos.cObject {
|
||||
field = colPos
|
||||
ifEmpty.cObject = TEXT
|
||||
ifEmpty.cObject {
|
||||
value.current = 1
|
||||
ifEmpty = 0
|
||||
}
|
||||
}
|
||||
20 = CONTENT
|
||||
20 {
|
||||
table = tt_content
|
||||
select {
|
||||
orderBy = sorting
|
||||
where = colPos={register:colPos}
|
||||
where.insertData = 1
|
||||
}
|
||||
}
|
||||
90 = RESTORE_REGISTER
|
||||
}
|
||||
|
||||
page = PAGE
|
||||
page {
|
||||
10 = FLUIDTEMPLATE
|
||||
10 {
|
||||
templateName = Default
|
||||
templateRootPaths {
|
||||
0 = EXT:example_package/Resources/Private/Templates/Page/
|
||||
}
|
||||
partialRootPaths {
|
||||
0 = EXT:example_package/Resources/Private/Partials/Page/
|
||||
}
|
||||
layoutRootPaths {
|
||||
0 = EXT:example_package/Resources/Private/Layouts/Page/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<f:layout name="Default" />
|
||||
<f:section name="Main">
|
||||
|
||||
<f:cObject typoscriptObjectPath="lib.dynamicContent" data="{colPos: '0'}" />
|
||||
|
||||
</f:section>
|
||||
|
||||
|
||||
.. seealso::
|
||||
|
||||
See the note about the removal of the predefined CONTENT objects like
|
||||
:typoscript:`styles.content.get` at :ref:`upgrading`.
|
||||
|
||||
|
After Width: | Height: | Size: 53 KiB |
@@ -0,0 +1,58 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _upgrading:
|
||||
|
||||
=========
|
||||
Upgrading
|
||||
=========
|
||||
|
||||
If you upgrade your TYPO3 CMS installation from one major version to another (for example
|
||||
7.6 to 8.7), it is advised to run the Upgrade Wizards. They guide you through the
|
||||
necessary steps to upgrade your database records or explicitly install extensions that
|
||||
ship with the latest TYPO3 CMS version.
|
||||
|
||||
Some database fields of the table tt_content are no longer used, the fields of FlexForms
|
||||
have been moved to proper database fields. To make sure you do not lose any information
|
||||
or the content elements look differently on your upgraded website run these Upgrade Wizards.
|
||||
|
||||
The upgrade wizards can be found in the Install tool.
|
||||
|
||||
.. figure:: Images/UpgradeWizard.png
|
||||
:alt: Location of the Upgrade Wizard in the Install Tool
|
||||
|
||||
Upgrade Wizard
|
||||
|
||||
.. attention::
|
||||
|
||||
The predefined CONTENT objects :ts:`styles.content.getLeft`,
|
||||
:ts:`styles.content.getRight` and :ts:`styles.content.getBorder` are not
|
||||
provided anymore. :ts:`styles.content.get` still exists for your convenience. Most of
|
||||
the current websites are using "backend layouts", where the predefined numbering of the
|
||||
columns does not make sense.
|
||||
|
||||
|
||||
.. tip::
|
||||
|
||||
If you are still using the predefined CONTENT objects, you can use the following
|
||||
TypoScript:
|
||||
|
||||
.. code-block:: typoscript
|
||||
|
||||
styles.content {
|
||||
|
||||
# get content, left
|
||||
getLeft < styles.content.get
|
||||
getLeft.select.where = {#colPos}=1
|
||||
|
||||
# get content, right
|
||||
getRight < styles.content.get
|
||||
getRight.select.where = {#colPos}=2
|
||||
|
||||
# get content, border
|
||||
getBorder < styles.content.get
|
||||
getBorder.select.where = {#colPos}=3
|
||||
|
||||
# get news
|
||||
getNews < styles.content.get
|
||||
getNews.select.pidInList = {$styles.content.getNews.newsPid}
|
||||
}
|
||||
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,65 @@
|
||||
.. include:: ../../Includes.txt
|
||||
|
||||
.. _using-the-rendering-definitions:
|
||||
|
||||
===============================
|
||||
Using the rendering definitions
|
||||
===============================
|
||||
|
||||
To use the default rendering definitions "fluid_styled_content" provides, you have to add
|
||||
the static template to your TypoScript template. Go to the module "Web > Template":
|
||||
|
||||
.. figure:: Images/WebTemplate.png
|
||||
:alt: Location of the Template module
|
||||
|
||||
Web > Template
|
||||
|
||||
In the page tree select the page which contains the root template of your website. This is
|
||||
mostly the root page of your website as well:
|
||||
|
||||
.. figure:: Images/RootPage.png
|
||||
:alt: Location of the Root Page in the page tree
|
||||
|
||||
The Root Page in the page tree
|
||||
|
||||
Select "Info/Modify" in the dropdown at the top of the "Web > Template" module. This
|
||||
should show you the root template of your website if it is available:
|
||||
|
||||
.. figure:: Images/DropDown.png
|
||||
:alt: Location of the dropdown in the Template module
|
||||
|
||||
The dropdown in the template module
|
||||
|
||||
Select ``Edit the whole template record`` at the bottom. This will open all the settings
|
||||
of the root template:
|
||||
|
||||
.. figure:: Images/EditWholeTemplate.png
|
||||
:alt: Location of the link to edit the whole template in the Template module
|
||||
|
||||
Edit the whole template record
|
||||
|
||||
Click on the tab "Includes" and select "Content Elements (fluid_styled_content)" in the part
|
||||
"Available items" under "Include static (from extensions)". The selection will move to the
|
||||
"Selected items":
|
||||
|
||||
.. figure:: Images/IncludesOne.png
|
||||
:alt: The Include tab and the available items in Include Static
|
||||
|
||||
Including a static template from an extension
|
||||
|
||||
TYPO3 CMS is now using the rendering definitions of "fluid_styled_content" for the basic set of
|
||||
content elements. This is basically unstyled HTML5 markup.
|
||||
|
||||
Unless you know what you are doing also include "Content Elements CSS (optional)
|
||||
(fluid_styled_content)". Some CSS styling will be added to the output of your page to make sure all
|
||||
the parts of a content elements have basic styling, like alignment and position. The
|
||||
styling will not add any colors, do font changes or similar which should be related to
|
||||
your website styles. This static include is optional, because some integrators want to
|
||||
override even the basic styling.
|
||||
|
||||
.. figure:: Images/IncludesBoth.png
|
||||
:alt: Inclusion of both static templates from the extension frontend
|
||||
|
||||
Including the static template for CSS styling
|
||||
|
||||
Save the template by using the appropriate button at the top of the module.
|
||||
@@ -0,0 +1,73 @@
|
||||
.. include:: ../Includes.txt
|
||||
|
||||
.. _introduction:
|
||||
|
||||
============
|
||||
Introduction
|
||||
============
|
||||
|
||||
.. _what-does-it-do:
|
||||
|
||||
What does it do?
|
||||
================
|
||||
|
||||
The extension "fluid_styled_content" handles the rendering of the default set of content elements
|
||||
shipped with the core by using the template engine "fluid".
|
||||
|
||||
"fluid_styled_content" provides a basic set of content elements which you can use for your
|
||||
website. These can be used out-of-the-box, but can be adapted to your or your client
|
||||
needs. You are not bound to using only these content elements. For custom made
|
||||
functionality it is possible to add extra content elements to the basic set. How to adapt,
|
||||
enhance or add content elements will be described in this document.
|
||||
|
||||
The rendering of the provided set of content elements is based on HTML5. Nowadays most of
|
||||
the websites are built with this core technology markup language used for
|
||||
structuring and presenting content in the World Wide Web. If your website is using
|
||||
another markup, like HTML4 or XHTML, it is easy to exchange the provided templates with
|
||||
your own.
|
||||
|
||||
|
||||
.. _history:
|
||||
|
||||
A little bit of history
|
||||
=======================
|
||||
|
||||
At the beginning of TYPO3 CMS content elements were rendered by the static template called
|
||||
*content (default)*. This was mainly based on font-tags for styling and tables for
|
||||
positioning which was needed to achieve the visual constructions in old versions of web
|
||||
browsers.
|
||||
|
||||
Some time later the extension "css_styled_content" was introduced, which focused on
|
||||
reducing the amount of TypoScript and providing XHTML/HTML5 markup which could be styled
|
||||
by Cascading Style Sheets (CSS), a style sheet language used for describing the look and
|
||||
formatting of a document written in a markup language. Still this extension was heavily
|
||||
based on TypoScript and did allow custom modifications up to some point.
|
||||
|
||||
Since the introduction of the templating engine Fluid, more websites are using this for
|
||||
page templating. Newer TYPO3 CMS packages (extensions) are also using Fluid as their base
|
||||
templating engine. The content elements which were provided with TYPO3 CMS by default were
|
||||
still using TypoScript and partly PHP code.
|
||||
|
||||
Since TYPO3 CMS version 7.5 the default content elements have been moved to this
|
||||
extension **fluid_styled_content**, also using Fluid as their templating engine. The benefits are that
|
||||
hardly any knowledge of TypoScript is needed to make changes. Integrators can easily
|
||||
exchange the base content element Fluid templates with their own. In Fluid more complex
|
||||
functionality that exceed the simple output of values has to be implemented with
|
||||
ViewHelpers. Every ViewHelper has its own PHP class. Several basic ViewHelpers are
|
||||
provided by Fluid. When using your own Fluid templates, developers can add extra
|
||||
functionality with their own ViewHelpers, extending the possibilities of the content
|
||||
elements.
|
||||
|
||||
|
||||
.. _support:
|
||||
|
||||
Support
|
||||
=======
|
||||
|
||||
Please see/report problems on TYPO3 Forge
|
||||
`https://forge.typo3.org/projects/typo3cms-core/issues
|
||||
<https://forge.typo3.org/projects/typo3cms-core/issues>`_
|
||||
under category content rendering.
|
||||
|
||||
You may get support in the use of this extension by subscribing to
|
||||
`https://forum.typo3.org/index.php/f/41/ <https://forum.typo3.org/index.php/f/41/>`_ .
|
||||
@@ -0,0 +1,41 @@
|
||||
[general]
|
||||
|
||||
; endless list of all of the general simple settings
|
||||
; you can use in 'conf.py'
|
||||
|
||||
project = Content Elements based on Fluid (fluid_styled_content)
|
||||
version = latest (9-dev)
|
||||
release = latest (9-dev)
|
||||
t3author = TYPO3 Core Team + Contributors, TYPO3 Documentation Team
|
||||
copyright = 2015-2021
|
||||
|
||||
description = This documentation is about TYPO3's system extension
|
||||
"fluid_styled_content" which provides content elements and uses Fluid to render
|
||||
frontend output.
|
||||
|
||||
[html_theme_options]
|
||||
|
||||
; for theme t3SphinxThemeRtd
|
||||
|
||||
# Add 'Edit me on Github' button
|
||||
github_branch = master
|
||||
github_repository = typo3/typo3
|
||||
path_to_documentation_dir = typo3/sysext/fluid_styled_content/Documentation
|
||||
|
||||
# show as related links
|
||||
|
||||
project_contact =
|
||||
project_discussions = http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-project-content-rendering
|
||||
project_home = https://forge.typo3.org/projects/typo3cms-core
|
||||
project_issues = https://forge.typo3.org/projects/typo3cms-core/issues
|
||||
project_repository = https://github.com/typo3/typo3
|
||||
use_opensearch =
|
||||
|
||||
|
||||
[intersphinx_mapping]
|
||||
|
||||
# These are common mappings. Uncomment only what you really use!
|
||||
#
|
||||
# see https://docs.typo3.org/m/typo3/docs-how-to-document/master/en-us/GeneralConventions/DirectoryFilenames.html#intersphinx-mapping
|
||||
|
||||
t3coreapi = https://docs.typo3.org/m/typo3/reference-coreapi/9.5/en-us/
|
||||
@@ -0,0 +1,14 @@
|
||||
:orphan:
|
||||
|
||||
.. include:: Includes.txt
|
||||
|
||||
.. only:: html
|
||||
|
||||
.. _Sitemap:
|
||||
|
||||
Sitemap
|
||||
=======
|
||||
|
||||
.. toctree::
|
||||
|
||||
Index
|
||||
@@ -0,0 +1,10 @@
|
||||
.. include:: Includes.txt
|
||||
|
||||
.. _labels-for-crossreferencing:
|
||||
|
||||
============================
|
||||
Labels for cross-referencing
|
||||
============================
|
||||
|
||||
.. ref-targets-list::
|
||||
|
||||
@@ -0,0 +1,345 @@
|
||||
Some icons used in the TYPO3 project are retrieved from the "Silk" icon set of
|
||||
Mark James, which can be found at http://famfamfam.com/lab/icons/silk/. This
|
||||
set is distributed under a Creative Commons Attribution 2.5 License. The
|
||||
license can be found at http://creativecommons.org/licenses/by/2.5/.
|
||||
---------------------------------
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xliff version="1.0" xmlns:t3="http://typo3.org/schemas/xliff">
|
||||
<file t3:id="1428662501" source-language="en" datatype="plaintext" original="EXT:fluid_styled_content/Resources/Private/Language/FrontendEditing.xlf" date="2014-02-07T20:22:32Z" product-name="fluid_styled_content">
|
||||
<header/>
|
||||
<body>
|
||||
<trans-unit id="editIcon.bullets" resname="editIcon.bullets">
|
||||
<source>Edit bullet list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="editIcon.header" resname="editIcon.header">
|
||||
<source>Edit header</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="editIcon.html" resname="editIcon.html">
|
||||
<source>Edit pure HTML content</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="editIcon.list" resname="editIcon.list">
|
||||
<source>Change/configure plugin</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="editIcon.menu" resname="editIcon.menu">
|
||||
<source>Edit menu/sitemap</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="editIcon.shortcut" resname="editIcon.shortcut">
|
||||
<source>Edit record list</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="editIcon.table" resname="editIcon.table">
|
||||
<source>Edit table</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="editIcon.image" resname="editIcon.image">
|
||||
<source>Edit image</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="editIcon.textmedia" resname="editIcon.textmedia">
|
||||
<source>Edit text & media</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="editIcon.textpic" resname="editIcon.textpic">
|
||||
<source>Edit text & images</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="editIcon.uploads" resname="editIcon.uploads">
|
||||
<source>Edit file list</source>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
</xliff>
|
||||