Typo3 Inhalte (tt_content) mit ViewHelper in Extension "DCE" rendern *UPDATED*

17.07.2014

Vor kurzem bin ich auf das Problem gestoßen, dass ich um eine auf einer Web-Site eingebundenen Extension einen Container wrappen wollte, damit ich für CSS/jQuery einen zusätzlichen Selektor zur Verfügung habe. In meinem Beispiel wollte ich die Listenansicht der Extension tx_news auf der Startseite anders darstellen (mit einem Slider), als auf einer anderen Seite. Da ich seit einiger Zeit kein TemplaVoila mehr verwende und somit ohne FCEs (flexible Content Elemente) auskommen muss, habe ich mir eine praktikable Lösung überlegt.


Konfiguration DCE im Reiter Allgemein

Konfiguration DCE im Reiter Template

Konfiguration Content-Element mit
Extension (Auswahl des Datensatzes
über Ordner-Symbol)

Obwohl ich kein TemplaVoila mehr verwende, möchte ich die Funktion der FCEs dennoch nicht missen und verwende aus diesem Grund für aktuelle und zukünftige Projekte die Extension DCE (Dynamic Content Elements).

Sie setzt für die Darstellung der Inhalte auf die Typo3 eigene Template-Engine "Fluid" und lässt sich daher nahtlos integrieren. Allerdings ist es (soweit ich weiß) mit der aktuellen Version nicht möglich, eigene (oder fremde) Extensions oder gar andere tt_content Elemente, wie z. B. "Text und Bild" oder eine "Tabelle", einzubinden. Dafür habe ich mir einen ViewHelper aus den Typo3 Docs besorgt und in eine minimale ViewHelper-Extension gepackt.

Die Installation ist denkbar einfach. Ladet euch das Archiv hier herunter, entpackt es und ladet den Inhalt anschließend in euren typo3conf/ext/ Ordner. Nun könnt ihr mit DCE einen neuen Container anlegen und dort unter dem Reiter "Template" um die Ausgabe einen einfachen div-Container mit Klasse/ID legen.

Anbei noch ein paar Screenshots, die den genauen Vorgang bebildern und natürlich die Codeschnipsel, damit ihr nichts abtippen braucht.

Listing 1: Konfiguration DCE im Reiter "Allgemein"

<config>
<type>group</type>
<internal_type>db</internal_type>
<allowed>tt_content</allowed>
<size>1</size>
<maxitems>1</maxitems>
<minitems>1</minitems>
<show_thumbs>0</show_thumbs>
</config>

 

Listing 2: Konfigration DCE im Reiter "Template"

{namespace dce=Tx_Dce_ViewHelpers}
{namespace m=Tx_PmRendercontent_ViewHelpers}

<f:layout name="Default" />

<f:section name="main">
<div class="rendercontent">
<m:Content uid="{field.extensioncontent}" />
</div>
</f:section>

Wenn euch das Ganze geholfen hat, würde ich mich sehr über einen kleinen Kommentar freuen :)

Update, 01.09.2014:
Ich habe das Archiv noch einmal für Typo3 6.2 geupdated, die Extension ist jetzt für Typo3 4.5 bis 6.2 vorbereitet und kann über den Extensionmanager installiert/aktiviert werden. Vielen Dank an Ede Kowalski für den Hinweis!

Update, 25.05.2015:
Die Extension kann jetzt auch alle Inhalte einer Seite parsen, man muss also nicht mehr jedes Element auf der Seite auswählen. Das DCE-Template müsst ihr folgendermaßen anpassen:

<m:Content uid="{field.extensioncontent}" />

wird zu

<m:PageContent pid="{field.pid}" />

Und den allowed-Typen müsst ihr anschließend noch auf "pages" umstellen (ohne Anführungsstriche).


Kommentare

Anzeige: 1 - 10 von 12.
 

Julian Stock aus Lübeck

Mittwoch, 20-04-16 11:23 Uhr

@Maggy,
leider habe ich zur Zeit kein TYPO3 in Version 7 vorliegen - das muss ich mir mal ansehen.

 

Maggy

Dienstag, 05-04-16 14:19 Uhr

Hi! Danke für die Extension! Gibt es die Möglichkeit, dass deine coole Idee auch unter Typo3 7.6.4 läuft? Viele Grüße, Maggy

 

Paul Schrake

Mittwoch, 08-04-15 11:51 Uhr

Super Tool, endlich content records in DCEs!
1000 Dank!

 

Klaus

Donnerstag, 19-03-15 15:54 Uhr

Einmal ein CE verknüpfen und dann noch mal ein Textfeld für die Überschrift war nicht so praktisch.
Es war aber eigentlich ganz einfach den Header eines verknüpften CEs im Backend anzuzeigen. Kann man bestimmt noch besser machen, aber es scheint für meinen Fall zu klappen:

[code]
use TYPO3CMSBackendUtilityBackendUtility;
/**
* BackendViewHelper to return header of a linked tt_content element.
*
* In backend preview use something like to view the linked CE's header.
*
* @since 20150318
* @author Klaus Weidenbach
*/
class Tx_PmRendercontent_ViewHelpers_BEHeaderViewHelper extends TYPO3CMSFluidViewHelpersBeAbstractBackendViewHelper {
/**
* Returns header of given Content Element.
*
* @param int $uid of the Content Element
* @return string Header of the Content Element
*/
public function render($uid) {
$record = BackendUtility::getRecordWSOL('tt_content', $uid, 'header');
if (isset($record['header']))
return $record['header'];
}
}
[/code]

Und dann kann man im Vorschau-Template etwas machen wie:
<m:BEHeader uid="{field.extensioncontent}" />

 

alem_R

Mittwoch, 18-03-15 10:11 Uhr

Kannst du das auch mit inline machen ? :D

 

Julian Stock aus Lübeck

Sonntag, 08-02-15 11:54 Uhr

Hi Klaus,
ich regel das dann immer so, dass ich im DCE ein Text-Element anlege, in welches ich nur die Überschrift eingebe. Die Funktionsweise ist dann ähnlich wie beim Typo3 Boardmittel-Element "HTML". Vielleicht ist das ja schon ausreichend.
LG!

 

Klaus

Freitag, 30-01-15 12:29 Uhr

Sehr interessante Idee. Vielen Dank! Ich suche noch nach einer Lösung nun auch den Header des verlinkten CE im Backend in der Übersicht anzuzeigen. Dieser ViewHelper scheint da nicht verwendbar zu sein. (PHP Fatal error: Call to a member function enableFields() on a non-object in .../sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php)
Hat jemand eine Idee wie man das machen könnte?

 

Ede Kowalski

Dienstag, 02-09-14 12:38 Uhr

Vielen Dank!
es klappt jetzt wunderbar.

Ein kleine Hinweis (evtl.Stolperfalle) für alle die es hier Nachbauen, bei TYPO3 6.2 muss nach dem Kopieren der Dateien in typo3conf/ext/ die neue Extension/Viewhelper (pm_rendercontent) im Extension/Erweiterungsmanager noch nach dem Upload aktiviert werden.

Viele Grüße
Ede
Coole Sache jetzt ist ganz schnell mit DCE + Gridlements + Bootstrap wirklich alles fix in TYPO3 möglich.

 

Julian Stock aus Lübeck

Montag, 01-09-14 16:32 Uhr

@Ede:
Ich habe das Archiv angepasst und erneut hochgeladen, bitte versuche es noch einmal.

 

Ede Kowalski

Sonntag, 31-08-14 13:25 Uhr

Cool Danke!
TYPO3 = Inspiring People To Share

 
 

Kommentar schreiben

Ins Gästebuch eintragen