Ergebnis 1 bis 6 von 6

Thema: DCA: existierendes Feld, eigene Übersetzung

  1. #1
    Contao-Nutzer
    Registriert seit
    17.07.2010.
    Beiträge
    127

    Standard DCA: existierendes Feld, eigene Übersetzung

    Hallo zusammen,

    ich verwende in einem eigenen Content Element das bereits existierende Feld singleSRC um eine Dateiauswahl anzuzeigen:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['palettes']['mymodule'] = '
        {type_legend}, type;
        {mymodule_legend}, singleSRC
    '

    Die Funktion passt und ich kann so die bereits existierende Spalte verwenden.

    Nun möchte ich aber in meinem Modul für singleSRC eine eigene Beschreibung hinzufügen, ohne den Text für alle anderen singleSRC (z.B. im CTE Bild) gleich mit zu ändern.

    Folgendes möchte ich also nicht:
    PHP-Code:
    $GLOBALS['TL_LANG']['tl_content']['singleSRC'] = array('Titel''Beschreibung'); // Alle singleSRC werden geändert. 
    Und folgendes geht nicht:
    PHP-Code:
    $GLOBALS['TL_LANG']['tl_content']['mymodule']['singleSRC'] = array('Titel''Beschreibung'); 

    Fällt jemandem eine Lösung ein mit der ich den Code einfach halten kann und keine neue Tabellenspalte brauche?

    Mfg
    sans
    Geändert von sans (25.02.2011 um 14:42 Uhr)

  2. #2
    Gesperrt
    Registriert seit
    02.12.2009.
    Ort
    Berlin
    Beiträge
    103

    Standard

    Also so würde ich das lösen:

    1.) Du kannst eine weitere Methode als "onload_callback" (siehe hier: http://www.contao.org/referenz.html) für den DCA der tl_config definieren:

    PHP-Code:
    array_insert($GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'],0, array
    (
        array(
    'tl_content''checkContext')
    )); 
    2.) Dann fügst Du unterhalb des DCA Arrays eine class an, in der Du diese Methode implementierst:

    PHP-Code:
    class tl_content_extended extends tl_content
    {
        public function 
    checkContext()
        {
            
    // hier wird's nun tricky...
        
    }

    3.) In dieser Methode mußt Du herausfinden, in welchem Context Du bist. In dieser Abhängigkeit überschreibst Du dann das label mit Deinem Wunschwert.

    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['fields']['singleSRC']['label'] = "Mein Label"
    Ich gebe zu, das ist jetzt Theorie und ganz schnell runtergetippt ohne es zu validieren.
    Evtl. klappt's auch nicht, weil vielleicht eine Änderung der DCA im "onload_callback" schon zu spät kommt und die DCA da bereits komplett geparsed ist... Dann muß man einen anderen Punkt (1.) finden.

    In Punkt (3.) habe ich noch nicht zu Ende gedacht, wie man den Context bestimmt. Dazu muß man gucken, welche Palette gerade aktuell. Da beisst sich die Katze in den Schwanz. Wenn die DCA schon fertig geparsed ist, dann ist das leicht, aber dafür macht (1.) dann Schwierigkeiten.

    Gruß,
    Matthias

    UPDATE: "onload_callback Wird bei der Initialisierung des DataContainer-Objekts ausgeführt. Ermöglicht z.B. das Prüfen von Zugriffsrechten oder die dynamische Änderung des Data Container Array zur Laufzeit." (http://www.contao.org/callback-funktionen.html)
    Geändert von matths (25.02.2011 um 15:22 Uhr)

  3. #3
    Contao-Nutzer
    Registriert seit
    17.07.2010.
    Beiträge
    127

    Standard

    Hallo Matthias,

    danke für deine Antwort.
    Wenn die DCA schon fertig geparsed ist, dann ist das leicht [...]
    Ich befürchte ich brauche auch dafür noch einen Hinweis

    Habe nämlich sowohl $GLOBALS als auch $this durchgesehen aber keinen Anhaltspunkt für ein aktuell geladenes Modul finden können.
    Außer in $arrSession, aber da ich keine individuellen Felder im Modul habe - sondern nur singleSRC - kann ich mich darauf auch nicht verlassen.

    Einfach wäre es natürlich, wenn onload_callback für jedes DCA separat aufgerufen würde...
    Geändert von sans (25.02.2011 um 17:03 Uhr)

  4. #4
    Gesperrt
    Registriert seit
    02.12.2009.
    Ort
    Berlin
    Beiträge
    103

    Standard

    Ok. Der Hinweis ist: Such nach der ID des aktuellen Datensatzes, fisch ihn aus der Tabelle und schau nach, welchen type er da hat.

    Ich hab's jetzt mal ausprobiert. Also der Code für die von mir erfundene Methode checkContext wäre dann bei Dir in etwa:

    PHP-Code:
    public function checkContext()
    {
        
    $objContent $this->Database->prepare("SELECT type FROM tl_content WHERE id=?")
            ->
    limit(1)
            ->
    execute($this->Input->get('id'));
        if (
    $objContent->numRows 0)
        {
            
    $objContent->next();
            if (
    $objContent->type == 'mymodule')
            {
                
    $GLOBALS['TL_DCA']['tl_content']['fields']['headline']['label'] = $GLOBALS['TL_LANG']['tl_content']['mymodule_headline'];
            }
        }

    Insgesamt muss man aber nun auch mal fragen: Was wiegt schwerer? Ein zusätzliches Feld in der Tabelle tl_content oder diese von mir beschriebene Methode, die nun ein paar Zeilen Code & ein SELECT Statement "schwer" ist?

    Vermutlich Geschmackssache. Erlaubt ist, was gefällt.

    Schönes Wochenende,
    Matthias

  5. #5
    Contao-Nutzer
    Registriert seit
    17.07.2010.
    Beiträge
    127

    Standard

    Haha, echt genial Auf die Idee bin ich natürlich nicht gekommen.
    Vor allem funktioniert es wunderbar.

    Aber wahrscheinlich wäre das zusätzliche Feld für die Zukunft flexibler, sollten mal weitere dazu kommen oder eine Namensänderung anstehen...

    Auf jeden Fall vielen Dank für die freundliche Hilfe

    Edit: eine andere Möglichkeit wäre ein eigenes DCA-Feld zu erstellen, dann aber mit der save_callback doch in die bereits existierende Tabellenspalte hineinschreiben.
    Weniger Code gibt das aber nicht
    Geändert von sans (26.02.2011 um 10:06 Uhr)

  6. #6
    Gesperrt
    Registriert seit
    02.12.2009.
    Ort
    Berlin
    Beiträge
    103

    Standard

    Zitat Zitat von sans Beitrag anzeigen
    Edit: eine andere Möglichkeit wäre ein eigenes DCA-Feld zu erstellen, dann aber mit der save_callback doch in die bereits existierende Tabellenspalte hineinschreiben.
    Weniger Code gibt das aber nicht
    Stimmt! Sehr gut! Der Lösungsansatz gefällt mir auch. Dazu hatte ich gerade vor kurzem einen Thread (http://www.contao-community.de/showthread.php?17295), wie das mit dem "save_callback" und "doNotSaveEmpty" geht. Der könnte da weiterhelfen.

    ps. Das Thema hat mich selbst interessiert - da hilft man gerne!

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Qualität der Übersetzung
    Von Wurzel im Forum Mehrsprachigkeit
    Antworten: 6
    Letzter Beitrag: 30.08.2010, 21:36
  2. frage zu übersetzung
    Von blueamerican im Forum Mehrsprachigkeit
    Antworten: 0
    Letzter Beitrag: 12.08.2010, 16:07
  3. Übersetzung der Mitgliederfelder
    Von mandrael im Forum xtmembers
    Antworten: 5
    Letzter Beitrag: 30.03.2010, 22:14
  4. Teilweise Übersetzung
    Von zoop im Forum changelanguage
    Antworten: 2
    Letzter Beitrag: 29.07.2009, 22:20

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •