TYPO3 Plugin:

boto_kunden

Über diese Erweiterung

boto_kunden ist eine Beispiel-Erweiterung, die alles bietet, um ein benutzerdefiniertes Inhaltselement zu erstellen für TYPO3 CMS 7 auf Basis der Systemerweiterung fluid_styled_content (FSC).

Eine detailliertere Erläuterung der folgenden Punkte finden Sie unter: https://usetypo3.com/custom-fsc-element.html

Systemanforderungen

Natürlich muss FSC in TYPO3 installiert werden, was nur in der Version 7.5 oder höher möglich ist. Da das tt_content Feld "assets" in Version 1.1.0 und höher verwendet wird und dieses Feld in TYPO3 7.5 nicht vorhanden ist, läuft nur die Version 1.0.0 dieser Erweiterung auf TYPO3 7.5. Neuere Versionen sollen mit TYPO3 7 LTS funktionieren.

Installation

Installieren Sie die Erweiterung und fügen Sie das statische TypoScript hinzu. So einfach ist das.

Komponenten eines Inhaltselements auf Basis von FSC

Diese Erweiterung erweitert das System um ein Inhaltselement namens boto_kunden. Die folgenden Schritte sind notwendig, um es zum Laufen zu bringen:

PageTSconfig

Damit unser Inhaltselement im Wizard für neue Inhaltselemente erscheint, müssen wir es über PageTSconfig hinzufügen

