Gridelments с фоновым изображением

Я использую Gridelements в своем проекте TYPO3 v8. Я хотел бы показать фоновое изображение для рамки gridelement, взятой из соответствующего файла этой записи gridelements. Мы можем увидеть этот файл под внешним видом TAB. Я думаю, что это sys_file_reference.

Могу ли я просто использовать его во внешнем интерфейсе, чтобы сделать фоновое изображение для этого раздела gridelements?

# Two Columns
2 < lib.gridelements.defaultGridSetup
2 {
    columns {
        # 101 reflects colPos
        101 < .default
        101 {
            wrap = <div class="span6">|</div>
        }
        102 < .default
        102 {
            wrap = <div class="span6">|</div>
        }
    }
    wrap =<div class="row-container visible-first"> <div class="container-fluid"><div class="content-inner row-fluid">|</div></div></div>
}

Заранее спасибо за помощь.

2 ответа

Я думаю, что было бы возможно сделать это с TypoScript, но я опубликую здесь мое решение, которое основано на Fluid.

Решение основано на следующих предположениях:

1) вы уже создали собственное расширение, которое действует как "поставщик конфигурации внешнего интерфейса"; Я назову это "yourext".
Если вам нужна помощь по этой теме, пожалуйста, присоединитесь к каналу TYPO3 Slack ( https://typo3.slack.com/) и обратитесь за помощью.

2) фоновое изображение будет сохранено в медиа- поле, которое связано с палитрой "файлов", которую вы видите на вкладке "Внешний вид" элементов gridelements.

3) EXT: ваш текст зависит от gridelements.

TS Config

#Define the element with 2 columns:

tx_gridelements.setup.twocolumnscontainer {
  title = 2 col container
  description = whatever description you want
  iconIdentifier = 
  config{
    colCount = 2
    rowCount = 1
    rows {
      1 {
        columns {
            1 {
                name = column 1
                colPos = 100
            }
            2 {
                name = column 2
                colPos = 101
            }
        }
      }
    }
  }  
}

Константы TypoScript:

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/

Шаблон TypoScript:

# the default gridelement object will be a reference to the default fluidtemplate object shipped with TYPO3 8

lib.gridelements.defaultGridSetup.cObject =<  lib.contentElement

#define the element with 2 colums as copy of the default object
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 
    }

  }
}

EXT: yourext / Configuration / TCA / Заменяет / tt_content.php:

<?php
 defined('TYPO3_MODE') or die();
 //prevent defining global variables 
 call_user_func(function () {
 // only allow 1 image
 $GLOBALS['TCA']['tt_content']['types']['gridelements_pi1']['columnsOverrides']['media']['config']['maxitems']=1;
});

EXT: yourext / Resources / Private / Templates / ContentElements / GridElementTwoColumns.html (используйте свой собственный HTML-код, здесь я просто использую стандарт Bootstrap в качестве примера)

<f:layout name="Default"/>
<f:section name="Main">

<f:if condition="{backgroundimage.0}">
{f:uri.image(image:backgroundimage.0)}
</f:if>


<div class="row">
    <div class="col-sm-6">
        {data.tx_gridelements_view_column_100-> f:format.raw()}
    </div>
    <div class="col-sm-6">
        {data.tx_gridelements_view_column_101-> f:format.raw()}
    </div>          
</div>
</f:section>

Я думаю, что этого должно быть достаточно.

Финальная нота

Используя медиа-поле, вы не сможете использовать "инструмент обрезки"; для этого вам необходимо сохранить ваши изображения в поле изображения таблицы базы данных tt_content; это означает, что вам придется изменить TCA для gridelements, чтобы отобразить вкладку "images".

Flexform:

    <backgroundimage>
                    <TCEforms>
                        <label>Hitergundbild</label>
                        <config>
                            <type>inline</type>
                            <maxitems>1</maxitems>
                            <foreign_table>sys_file_reference</foreign_table>
                            <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,svg,gif</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>

HTML шаблон

style="background-image:url({f:uri.image(src:'{data.flexform_backgroundimage}',treatIdAsReference:'1')})"
Другие вопросы по тегам