TYPO3 Gridelements рендерит FAL изображение с помощью Fluidtemplate
Я использую TYPO3 8.7
и последнее расширение gridelements
(8.2.3). Теперь я хочу показать / отобразить изображение в моем FLUIDTEMPLATE
.. - но я не знаю как?!?
Вот мой TypoScript:
tt_content {
gridelements_pi1 = COA
gridelements_pi1 {
20 {
10 {
setup {
SectionColoured < lib.gridelements.defaultGridSetup
SectionColoured {
cObject = FLUIDTEMPLATE
cObject {
file = EXT:myext/.../SectionColoured.html
}
}
}
}
}
}
}
Теперь я загружаю изображение (например, background-image) через flexforms, например так:
<backgroundimage type="array">
<TCEforms type="array">
<label>LLL:EXT:autefa/Resources/Private/Language/backend.xlf:gridelements.SectionColoured.flexforms.backgroundimage</label>
<config type="array">
<type>inline</type>
<maxitems>1</maxitems>
<foreign_table>sys_file_reference</foreign_table>
<!--<foreign_field>uid_foreign</foreign_field>-->
<foreign_table_field>tablenames</foreign_table_field>
<foreign_label>uid_local</foreign_label>
<foreign_sortby>sorting_foreign</foreign_sortby>
<foreign_selector>uid_local</foreign_selector>
<foreign_selector_fieldTcaOverride type="array">
<config>
<appearance>
<elementBrowserType>file</elementBrowserType>
<elementBrowserAllowed>jpg,png</elementBrowserAllowed>
</appearance>
</config>
</foreign_selector_fieldTcaOverride>
<foreign_match_fields type="array">
<fieldname>image</fieldname>
</foreign_match_fields>
<appearance type="array">
<newRecordLinkAddTitle>1</newRecordLinkAddTitle>
<headerThumbnail>
<field>uid_local</field>
<height>64</height>
<width>64</width>
</headerThumbnail>
</appearance>
</config>
</TCEforms>
</backgroundimage>
Это работает до сих пор. Как я могу использовать изображение в моей FLUIDTEMPLATE? Отладчик возвращает 12
на {data.flexform_backgroundimage}
?!
<f:debug>{data.flexform_backgroundimage}</f:debug>
<section class="main-content {data.flexform_farbe}">
<article>
<f:format.raw>{data.tx_gridelements_view_columns.101}</f:format.raw>
</article>
</section>
отлаживать {data}
.. Спасибо за вашу помощь!
pi_flexform => array(1 item)
data => array(1 item)
general => array(1 item)
lDEF => array(2 items)
farbe => array(1 item)
backgroundimage => array(1 item)
vDEF => '12' (2 chars)
4 ответа
Это забавно. Если я попробую это с помощью TYPO3 Fluid ViewHelper:
<section style="background-image:url({f:uri.image(src: '{data.flexform_backgroundimage}', treatIdAsReference: 1)})">
<article>
<f:format.raw>{data.tx_gridelements_view_columns.100}</f:format.raw>
</article>
</section>
Я получу ошибку You must either specify a string src or a File object.
Сейчас пользуюсь vhs
:
{namespace v=FluidTYPO3\Vhs\ViewHelpers}
<section style="background-image:url({v:uri.image(src: '{data.flexform_backgroundimage}', treatIdAsReference: 1)})">
<article>
<f:format.raw>{data.tx_gridelements_view_columns.100}</f:format.raw>
</article>
</section>
И все работает.. вот ссылка на вспомогательный вид vhs
расширение. Спасибо за помощь, ребята!
Поскольку FAL работает с записями, а не с простыми текстовыми путями к изображению, вы должны использовать идентификатор записи, чтобы получить фактический файл изображения.
Так как я не уверен на 100%, вы должны проверить, является ли 12 идентификатором записи sys_file_reference или записи sys_file, используемой для этого конкретного изображения, прежде чем использовать обычный вид
https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Image.html
Если вам нужен только путь к изображению, а не тег изображения, вы должны использовать вместо него
https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Uri/Image.html
Это должно работать для вас:
<f:uri.image src="{data.flexform_backgroundimage}" treatIdAsReference="1"/>
Вот как я это сделал некоторое время назад, используя media
поле tt_content
вместо использования flexform. Это решение предполагает, что
а) вы используете расширение "поставщик внешнего интерфейса" (EXT:yourext), в котором хранятся ваши TypoScript и шаблоны Fluid
б) EXT: ваш текст зависит от EXT: gridelements
c) В этом примере мой объект gridelement называется twocolumnscontainer
1) Константы TS: используйте EXT:yourext в качестве альтернативного пути для шаблонов, макетов, партиалов
styles.templates.templateRootPath = EXT:yourext/Resources/Private/Templates/ContentElements/
styles.templates.partialRootPath = EXT:yourext/Resources/Private/Partials/ContentElements/
styles.templates.layoutRootPath = EXT:yourext/Resources/Private/Layouts/ContentElements/
2) в TS Setup определите шаблон cObject для сеток контента
lib.gridelements.defaultGridSetup.cObject =< lib.contentElement
tt_content.gridelements_pi1.20.10.setup.twocolumnscontainer < lib.gridelements.defaultGridSetup
tt_content.gridelements_pi1.20.10.setup.twocolumnscontainer {
cObject.templateName = GridElementTwoColumns
cObject.dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
10 {
references.fieldName = media
as = backgroundimage
}
}
}
3) В TS Config:
tx_gridelements.setup.twocolumnscontainer {
title = Two columns element with background image
description = whatever
config{
colCount = 2
rowCount = 1
rows {
1 {
columns {
1 {
name = column 1
colPos = 100
}
2 {
name = column 2
colPos = 101
}
}
}
}
}
}
4) EXT:yourext / TCA / Overrides / tt_content_element_gridelement.php
<?php
defined('TYPO3_MODE') || die();
call_user_func(function()
{
/**
* Limit the number of images in "media" for gridelements contents
*/
$GLOBALS['TCA']['tt_content']['types']['gridelements_pi1']['columnsOverrides']['media']['config']['maxitems']=1;
});
5) Определите шаблон Fluid (я удалил классы, чтобы вы могли использовать все, что захотите, Bootstrap, Foundation...): EXT:yourext/Resources/Private/Templates/ContentElements/GridElementTwoColumns.html
<f:layout name="Default"/>
<f:section name="Main">
<f:if condition="{backgroundimage.0}">
{f:uri.image(image:backgroundimage.0)}
</f:if>
<div class="">
<div class="">
{data.tx_gridelements_view_column_100-> f:format.raw()}
</div>
<div class="">
{data.tx_gridelements_view_column_101-> f:format.raw()}
</div>
</div>
</f:section>
Надеюсь, я не забыл важные шаги:)