Zum Inhalt springen

Dynamic Content Elements (DCE)

Erstellt am 29. Juli 2012 · 91 Antworten · letzte Antwort am 14. Mai 2019 · Seite 5 von 5

Tags: Frage

Unbekannter Benutzer ·

Hallo brbanz,

Deine Lösung bewirkte zwar nicht ganz das, was ich wollte (es fehlten die "Kategoriedaten" in der Ausgabe), ABER der richtige Hinweis war drin: ich muss minitems und maxitems angeben, dann klappts auch mit der Mehrfachauswahl. Hier also meine Feld-Konfiguration:

<config>
    <type>select</type>
    <foreign_table>sys_category</foreign_table>
    <size>6</size>
    <dce_load_schema>1</dce_load_schema>
    <multiple>1</multiple>
    <minitems>0</minitems>
    <maxitems>20</maxitems>
</config>

Und die debug-Ausgabe:

fields => array(6 items)
    [...]
    bCat => array(2 items)
        0 => array(34 items)
            [...]
            pid => '3' (1 chars)
            title => 'TEST1' (5 chars)
        1 => array(34 items)
            [...]
            pid => '4' (1 chars)
            title => 'TEST2' (5 chars)

Uff, geschafft.

Vielen Dank!

ToBe ·

Eine Anmerkung zu Backend-Previews - weil ich ewig nach einer Lösung gesucht habe und sich hier so einige Tips sammeln:

Man muss im FE-Template ein Fluid-Image-Tag verwenden, sonst werden im BE keine Previews generiert. Meiner Meinung nach etwas verwirrend und unnötig, dass das im Zusammenhang steht.

Evtl. wird das ja auch mal verändert.

Lizzie ·

Hallo zusammen!

Ich bin bisher begeistert von der Einfachheit und der Möglichkeiten dieser Extension.
Nun komm ich leider nicht mehr weiter, ich hoffe ihr könnt mir hier weiterhelfen?

Ich hab schon kleinere Webseiten erstellt, bin mit Typo3 aber nicht so vertraut, danke für euer Verständnis 🙂

Ich habe mir unter Adminwerkzeuge > DCE ein neues Element angelegt und dort meine Felder (Titel, Textfeld, Bild und eine Auswahlliste) erstellt. Das hat soweit auch gut funktioniert, ich kann alles wie gewünscht erfassen. Bei der Ausgabe komme ich jetzt aber nicht mehr weiter.

Problem 1
Das Feld "kompetenzen" ist eine Auswahlliste, der User soll die Einträge darin selbst verwalten können. Ich habe daher einen Sys-Ordner (mit ID 7) in Typo3 angelegt und die Einträge dort erfasst. Die Config für das Feld sieht so aus:

<config>
	<type>select</type>
	<!-- uncomment this, if you want to add an empty option before -->
	<!-- <items type='array'>
		<numIndex index='0' type='array'>
			<numIndex index='0'></numIndex>
			<numIndex index='1'></numIndex>
		</numIndex>
	</items> -->
	<foreign_table>tt_content</foreign_table>
	<foreign_table_where>AND tt_content.pid = 7 ORDER BY tt_content.header</foreign_table_where>
	<size>10</size>
	<minitems>1</minitems>
	<maxitems>100</maxitems>
</config>

Das ganze funktioniert wie gewünscht, ich habe die Einträge in der Liste und kann dort die jeweiligen Einträge auswählen. In der Ausgabe mit {field.kompetenzen} bekomme ich aber nur die uid der Einträge angezeigt. Wie schaff ich es die Namen dieser Einträge anzuzeigen. In der Tabelle tt_content stehen die gewünschten Werte im Feld "header". Ich möchte einfach eine Auflistung wie <li>Name</li> der ausgewählten Elemente ausgeben.

Problem 2
Über das Feld "bilder" können beliebig viele Bilder hinzugefügt werden.

<config>
	<type>group</type>
	<internal_type>file</internal_type>
	<allowed>jpg,jpeg,png,gif</allowed>
	<size>5</size>
	<minitems>0</minitems>
	<maxitems>100</maxitems>
	<uploadfolder>fileadmin/Bilder/Einsatzgebiete</uploadfolder>
	<show_thumbs>1</show_thumbs>
</config>

Die Auswahl funktioniert soweit und ein einzelnes Bild kann ich auch ausgeben:

