TCA: Sichtbarkeit von Feldern abhängig von Dropdown Wert

17. Juli 2015

Problem: je nachdem was man im Backend im Dropdown ‘Typ’ (‘type’ in der Datenbank) auswählt, soll ein anderes Feld sichtbar sein. Bei Typ A und Typ B soll mein Feld “Wert” sichtbar sein, bei Typ C das Feld ” Details”. Das ganze ließ sich sogar relativ einfach lösen. Zunächst fügt man in der ext_tables.php in das $TCA der Extension folgendes hinzu:

  1. $TCA['tx_extensionname_domain_model_modelname'] = array(
  2. 'ctrl' => array(
  3. ...
  4. 'requestUpdate' => 'type'
  5. ...
  6. ),
  7. );

Damit wird ein Seitenreload erzwungen, sobald das Dropdown “type” geändert wird. Nun füge ich im TCA in der Datei Configuration/TCA/Modelname.php meine drei Felder ein:

  1. 'type' => array(
  2. 'exclude' => 0,
  3. 'label' => 'LLL:EXT:extensionname/Resources/Private/Language/locallang_db.xml:tx_extensionname_domain_model_modelname.type',
  4. 'config' => array(
  5. 'type' => 'select',
  6. 'items' => array(
  7. array('Typ A', 'typeA'),
  8. array('Typ B', 'typeB'),
  9. array('Typ C', 'typeC')
  10. )
  11. ),
  12. ),
  13. 'val' => array(
  14. 'exclude' => 0,
  15. 'label' => 'LLL:EXT:extensionname/Resources/Private/Language/locallang_db.xml:tx_extensionname_domain_model_modelname.val',
  16. 'config' => array(
  17. 'type' => 'input',
  18. 'size' => 255,
  19. 'eval' => 'trim,required'
  20. ),
  21. 'displayCond' => array(
  22. 'OR' => array(
  23. 'FIELD:type:=:typeA',
  24. 'FIELD:type:=:typeB',
  25. )
  26. )
  27. ),
  28. 'details' => array(
  29. 'exclude' => 0,
  30. 'label' => 'LLL:EXT:extensionname/Resources/Private/Language/locallang_db.xml:tx_extensionname_domain_model_modelname.details',
  31. 'config' => array(
  32. 'type' => 'input',
  33. 'size' => 30,
  34. 'eval' => 'trim,required'
  35. ),
  36. 'displayCond' => 'FIELD:type:=:typeC'
  37. ),

displayCond gibt an, unter welchen Umständen die Felder sichtbar sein sollen.

Extbase: Bilder in Model behandeln

16. Juli 2015

Wenn es in einem Model ein Bild geben soll, dann kann man das am besten über FileReference lösen. Zuerst definiert man das Bild, das wir mal $image nennen, im Model:

  1. /**
  2. * image
  3. *
  4. * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
  5. */
  6. protected $image = NULL;
  7. /**
  8. * Returns the image
  9. *
  10. * @return \TYPO3\CMS\Extbase\Domain\Model\FileReference $image
  11. */
  12. public function getImage() {
  13. return $this->image;
  14. }
  15. /**
  16. * Sets the image
  17. *
  18. * @param \TYPO3\CMS\Extbase\Domain\Model\FileReference $image
  19. * @return void
  20. */
  21. public function setImage(\TYPO3\CMS\Extbase\Domain\Model\FileReference $image) {
  22. $this->image = $image;
  23. }

In der Datenbank ist das Feld “image” ein normales integer, Länge 11, unsigned. Und nun kann man im Typo3 dem entsprechenden Model ein Bild zuweisen. Um das ganze dann mit Fluid in der view darzustellen, macht man folgendes:

  1. <f:if condition="{item.image}"><f:image src="{item.image.uid}" treatidasreference="1"/></f:if>

Typo3: Variablen, wartbar im Backend

15. Juli 2015

Lange habe ich nicht durchschaut, wie man am besten kleinere Einstellungen im Typo3 wartbar macht. In meinem konkreten Fall wollte ich die Backend User entscheiden lassen, ob und wieviele Einträge in einem cronjob gemacht werden. Was ganz gut funktioniert: das ganze über die Settings der extbase Extension zu machen. In der constants.txt:

  1. # cat=plugin.tx_extensionname//a; type=int+; label=How many loops should there be?
  2. loopCount = 5
  3. # cat=plugin.tx_extensionname//b; type=boolean; label= Do the cronjob?
  4. doCronjob = 1

Wichtig ist der scheinbar auskommentierte Bereich über der Variablen, wo definiert wird, um welchen Typ es sich handelt (hier gibt es eine genauere Referenz möglicher Typen) und welches Label die Werte haben.
Das ganze lässt sich dann im Typo3 warten, indem man (auf der Seite, wo das Template eingebunden ist) auf Template klickt. Oben im Dropdown wählt man dann “Constant Editor” und unten im Dropdown müsste dann tx_extensionname aufscheinen.
Damit das ganze dann auch im cronjob verfügbar ist, fügt man in der setup.txt folgendes ein:

  1. plugin.tx_extensionname {
  2. settings {
  3. loopCount = {$plugin.tx_extensionname.settings.loopCount}
  4. doCronjob = {$plugin.tx_extensionname.settings.doCronjob}
  5. }
  6. }
  7. module.tx_extensionname < plugin.tx_extensionname

Settings leer -> Statisches Template einbauen

09. Juli 2015

Das Problem: ich hatte in constants.txt und setup.txt meiner neuen extbase extension eine storagePid definiert und wollte diese nun im extbase Controller auslesen. Aber irgendwie war in $this->settings die storagePid nicht drin, egal wie oft ich den cache gelöscht habe. Ich ahnte schon, dass ich unter Template -> Template Datensatz bearbeiten -> erweitert das statische Template für meine Extension hinzufügen muss. Blöderweise gab es meine Extension gar nicht zur Auswahl. Woran liegt das?
Im ext_tables.php der Extension muss man folgende Zeile einfügen:

  1. \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile($_EXTKEY, 'Configuration/TypoScript', 'DERNAME');

Nach dem Einfügen dieser Zeile ist die Extension in der Auswahl verfügbar und ich kann sie den statischen Templates hinzufügen.