Zum Inhalt springen

DCE und "normale" TYPO3 content elemente

Erstellt am 1. April 2014 · 16 Antworten · letzte Antwort am 2. August 2016

Tags: FlexForms, DCE, TYPO3 6.x, Frage

tikky ·

Hallo liebe Gemeinde,

ist es bei Extension DCE (Dynamic Content Elements) möglich ein Feld an zu legen in das man ein "normales" TYPO3 content element einbinden kann?

Ich brauche da eine Variante um Plugins, z.B. tt_news oder eine Googlesitemap ein zu bauen.

Bin für jeden Hinweis Dankbar.

Liebe Grüße und Danke
Tikky

Schweriner ·

DCE bringt zwar einige Flexform Felder mit, damit man sich diese schnell für sein DCE generieren lassen kann, aber man kann natürlich jede Form von Flexform Feldern verwenden. Für deine Zwecke könntest Du entweder ein Flexform Feld vom Typ DB verwenden und Dir dann einen tt_content Datensatz von einer anderen (versteckten) Seite ziehen oder du verwendest den Typ inline um direkt im DCE ein Content Element anzulegen (dafür muss ich unbedingt irgendwann mal ein Tutorial schreiben)

Für die Ausgabe wirst Du aber noch einen zusätzlichen Viewhelper für tt_content Element benötigen. In etwa sowas: http://blog.teamgeist-medien.de/2014/01/extbase-fluid-viewhelper-fuer-tt_content-elemente-mit-namespaces.html

tikky ·

Hallo Schweriner,

vielen Dank für die schnelle Reaktion.

Leider komme ich mit Deiner Antwort nicht klar.

Eine Extension habe ich noch nie programmiert, scheint aber für Deinen zweiten Vorschlag nötig zu sein.
Somit habe ich mich mal an Vorschlag 1 versucht.
So wie ich das verstehe muss ich den Inhalt des Konfigurationsfeldes eines DCE-Feldes anpassen (einen fertigen Eintrag über das Dropdown gibt es nicht für DB).
Auf "http://www.wiki-cms.com/Typo3-FlexForm-Formlist" habe ich folgendes gefunden:

Datensätze

<label>Adressen wählen:</label>
<config>
  <type>select</type>
  <maxitems>1000</maxitems>
  <size>6</size>
  <foreign_table>tabellename</foreign_table>
</config>

geht das in die Richtung?

Ich kenne mich mit Flex-Forms so gar nicht aus, bin aber immer bereit dazu zu lernen.

Danke und lieben Gruß
Tikky

Schweriner ·

Ich dachte da eher an sowas, aber mit Select könnte es auch funktionieren.

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

Ich habe nun Deinen Ansatz genommen.
Das Content Element aus einer anderen Seite kann ich nun super auswählen, es geht hier speziell um "fl_seositemap". Nur wenn ich mir das im Browser ansehe, dann steht da die Content ID.

Die Ausgabe habe ich mit <f:format.raw> und <f:format.html> probiert.

Schweriner ·

Wie gesagt dafür brauchst Du nun einen Content Viewhelper, dem Du die ID übergibst und Dir den Content holst. Eigentlich müsste es aber auch so funktionieren, wenn Du den Viewhelper

<f:cObject typoscriptObjectPath="lib.meinContentObjekt" data="{field.meinContentSelectFeld}">
<!-- tag content - may be ignored! -->
</f:cObject>

Im Typoscript unter lib,meinContentObjekt könntest Du jetzt beispielsweise die Content UID verwenden und mit dem cObj CONTENT oder RECORDS Dir die Daten des tt_content Objekts aus der Datenbank holen und rendern.

tikky ·

Ich fürchte das ist für mich zu hoch,

<f:cObject typoscriptObjectPath="lib.meinContentObjekt" data="{field.meinContentSelectFeld}"> # kann ich nichts mit anfangen
<!-- tag content - may be ignored! -->
</f:cObject>

das wäre mein Ansatz für das lib-Element:

lib.sitemap = CONTENT
lib.sitemap {
	table = tt_content
	wrap = |
	select {
		languageField=sys_language_uid
		max=1
		where = uid = 634
	}
	renderObj = COA
	renderObj {
		#5 = TEXT
		#5.data = debug:data
		
		#hier die normale TYPO3 Ausgabe eines fl_seositemap Plugins einfügen
	}
}

In dem Content-Element steckt ein Plugin des Typs fl_seositemap, die Ausgabe/ das Rendering sollte so sein wie TYPO3 oder die Extension das normalerweise macht.