<f:image src="fileadmin/Bilder/Einsatzgebiete/{field.bilder}" alt="Thumbnail {field.titel}" maxWidth="320" maxHeight="320" />

Nun möchte ich, falls mehr als ein Bild erfasst ist, das erste Bild einzeln wie anzeigen und weiter unten die weitern Bilder (z.B. 2-6) in kleinerer grösse anzeigen. So sieht momentan mein Template-Inhalt aus:

<f:layout name="Default" />

<f:section name="main">
	{namespace dce=Tx_Dce_ViewHelpers}
	
	<h1>{field.titel}</h1>
	<f:image src="fileadmin/Bilder/Einsatzgebiete/{field.bilder}" alt="Thumbnail {field.titel}" maxWidth="320" maxHeight="320" />
	<strong>Kompetenz</strong>
	{field.kompetenzen}
		
	{field.text}

	//Die restlichen Bilder hier ausgeben
</f:section>

Vielen Dank für eure mühen, mir wäre wirklich sehr geholfen. Ich komm hier alleine nicht mehr weiter. 🙁

Unbekannter Benutzer ·

Hallo Lizzie,

versuch mal bei Problem#1 die Zeile

<dce_load_schema>1</dce_load_schema>

in Deine Feldkonfiguration aufzunehmen. Vielleicht kommst Du dadurch an die Namen...

Grüße,
boitnrw

Lizzie ·

Lieben Dank für deine Antwort.
Ich habe die Zeile eingefügt. Jetzt erscheint im Frontend anstelle der ID-Auflistung wie vorher (z.B. 31,35) einfach nur noch: Array

Mein Code unter Template sieht so aus:

<f:layout name="Default" />

<f:section name="main">
	{namespace dce=Tx_Dce_ViewHelpers}
	
	<h1>{field.titel}</h1>
	<f:image src="fileadmin/bausan-isotech/Bilder/Einsatzgebiete/{field.bilder}" alt="Thumbnail {field.titel}" maxWidth="320" maxHeight="320" />
	<strong>Kompetenz</strong>
	
	{field.text}
	{field.kompetenzen}
	
	
</f:section>
Unbekannter Benutzer ·

Genau das ist ja auch, was Du wolltest... :-)

Das Array kannst Du mit einer for-Schleife durchlaufen. Um herauszufinden, was drin steht füge mal die Zeile

<f:debug>{field.kompetenzen}</f:debug>

in Dein Template ein (z.B. vor die H1).

Grüße,
boitnrw

Lizzie ·

Damit bekomme ich diese Ausgabe im Browser:

array(2 items)
   0 => Tx_Dce_Domain_Model_Dceprototypemodified entity (uid=2, pid=0)
      templateFields => array(4 items)
         0 =>

Aber die gewünschten Namen der Elemente bekomm ich hier auch nicht oder übersehe ich da etwas?

Ich bin jetzt mittlerweile auf viewHelper gestossen (sorry ist noch alles ganz neu für mich) und hab mich an einem eigenen versucht. Damit ist es mir schon mal gelungen die gewünschten Namen der Ids aus der Tabelle tt_conten zu holen.

Bildschirmfoto-2014-11-28-um-11.50.58.png

Lizzie ·

Hallo Zusammen

Ich nochmals, bin immer noch auf der Suche nach einer Lösung für mein erstes Problem. Ich möchte jetzt den String aus {field.bilder} (z.B. "foto1.jpg, foto2.jpg, foto3.jpg" ) mit einem eigenen ViewHelper in ein Array umwandeln und dieses dann mit einer for-Schleife auslesen.

Ich bekomme aber immer die nicht sehr aussagekräftige Fehlermeldung: "Oops, an error occurred!"

Hat jemand einen Tipp für mich? Komme einfach nicht mehr weiter.

ExplodeViewHelper.php

<?php
class Tx_Dce_ViewHelpers_ExplodeViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
	/**
    * @param string $string
    * @param string $delimiter
	*
	* @return array
    */
	public function render($string, $delimiter) {
		return explode($delimiter, $string);
	}
}
?>

DCE Template

<f:layout name="einsatzgebiete" />

