2016-07-17 32 views
0

Ich habe mir eine kleine Erweiterung im Extension Builder angeklickt. Es ist ein allgemeines Objekt (Wand) mit IRRE-Elementen (Fenster in der Wand - 1: n). Dieses IRRE-Element hat eine Auswahlbox (Fensterfarbe) mit verschiedenen Werten. Ich habe die Werte im Override-Ordner hinzugefügt, damit sie nicht überschrieben werden, wenn ich ein weiteres Feld im Extension Builder hinzufüge.TYPO3 Extension-Builder Ausgang Auswahl-Wert von IRRE in Fluid

In meinem Template durchlaufe ich alle n Elemente und versuche jedes in einem Teil auszugeben. Aber jetzt im Browser werden nur die IDs angezeigt und nicht die Werte.

Hier sind meine TCA-Aufschalten:

$GLOBALS['TCA']['MY_EXTENSIO']['columns']['color']['config']['items'] = [ 
['Green', 0], 
['Red', 1], 
['Blue', 2], 
['Gray with orange dots', 3], 
]; 

So wie ich es in dem Teil

mache
{window.color} // window is the passed variable of the loop 

Im Backend alles funktioniert gut. Auch wenn ich Daten speichere, neu laden ... Es ist immer der Name der Farbe (z. B. "Blau") ausgewählt. Aber im Frontend ist die Ausgabe einfach "2" - die ID der Farbe. Ich habe nichts anderes: eher ich änderte den Controller, noch arbeitete ich multilangue ...

Hat jemand von Ihnen Ahnung für mich? Ich googele seit Stunden ohne Ergebnis.

+1

Ihre TCA Konfiguration Auswahlbox in BE zeigen, werden Sie deshalb gespeichert von BE speichert es den Wert der Auswahlbox, wie Sie 2 für Blau gegeben haben. Sie können einen Wert wie ['Blau' => '# 00F'] angeben und müssen überprüfen, ob der Feldtyp 'Farbe' der DB '' varchar '' oder 'numerisch' ist. In diesem Fall benötigen Sie Ihren DB-Feldtyp varchar. –

+0

Wie sah die TCA-Feldkonfiguration vor der Überschreibung aus? Kannst du es hier posten? –

+0

@Ghanshyam Gohel, Ich habe den Code geändert, wie Sie vorgeschlagen haben, aber jetzt ist es unmöglich, einen Eintrag im Backend zu speichern. Es tritt jedes Mal ein Fehler auf: " 1: Diese Felder von Datensatz 3 in der Tabelle" tx_hous_domain_model_window "wurden nicht korrekt gespeichert: color! Die Werte haben sich möglicherweise aufgrund der Typumwandlung der Datenbank geändert." Gibt es eine Möglichkeit, die Datenbank zu ändern? – user1508609

Antwort

1

TCA-Aufschalten:

$GLOBALS['TCA']['MY_EXTENSIO']['columns']['color']['config']['items'] = [ 
['Green', '#060'], 
['Red', '#F00'], 
['Blue', '#00F'], // for better practice I suggest classes like: ['Blue', 'blue-color-code'] 
['Gray with orange dots', '#999'], 
]; 

ändern Feldtyp in ext_tables.sql -> donot vergessen DB zu aktualisieren von Install-Tool

CREATE TABLE tx_hous_domain_model_window (
    color varchar(255) DEFAULT '' NOT NULL 
); 

Nur Schau dir an, wie dein Model aussehen sollte:

class Window extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity { 
    protected $color = ''; 

    public function getColor() { 
     return $this->color; 
    } 
    public function setColor($color) { 
     $this->color = $color; 
    } 
} 

Ihrer Ansicht:

{window.color} <!-- either you'll get '#00F' for blue or 'blue-color-code' class as per your TCA config --> 

Donot vergessen Werkzeug Cache löschen installieren

+0

ist das der beste Weg? –

+0

@SebastianSchmal da gibt es viele Wege, um das zu erreichen, was man braucht, aber immer von der Anforderung abhängig. Generell bevorzuge oder suggeriere ich die Verwendung von Klassen, wie ich es im obigen Beispiel gegeben habe. http: // Screencast.com/t/8OXXVRBGu –

+0

@SebastianSchmal wie schon angedeutet es gibt verschiedene Wege. Ich würde vorschlagen, ein Domain-Modell auch für Color zu verwenden. Sie können dann entscheiden, ob es ein ValueObject oder ein DomainEntity sein soll - wenn das Verhalten nur an die Attribute (RGB-Werte, CYMK-Werte, ..) gebunden ist, ist es im Grunde ein ValueObject –