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
                        }
                    }
                }
            }
        }
    }
}

Теперь я загружаю изображение (например, для фонового изображения) через 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)

Изменить: изображение  uid image background image


person user2310852    schedule 16.08.2018    source источник


Ответы (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 . Спасибо за помощь, ребята!

person user2310852    schedule 20.08.2018

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

Поскольку я не уверен на 100%, вы должны проверить, является ли 12 идентификатором записи sys_file_reference или записи sys_file, используемой для этого конкретного изображения, прежде чем использовать обычную команду ‹f: image> viewhelper с или без« TreatIdAsReference ».

https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Image.html

Если вам нужен только путь к изображению, а не тег изображения, вы должны вместо этого использовать ‹f: uri.image>.

https://docs.typo3.org/typo3cms/ExtbaseGuide/Fluid/ViewHelper/Uri/Image.html

person Jo Hasenau    schedule 16.08.2018
comment
12 - это идентификатор пользователя изображения, я редактировал свой первоначальный пост. Ошибка с < f:uri.image> .. и с помощником просмотра <f:image> я ничего не вижу, с _4 _... и без _4 _...?! Ошибка You must either specify a string src or a File object - person user2310852; 16.08.2018
comment
Когда идентификатор отображается при наведении курсора на встроенную запись, это не идентификатор sys_file, а идентификатор ссылки, поэтому следует использовать TreatIdAsReference. - person Jo Hasenau; 17.08.2018

Вот как я сделал это некоторое время назад, используя поле media tt_content вместо использования flexform. Это решение предполагает, что

а) вы используете расширение "внешнего поставщика" (EXT: yourext), в котором хранятся ваши шаблоны TypoScript и Fluid

б) EXT: yourext зависит от 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>

Надеюсь, я не забыл важные шаги :)

person Riccardo De Contardi    schedule 16.08.2018
comment
Привет, Риккардо. Выглядит неплохо, но я уже использую поле media из tt_content для изображения заголовка. Я не могу использовать его также для фонового изображения в gridelement. Так что, возможно, я воспользуюсь вашим примером и вместо этого попытаюсь изменить свою настройку. Спасибо за ответ ... но он должен работать с flexform-Image ?! - person user2310852; 16.08.2018
comment
@ user2310852 См. мой другой ответ - person Riccardo De Contardi; 16.08.2018

Это должно сработать для вас:

<f:uri.image src="{data.flexform_backgroundimage}" treatIdAsReference="1"/>
person Riccardo De Contardi    schedule 16.08.2018
comment
Привет, Риккардо. это вызывает у меня ошибку: «Вы должны указать либо строку src, либо объект File.». - person user2310852; 16.08.2018
comment
ммм, это странно, потому что для меня он работал нормально ... вы смотрите на gridelement с установленным изображением или нет? - person Riccardo De Contardi; 16.08.2018
comment
Поскольку 12 будет строкой идентификатора, которую можно рассматривать как ссылку, вы должны убедиться, что это работает. Так что же произойдет, если вы замените переменную на 12? - person Jo Hasenau; 17.08.2018
comment
Спасибо за вашу помощь. С <f:uri.image src="12" treatIdAsReference="1"/> я получу путь к моему изображению. Ошибка с {data.flexform_baclgroundimage}?!?! - person user2310852; 17.08.2018
comment
Можете ли вы выполнить отладку этого конкретного поля и добавить его к описанию? - person Jo Hasenau; 17.08.2018
comment
Привет, Джо, ты имеешь в виду: <f:debug>{data.flexform_backgroundimage}</f:debug>, что возвращает: 12' (2 chars)? Вы видите отладку данных выше (см. Вопрос). - person user2310852; 19.08.2018