Contao Camp 2019 in München - Save the date!
Ergebnis 1 bis 9 von 9

Thema: Eigene Erweiterung – mehrsprachig

  1. #1
    Contao-Nutzer
    Registriert seit
    29.06.2016.
    Beiträge
    166

    Standard Eigene Erweiterung – mehrsprachig

    Hallo,

    angenommen ich habe eine eigene Erweiterung erstellt welche nur ein Datenbankfeld namens "Abteilung" enthält.
    Das Feld ist in der dca-Datei folgendermaßen festgelegt:
    Code:
    		'abteilung' => array
    		(
    			'label'                   => &$GLOBALS['TL_LANG']['tl_meineerweiterung']['abteilung'],
    			'exclude'                 => true,
    			'inputType'               => 'text',
    			'eval'                    => array('mandatory'=>true, 'maxlength'=>8, 'tl_class'=>'w50'),
    			'sql'                     => "varchar(8) NOT NULL default ''"
    		),
    Wie gehe ich nun vor wenn ich diese Erweiterung mehrsprachig machen möchte?

    Unter "mehrsprachig" verstehe ich folgendes:
    Ich möchte das der Redakteur beim befüllen des Felds "Abteilung" auch sofort die englische Übersetzung der jew. Abteilung in ein Feld schreiben kann.


    Muss ich dann für jede Sprache ein eigenes Feld anlegen:
    Code:
    		'abteilung_de' => array
    		(
    			'label'                   => &$GLOBALS['TL_LANG']['tl_meineerweiterung']['abteilung_de'],
    			'exclude'                 => true,
    			'inputType'               => 'text',
    			'eval'                    => array('mandatory'=>true, 'maxlength'=>8, 'tl_class'=>'w50'),
    			'sql'                     => "varchar(8) NOT NULL default ''"
    		),
    		'abteilung_en' => array
    		(
    			'label'                   => &$GLOBALS['TL_LANG']['tl_meineerweiterung']['abteilung_en'],
    			'exclude'                 => true,
    			'inputType'               => 'text',
    			'eval'                    => array('mandatory'=>true, 'maxlength'=>8, 'tl_class'=>'w50'),
    			'sql'                     => "varchar(8) NOT NULL default ''"
    		),
    Würdet ihr das so machen, oder gibt es da einen alternativen Weg?

    Hoffe ihr könnt mir da helfen.
    Vielen Dank!

  2. #2
    Contao-Fan
    Registriert seit
    16.11.2012.
    Ort
    Freiburg
    Beiträge
    478

    Standard

    hierzu würde ich dir folgende Erweiterung empfehlen.

    https://github.com/terminal42/contao-DC_Multilingual
    Grüße
    Alex

  3. #3
    Contao-Nutzer
    Registriert seit
    29.06.2016.
    Beiträge
    166

    Standard

    Danke schon mal für den Tipp
    Hab die Erweiterung nun installiert.

    Sie funktioniert auch – die Einträge können im Backend nun ins Englische übersetzt werden.

    Nur mit der Ausgabe hab ich meine Probleme:
    Durch die Erweiterung werden Einträge in der Datenbank ja nun doppelt angelegt – für jede Sprache ein Duplikat des Eintrags.
    Wie kann ich nun im Frontend nur die aktive Sprache ausgeben?

    Meine Erweiterung verwendet folgenden Code zur Ausgabe im FE:
    Code:
    	protected function compile()
    	{
    		$objAbteilungen = \AbteilungenModel::findAll();
    
    		$arrAbteilungen = array();
    		while ($objAbteilungen->next())
    		{
    			$arrAbteilungen[] = $objAbteilungen->abteilung;
    		}
    		$this->Template->abteilungen = $arrAbteilungen;
             }
    ... ich nehme an ich muss die findAll-Methode meines Models anpassen.
    Könnt ihr mir sagen wie ich das am Besten mache?

    Danke!

  4. #4
    Contao-Fan
    Registriert seit
    16.11.2012.
    Ort
    Freiburg
    Beiträge
    478

    Standard

    Kannst du mal deinen Code von AbteilungenModel zeigen?
    Grüße
    Alex

  5. #5
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Beiträge
    1.684
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Dein Model muss von dem Basis-Model von der Erweiterung erben:
    https://github.com/terminal42/contao...sing-the-model

    Dann wird automatisch die entsprechende Sprachversion geladen.

  6. #6
    Contao-Nutzer
    Registriert seit
    29.06.2016.
    Beiträge
    166

    Standard

    Mein Model sieht bisher so aus:
    Code:
    namespace Contao;
    
    class AbteilungenModel extends \Model
    {
        protected static $strTable = 'tl_abteilungen';
    }
    ... das liefert mir nun alle Einträge (EN und DE) im Frontend.


    Wenn ich mein Model gemäß der Anleitung anpasse:
    Code:
    namespace Contao;
    
    class AbteilungenModel extends Terminal42\DcMultilingualBundle\Model\Multilingual
    {
        protected static $strTable = 'tl_abteilungen';
    
        public static function findAll()
        {
            $arrColumns = array("t1.disable=''");
            return static::findBy($arrColumns, null);
        }
    }
    ... bekomme ich einen Fehler im FE.
    Bin mir sicher das ich hier einiges falsch mache

    Darf ich etwa nur die findActive-Methode verwenden?

  7. #7
    Contao-Urgestein
    Registriert seit
    29.10.2009.
    Beiträge
    1.684
    Partner-ID
    626
    User beschenken
    Wunschliste

    Standard

    Deine Namespaces stimmen nicht, wenn du im Namespace Contao arbeitest, musst du selbstredend das Model mit vorgestellten Slash laden, oder gleich über ein use Statement nutzen:

    PHP-Code:

    namespace Contao;

    use 
    Terminal42\DcMultilingualBundle\Model\Multilingual as MultilingualModel;

    final class 
    AbteilungenModel extends MultilingualModel
    {


  8. #8
    Contao-Nutzer
    Registriert seit
    29.06.2016.
    Beiträge
    166

    Standard

    Alles klar – das wars – nun funktioniert alles.
    Danke für eure Hilfe

  9. #9
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.382
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Aber dein eigenes Model gehört nicht in den Namespace von Contao
    terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.

Aktive Benutzer

Aktive Benutzer

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

Lesezeichen

Lesezeichen

Berechtigungen

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