<f:section name="main">
	
	
	{namespace dce=Tx_Dce_ViewHelpers}
	
	
	<article data-name="{field.titel}" data-komp="<dce:eintragsname string='{field.kompetenzen}' />">
		
		<h1>{field.titel}</h1>
		
		<strong>Ausführungsjahr</strong>
		
		<strong>Arbeitsbereiche</strong>
		<dce:colorText color="{field.kompetenzen}" />
		
		<f:format.html>{field.text}</f:format.html>
		
		<ul>
		<f:for each="{dce:explode(string: '{field.bilder}', delimiter: ',')}" as="bild">
			<f:then>
				<li>{bild}</li>
			</f:then>                            
		</f:for>
		</ul>
				
		
	</article>
	
</f:section>

Konfiguration des Feldes Bilder

<config>
	<type>group</type>
	<internal_type>file</internal_type>
	<allowed>jpg,jpeg,png,gif</allowed>
	<size>5</size>
	<minitems>0</minitems>
	<maxitems>100</maxitems>
	<uploadfolder>fileadmin/Bilder/News-Projekte</uploadfolder>
	<show_thumbs>1</show_thumbs>
</config>
onza ·

Versuche die Bildunterschriften im dce:fal Fluidtemplate auszugeben. Jemand Tipp? Vielen Dank!

<f:section name="main">
	<f:for each="{dce:fal(field:'img', contentObject:contentObject)}" as="fileReference">
	<figure>
		<f:image src="{fileReference.uid}" treatIdAsReference="1" />
	</figure>
	</f:for>
</f:section>
Sebastian S.​ ·

hallo forum,

kann man die Ext. DCE so aufbauen, dass man wie bei z.b. "gridelements" alle Datensätze und Dateien auslagern kann?

Habe gesehen, dass wenn ich einen DCE Datensatz angelegt habe, kann ich die "Vorlage" in eine Datei auslagern.
oder auch "Fluid Layout, Root-Verzeichnis" kann bearbeitet werden.

Doch ich möchte erst gar keinen Datensatz im Backend anlegen, sondern alles via typoscript, fluid, flexforms usw.

mit gridelements klappt die Auslagerung ziemlich gut!
geht das auch mit der DCE ?

Ich freue mich auf eine Antwort oder Hilfen 🙂
Sebastian

Niklas Lazinbee ·

@ onza

Bei mir sieht das so aus:

<figure class="imageSingleProduct">
	<f:image src="{fileReference.uid}" alt="{fileReference.description}" treatIdAsReference="1" maxWidth="580" />
	<f:if condition="{fileReference.description}">
		<figcaption>{fileReference.description}</figcaption>
	</f:if>
</figure>

Gruß Niklas
Wigald ·

Habe ein Update der Extension von 0.84 auf 1.04 vorgenommen jetzt werde ich bei jeder Speicherung im Backend von dieser Fehlermeldung:

#1289386765: Could not analyse class:Tx_Dce_ViewHelpers_ArrayGetIndexViewHelper maybe not loaded or no autoloader?

TYPO3\CMS\Extbase\Object\Container\Exception\UnknownObjectException thrown in file
/html/typo3/typo3_src-6.2.12/typo3/sysext/extbase/Classes/Object/Container/ClassInfoFactory.php in line 37.

begrüßt. Kann mir einer bitte einen kleinen Hinweis geben was sich verändert hat.

Grüße
Wigald

Wigald ·

Nett zu wissen das sich {namespace dce=Tx_Dce_ViewHelpers} in {namespace dce=ArminVieweg\Dce\ViewHelpers} geändert hat.

stereolake ·

Hallo Armin, hallo Rest 🙂

Erst einmal danke für die großartige Extension als auch für die wertvollen Tipps hier.

Ich hätte eine Frage zum Thema Ausgabe der System-Kategorien. Die waren ja hier auch schon Thema, aber gepostet wurde nur der Debug- und nicht der finale Ausgabe-Code.
Nach der Selektion, die auch funktioniert, soll die jeweilige Kategorie (Title-Array) ausgegeben werden. Wie löse ich das über die Array-Ausgabe im DCE-Template? Kann mir da wer weiter helfen?

Vielen Dank und viele Grüße,
Chris aus Köln

Konfiguration (funktioniert wie gewünscht):

<config>
<type>select</type>
<foreign_table>sys_category</foreign_table>
<size>6</size>
<dce_load_schema>1</dce_load_schema>
<multiple>1</multiple>
<minitems>0</minitems>
<maxitems>20</maxitems>
</config>

Template (noch unvollständig):