mod.wizards.newContentElement.wizardItems.common { {
    elemente {
        boto_kunden {
            iconIdentifier = Inhaltsbild
            title = LLL:EXT:boto_kunden/Ressourcen/Private/Language/locallang_be.xlf:wizard.title
            beschreibung = LLL:EXT:boto_kunden/Ressourcen/Private/Language/locallang_be.xlf:wizard.description
            tt_content_defValues {
                CT-Typ = boto_kunden
            }
        }
    }
    anzeigen := addToList(boto_kunden)
}

TCA

Nun müssen wir TYPO3 mitteilen, welche Felder im Backend angezeigt werden sollen. Daher müssen wir die tt_content TCA-Konfiguration erweitern. Dieses Zeug wird nun im Ordner Configuration/TCA/Override erledigt. Fügen wir zuerst unseren neuen CType hinzu (dies könnte auch in ext_tables.php geschehen):

\TYPO3\CMS\Kern\Utility\ErweiterungManagementUtility::addTcaSelectItem(
    tt_content',
    CType',
    [
        LLL:EXT:boto_kunden/Ressourcen/Privat/Sprache/locallang_be.xlf:wizard.title',
        "boto_kunden",
        Inhalts-Bild'
    ],
    Textmedien',
    "nachher
);

Nun bestimmen wir, welche Felder für unseren CT-Typ angezeigt werden sollen:

$GLOBALS['TCA']['tt_content']['types']['boto_kunden'] = [
    
            --palette--;' . $frontendLanguageFilePrefix . Palette.allgemein;allgemein,
            --palette--;' . $languageFilePrefix . tt_content.palette.mediaAdjustments;mediaAdjustments,
            pi_flexform,
        --div--;' . $customLanguageFilePrefix . tca.tab.sliderElements,
             vermögenswerte
    '
];

TypoScript

Der neue CType boto_kunden benötigt eine Rendering-Definition. Das ist ziemlich einfach:

tt_content {
    boto_kunden < lib.fluidInhalt
    boto_kunden {
        templateName = FluidStyleledSlider (Schieberegler)
        datenverarbeitung {
            10 = TYPO3\CMS\Frontend\Datenverarbeitung\FilesProzessor
            10 {
                referenzen.fieldName = Vermögenswerte
            }
            20 = BossharTong\FluidStyledSlider\Datenverarbeitung\FluidStyledSliderProzessor
        }
    }
}

Die lib.fluidContent ist nicht viel mehr als die Initialisierung eines FLUIDCONTENT-Objekts. Wir ändern nur den Namen der Vorlage (stellen Sie sicher, dass Sie mindestens Ihren Vorlagenpfad zu lib.fluidContent.templateRootPaths hinzufügen) und geben Sie an, welche Datenprozessoren wir verwenden werden. Oh, richtig, Datenverarbeiter.

Datenverarbeiter

Das sind PHP-Klassen, die die Daten erhalten, bevor sie an das fluid-Template übergeben werden. Sie können die Daten manipulieren oder Dinge hinzufügen in der Vorlage vorhanden sein. Der TYPO3\CMS\Frontend\Datenverarbeitung\FilesProzessor löst zum Beispiel alle angehängten Medienelemente für uns auf, so dass wir auf die FileReference-Objekte in der View zugreifen können. BossharTong\FluidStyledSlider\DataProcessing\FluidStyledSliderProcessor ist ein benutzerdefinierter Prozessor, der veranschaulicht, wie dies funktioniert.

klasse FluidStyledSliderProzessor implementiert DataProcessorInterface
{
    /**
     * Prozessdaten für den CT-Typ "boto_kunden"
     *
     * @param ContentObjectRenderer $cObj Der Inhaltsobjekt-Renderer, der Daten des Inhaltselements enthält
     * @param array $contentObjectConfiguration Die Konfiguration des Inhaltsobjekts
     * @param array $processorConfiguration Die Konfiguration dieses Prozessors
     * @param array $processedData Schlüssel/Wertspeicher für verarbeitete Daten (z.B. zur Übergabe an eine Fluid-Ansicht)
     * @return array die verarbeiteten Daten als Schlüssel/Wertspeicher
     * @throws ContentRenderingExceptionException
     */
    öffentlicher Funktionsprozess (ContentObjectRenderer $cObj, array $contentObjectConfiguration, array $processorConfiguration, array $processedData)
    {
        // Der Inhalt von $processedData wird in der Vorlage verfügbar sein
        // Es kann hier nach Ihren Wünschen bearbeitet werden.
        $processedData['slider']['width'] = 1000;
        gibt $processedData zurück;
    }

Datenprozessoren sind jedoch optional.

Die Fluid-Vorlage

Das letzte Teil des Puzzles ist die eigentliche Vorlage, die am Ende die von allen angegebenen DataProzessoren verarbeiteten Daten erhält. Das ist schlichtes fluid, wie wir es kennen (und lieben):

<html xmlns:f="http://xsd.helhum.io/ns/typo3/cms-fluid/master/ViewHelpers">
<div class="fluid-style-slider" style="width: {slider.width}px; Rand: auto">
    <f:für jede="{files}" als="file">
        <figure class="fluid-style-slider-item">
            <f:image image="{file}" height="{data.imageheight}" width="{data.imagewidth}" alt="{file.properties.alt}" title="{file.properties.title}"/>
            <f:if condition="{file.properties.description}">
                <figcaption>{file.properties.description}</figcaption></figcaption>
            </f:if> if>
        </figurieren>
    </f:for>
</div>
</html>

Natürlich können wir auch hier Layouts und Partiale verwenden. Beachten Sie, wie {data} die Zeile tt_content aus der gerenderten Zeile enthält inhaltselement. {files} wird vom TYPO3\CMS\Frontend\DataProcessing\FilesProcessor hinzugefügt und enthält die angehängten Medien als richtige Objekte. {slider.width} wird durch unseren eigenen DataProzessor ergänzt.

Optional: Vorschau im Seitenmodul

Wir wollen wahrscheinlich eine Art Vorschau für unsere Redakteure im Seitenmodul. Es gibt zwei nennenswerte Möglichkeiten, dies zu erreichen:

Fluid-Vorlage über PageTSconfig

Wir können einfach eine fluid-Vorlage angeben, die als Vorschau in PageTSconfig gerendert werden soll:

web_layout.tt_content.preview.boto_kunden = EXT:boto_kunden/Ressourcen/Privat/Vorlagen/Vorschau/FluidStyledSlider.html

Diese Vorlage empfängt alle Felder der Zeile tt_content direkt. Also enthält {header} den Header, {bodytext} enthält die Datei bodytext und so weiter.

tt_content_drawItem Haken

Wenn wir komplexere Dinge tun wollen, wie z.B. die Auflösung von Child Records, können wir uns für den tt_content_drawItem hook registrieren so:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php']['tt_content_drawItem']['boto_kunden']]
    \BossharTong\FluidStyledSlider\Hooks\FsSliderPreviewRenderer::class;

Unsere Klasse muss das \TYPO3\CMS\Backend\View\PageLayoutViewDrawItemHookInterface implementieren.

klasse FsSliderPreviewRenderer implementiert SeitenlayoutViewDrawItemHookInterface
{
    /**
     * Vorverarbeitet das Vorschau-Rendering eines Inhaltselements vom Typ "boto_kunden"
     *
     * @param \TYPO3\CMS\Backend\View\PageLayoutView $parentObject Aufruf des übergeordneten Objekts
     * @param bool $drawItem Ob das Element mit der Standardfunktionalität gezeichnet werden soll
     * @param string $headerContent Header Inhalt des Headers
     * @param string $itemContent Inhalt des Elements
     * @param array $row Datensatzzeile von tt_content
     * @return void
     */
    öffentliche Funktion preProcess(PageLayoutView &$parentObject, &$drawItem, &$headerContent, &$itemContent, array &$row)
    {
        if ($row['CType'] ===='boto_kunden') {
            $itemContent .= '<h3>Fluid Stil Slider</h3>';
            if ($row['assets']]) {
                $itemContent .= $parentObject->thumbCode($row, 'tt_content', 'assets') . <br />';
            }
            $drawItem = falsch;
        }
    }
}

Was auch immer wir in $itemContent schreiben, wird im Seitenmodul innerhalb unseres Inhaltselements gerendert

Diverse

Diese Erweiterung beinhaltet jQuery in JSFooterLibs. Wenn Sie bereits jQuery auf Ihrer Website haben, überschreiben Sie dies in Ihrem TypoScript oder setzen Sie die Konstante plugin.tx_fluidstyledslider.settings.includejQuery auf 0.

Benötigen Sie schnelle Hilfe mit dieser Extension? Unser Team von erfahrenen TYPO3-Entwicklern löst Probleme unkompliziert und zum Stundensatz.