[Frage] Select Feld im Backend - Wie kommt der "Klartext" in das Frontend [Gelöst]

  • boJahJah boJahJah
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    05. 09. 2013, 16:07

    Hallo zusammen,

    ich befürchte, dass ich etwas Grundsätzliches nicht so recht verstanden habe, aber ich weiß nicht mehr wo ich noch nach einer Lösung suchen soll. Würde mich freuen, wenn ich hier in die richtige Richtung geschubst werde.

    Im Backend gibt es ein Select-Feld, in dem eine Dienstleistung angegeben werden kann (die Dienstleistungen werden aus einer anderen Tabelle geladen). In der Datenbank wird jetzt aber eine Zahl (z.B. 1) gespeichert und nicht der "Klartext" (z.B. "reinigen").
    Wie bekomme ich es hin, dass im Frontend die Zahl wieder zu dem entsprechenden Klartext wird?

  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    09. 09. 2013, 09:28 - Lösung

    Das Grundproblem das Du hast ist, dass du die Eigenschaft "dienstleistungsart" in deiner Stellenbeschreibung als string behandelst. Das ist sie aber nicht! Du machst ja eine Relation zum Model "Tx_Stellenliste_Domain_Model_Dienstleistung".

    D.h. in Stellenbeschreibung sollte es etwa so aussehen:

    1. /**
    2.   * @var Tx_Stellenliste_Domain_Model_Dienstleistung
    3.   **/
    4. protected $dienstleistungsart = '';
    5.  
    6. public function __construct($berufsbezeichnung, $fachrichtung = '', $dienstleistungsart = NULL, $beginn = '') {
    7. $this->setBerufsbezeichnung($berufsbezeichnung);
    8. $this->setFachrichtung($fachrichtung);
    9. $this->setDienstleistungsart($dienstleistungsart);
    10. $this->setBeginn($beginn);
    11. }
    12.  
    13. /**
    14.   * @return Tx_Stellenliste_Domain_Model_Dienstleistung
    15.   */
    16. public function getDienstleistungsart() {
    17. return $this->dienstleistungsart;
    18. }
    19.  
    20.  
    21. /**
    22.   * @param Tx_Stellenliste_Domain_Model_Dienstleistung $dienstleistungsart
    23.   */
    24. public function setDienstleistungsart($dienstleistungsart = NULL) {
    25. $this->dienstleistungsart = $dienstleistungsart;
    26. }

    Und dann wird auch klar wie Du es in Fluid verwendest:
    {stelle.dienstleistungsart.dienstleistung} (Da wäre "name" als property sinnvoller gewesen, wie Harald1972 schon schreibt.)

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!


  • 1
  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    05. 09. 2013, 19:59

    Naja Du solltest in deinem Model eine Relation zwischen Dienstleistung und dem anderen Datensatz haben. Nennen wir ihn "Anbieter" (ich weiß ja nicht was das andere ist), d.h. dein Anbierter Objekt sollte eine Methode getDienstleistung() haben das dir dann das entsprechende Dienstleistung Objekt zurückgibt. Richtig konfiguriert macht das Extbase alles für Dich.

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • boJahJah boJahJah
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    06. 09. 2013, 12:00

    Danke für deine Antwort, kitsunet. Doch das habe ich, glaube ich. Also mein Problem ist, dass ich im Frontend nur eine Zahl (ID?) angezeigt bekomme, aber gerne den Klartext dort stehen hätte. Ich poste mal etwas mehr Input; wenn ich mit der Nase auf eine konkrete Stelle gestoßen werden, verstehe ich es vielleicht etwas besser. Der Benutzer soll eine Liste mit verfügbaren Stellen anzegeigt bekommen. In dieser Form:

    Berufsbezeichnung | Fachrichtung | Dienstleistung | Beginn

    statt bisher:
    Berufsbezeichnung | Fachrichtung | 1 | Beginn

    In dem View steht (auszugsweise):

    1. {stelle.berufsbezeichnung} | {stelle.fachrichtung} | {stelle.dienstleistungsart} | ab dem <f:format.date format="d.m.Y">{stelle.beginn}

    Im Backend werden die verfügbaren Stellen angelegt und verwaltet. Die Dienstleistungen werden in einer eigenen Liste verwaltet und bei den verfügbaren Stellen als Select-Feld eingeblendet. Bis hier hin funktioniert auch alles wie es soll. In der ext_tables.php sieht der Teil so aus:

    1. 'dienstleistungsart' => array(
    2. 'label' => 'Dienstleistungsart',
    3. 'config' => array(
    4. 'type' => 'select',
    5. 'foreign_table' => 'tx_stellenliste_domain_model_dienstleistung',
    6. 'maxitems' => 1
    7. )
    8. ),

    Das Model der Dienstleistung sieht so aus:
    1. class Tx_Stellenliste_Domain_Model_Dienstleistung extends Tx_Extbase_DomainObject_AbstractEntity{
    2.  
    3. /**
    4. * @var string
    5. **/
    6. protected $dienstleistung = '';
    7.  
    8. public function __construct($dienstleistung = '') {
    9. $this->setDienstleistung($dienstleistung);
    10. }
    11.  
    12. public function getDienstleistung() {
    13. return $this->dienstleistung;
    14. }
    15.  
    16. public function setDienstleistung($dienstleistung) {
    17. $this->dienstleistung = (string)$dienstleistung;
    18. }
    19. }

    Und hier noch die Teile aus dem Model der Stellenbeschreibung, in denen etwas über die Dienstleistungen steht:

    1. /**
    2. * @var string
    3. **/
    4. protected $dienstleistungsart = '';
    5.  
    6. public function __construct($berufsbezeichnung, $fachrichtung = '', $dienstleistungsart = '', $beginn = '') {
    7. $this->setBerufsbezeichnung($berufsbezeichnung);
    8. $this->setFachrichtung($fachrichtung);
    9. $this->setDienstleistungsart($dienstleistungsart);
    10. $this->setBeginn($beginn);
    11. }
    12.  
    13. public function getDienstleistungsart() {
    14. return $this->dienstleistungsart;
    15. }
    16.  
    17. public function setDienstleistungsart() {
    18. $this->dienstleistungsart = (string)$dienstleistungsart;
    19. }

    Ich weiß einfach nicht wo der Fehler liegt, bzw. wo ich überhaupt ansetzen muss. Würde mich sehr über Hilfe freuen!

  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    07. 09. 2013, 13:31

    Hallo,

    ich bin etwas verwirrt, weil du in deinem Model Dienstleistungsart noch einen string $dienstleistungsart hast. Ob das zu Namenskonflikten führen kann, weiß ich nicht. Ich würde das prinzipiell vermeiden und den String einfach nur $name nennen.
    Dann kannst du eigentlich anstatt

    1. {stelle.berufsbezeichnung} | {stelle.fachrichtung} | {stelle.dienstleistungsart}

    so schreiben

    1. {stelle.berufsbezeichnung} | {stelle.fachrichtung} | {stelle.dienstleistungsart.name}

    Außerdem fehlt hier die dienstleistungsart als Übergabe-Parameter:
    (und diese solltest du nicht auf string casten)

    1. public function setDienstleistungsart() {
    2. $this->dienstleistungsart = (string)$dienstleistungsart;
    3. }

    Ich weiß nicht, ob das geht, was du da vorhast, aber du solltest den Namen eines Objektes nicht mit dem Objekt selbst gleichsetzen.
    Deine Tx_Stellenliste_Domain_Model_Dienstleistungart muss dafür getName und setName-Methoden bekommen.

  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    09. 09. 2013, 09:28

    Das Grundproblem das Du hast ist, dass du die Eigenschaft "dienstleistungsart" in deiner Stellenbeschreibung als string behandelst. Das ist sie aber nicht! Du machst ja eine Relation zum Model "Tx_Stellenliste_Domain_Model_Dienstleistung".

    D.h. in Stellenbeschreibung sollte es etwa so aussehen:

    1. /**
    2.   * @var Tx_Stellenliste_Domain_Model_Dienstleistung
    3.   **/
    4. protected $dienstleistungsart = '';
    5.  
    6. public function __construct($berufsbezeichnung, $fachrichtung = '', $dienstleistungsart = NULL, $beginn = '') {
    7. $this->setBerufsbezeichnung($berufsbezeichnung);
    8. $this->setFachrichtung($fachrichtung);
    9. $this->setDienstleistungsart($dienstleistungsart);
    10. $this->setBeginn($beginn);
    11. }
    12.  
    13. /**
    14.   * @return Tx_Stellenliste_Domain_Model_Dienstleistung
    15.   */
    16. public function getDienstleistungsart() {
    17. return $this->dienstleistungsart;
    18. }
    19.  
    20.  
    21. /**
    22.   * @param Tx_Stellenliste_Domain_Model_Dienstleistung $dienstleistungsart
    23.   */
    24. public function setDienstleistungsart($dienstleistungsart = NULL) {
    25. $this->dienstleistungsart = $dienstleistungsart;
    26. }

    Und dann wird auch klar wie Du es in Fluid verwendest:
    {stelle.dienstleistungsart.dienstleistung} (Da wäre "name" als property sinnvoller gewesen, wie Harald1972 schon schreibt.)

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • boJahJah boJahJah
    TYPO3-Anwärter
    0 x
    7 Beiträge
    0 Hilfreiche Beiträge
    09. 09. 2013, 12:19

    Vielen, vielen Dank!
    Jetzt klappt alles wie es soll. Mit der Bedeutung der Kommentare komme ich offensichtlich noch nicht zurecht.

  • 1