{namespace dce=ArminVieweg\Dce\ViewHelpers}
<f:layout name="None" />
<f:section name="main">
<div class="filter-element">
<dce:typolink parameter="{field.link}">
<h1>{field.title}</h1>
<p>{field.description}</p>
<p><f:debug>{field.category}</f:debug></p>
<f:for each="{dce:fal(field:'media', contentObject:contentObject)}" as="fileReference1">
<img src="fileadmin{fileReference1.identifier}" />
</f:for>
</dce:typolink>
</div>
</f:section>

Debug-Konsole:

array(1 item)
0 => array(28 items)
uid => '3' (1 chars)
pid => '21' (2 chars)

... (weitere Werte)

title => 'Filme' (5 chars)

... (weitere Werte)

Dimanoss ·

Hallo,
hat jemanden Erfahrung, den DCE als container für andere Content-types nutzen? Im DCE-Backend-Template versuche einfaches:

    <flux:grid>
         <flux:grid.row>            
              <flux:grid.column style="width: 33%">
                   <flux:form.content name="column1" label="33.3%" />
              </flux:grid.column>
              <flux:grid.column style="width: 66%">
                   <flux:form.content name="column2" label="66.6%" />
              </flux:grid.column>
         </flux:grid.row>
    </flux:grid>

, aber läuft's nicht... :-(

Armin, meiner Meinung: Container - einziges, was im DCE fehlt. Bequem und einfach. Super! :-)

stereolake ·

Endlich habe ich es mit den Systemkategorien hinbekommen. Werte eines Arrays kann man einfach durch die Punkt-Kombination ausgeben, z.B. category.title. category ist dabei ein expliziter Marker, der im DCE angelegt wurde, title (oder ein beliebig anderer Wert) lässt sich über den debug-Mode herausfinden.

<f:for each="{field.category}" as="category">
<h3>{category.title}</h3>
</f:for>

Das DCE ist dabei wie folgt definiert

<config>
<type>select</type>
<foreign_table>sys_category</foreign_table>
<size>6</size>
<multiple>1</multiple>
<minitems>0</minitems>
<maxitems>20</maxitems>
<dce_load_schema>1</dce_load_schema>
</config>

In Kombination mit isotope bzw. masonry brauchte ich die Systemkategorien auch noch als Klasse. Wichtig hierbei war, dass alle Umlaute und Sonderzeichen ersetzt werden.

Dabei hilft ein kleines Snippet

lib.replace = TEXT
lib.replace {
	current = 1
	field = title
	trim = 1
	case = lower
	replacement {
		10 {
			search.char = 32
			replace = -
		}
		20 {
			search = /(ä|Ä)/
			useRegExp = 1
			replace = ae
		}
		30 {
			search = /(ö|Ö)/
			useRegExp = 1
			replace = oe
		}
		40 {
			search = /(ü|Ü)/
			useRegExp = 1
			replace = ue
		}
		50 {
			search = ß
			replace = ss
		}
		60 {
			search = /\/\\\.\:\;\,\&/
			useRegExp = 1
			replace =
		}
	}
}

Und dieses wird ebenfalls im DCE-Template wie folgt eingesetzt

<div class="filter-item <f:cObject typoscriptObjectPath='lib.replace'>{category.title}</f:cObject>">
... Inhalt ...
</div>

Keine Ahnung, wie sauber die Lösung ist, aber sie funktioniert. 🙂
Vielleicht benötigt sie auch mal wer anders ...

Grüße,
Chris

andreaswalz ·

Hallo, ich komm grad nicht weiter, ich verwende eine Selectbox aus einer externen Tabelle, es wird dann automatisch der title als Auswahltext und die uid als Value ausgewählt, klappt alles, aber ich möchte den Auswahltext auch in der Ausgabe (fluid) verwenden, wie mache ich das, dass dann nicht nur 1 oder 2 (das ist mein uid) steht? Natürlich könnte ich das mit einer Condition hinbekommen, aber der Text soll ja aus der DB kommen und nicht im Template verborgen sein.
meine config sieht so aus (Standard):
<config>
<type>select</type>
<!-- uncomment this, if you want to add an empty option before -->
<!-- <items type="array">
<numIndex index="0" type="array">
<numIndex index="0"></numIndex>
<numIndex index="1"></numIndex>
</numIndex>
</items> -->
<foreign_table>tx_key1xxxxxxx</foreign_table>
<size>1</size>
<minitems>0</minitems>
<maxitems>1</maxitems>
</config>