Kannst Du mich da in die Richtige Richtung schubsen?
Dies hier ist neuland für mich.

Hier habe ich den Umgang mit dem CONTENT-Element her:
http://www.typo3wizard.com/de/artikel/das-content-objekt.html.

Ich möchte das verstehen, denn ich brauche das noch ein zweites mal um tt_news auf diese Weise ein zu binden.

Schweriner ·

Probiers einfach mal so:

lib.sitemap = CONTENT
lib.sitemap {
	table = tt_content
	wrap = |
	select {
                pidInList = ###ID MIT DER SEITE DES CONTENT ELEMENTS###
                uidInList = 634
	}
}

Nur um die Ausgabe auszuprobieren (aufs Minimum beschränken). Danach musst Du die Abfrage unabhängig von der PageID machen und die uidInList dynamisch vom Fluid ans Typoscript übergeben. pidInList ist bei Default die aktuelle deshalb machs mal hart.

tikky ·

Vielen Lieben Dank,

ich habe eine Ausgabe und das Plugin ist im DCE wählbar und kommt nun aus einer anderen Seite die ich eigens dafür angelegt habe.

MichiH ·

Der Vorschlag 1 klappt bei mir auch, nur würde ich gern den Typ inline verwenden um direkt im DCE ein Content Element anzulegen. Alle Contentelemente in einem extra Folder zu speichern wird schnell unübersichtlich. Ich hab es mit folgender einfachen Flexform versucht:

<config>
	<type>inline</type>
	<foreign_table>tt_content</foreign_table>
	<minitems>0</minitems>
	<maxitems>99</maxitems>
</config>

Damit kann ich Content Elemente in DCE einfügen, nur wenn ich auf speichern geh bekomm ich folgende Fehlermeldung:

#1328613288: No DCE found with uid "0".
UnexpectedValueException thrown in file
/Applications/MAMP/htdocs/typo3conf/ext/dce/Classes/Domain/Repository/DceRepository.php in line 53.

Ist mein Flexform falsch oder muss ich da noch was anderes beachten?
(TYPO3 6.2, DCE 0.9.3)

PS: Hab den Fehler zum testen mal umgangen indem ich eine Klasse der Extension überarbeitete. Dann ging zwar das speichern, die Contentelemente wurden aber nicht nur im DCE sondern auch im Contentbereich sichtbar.

Schweriner ·

Hey MichiH, das mit dem doppelten Auftauchen der Content Elemente ist ein bekanntes Problem. Im Prinzip werden sie dann ja auch auf der Seite erstellt und somit auch ausgegeben. Ich wollte schon lange mal einen Hook dafür schreiben, dass diese Content Elemente beim Speichern irgendwie versteckt werden, aber ich bin noch nicht dazu gekommen.

MichiH ·

Ok, Schade dass es da noch keine Möglichkeit für DCE gibt.
Ich hab mich noch ein wenig schlau gemacht und definier jetzt die pid für neue Contentelemente im Seiten-TSconfig:

TCAdefaults.tt_content.pid = 2 #uid vom Storage Folder

Damit werden neue Inline-Contentelemente im DCE im Storage Folder angelegt. Erstellte Contentelemente im Seiten- oder Listenmodul landen weiterhin in der ausgewählten Seite. Hoff nur das ich da später nirgends Probleme mit dieser Konfiguration bekomm 😃

rigadoon ·
MichiH schrieb

PS: Hab den Fehler zum testen mal umgangen indem ich eine Klasse der Extension überarbeitete.

Könntest du mal kurz erklären, wie du den Fehler umgehst bzw. welche Klasse du wie angepasst hast? Vielen Dank!

PeterWadson ·

Es ist zwar schon ein älteres Thema aber im Prinzip wird hier genau das Problem beschrieben, welches ich gerade versuche zu lösen.

Die Entwicklung von TemplaVoila ist für TYPO3 CMS 7.x+ leider auf Eis gelegt worden. Wir würden als Unternehmen aber schon gerne unseren Kunden die Möglichkeit Version 7 zu nutzen nicht abschlagen wollen.

Auf der Suche nach Ersatz zur Inhaltsaufteilung (z.B. 3 Spalten Subtemplate) bin ich dann im Netz auf die DCE Extension gestoßen. Leider bietet sie auch für Version 7.6.x+ noch keine Möglichkeit, Standard tt_content Elemente einzupflegen, ähnlich wie es TemplaVoila tut.

Gibt es dazu mittlerweile also irgendwie eine Lösung oder übersehe ich nur etwas?

Vielen Dank.