Contao-Camp 2024
Ergebnis 1 bis 13 von 13

Thema: Catalog Manager – Wechsel zwischen den Sprachen in der Detailansicht

  1. #1
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard Catalog Manager – Wechsel zwischen den Sprachen in der Detailansicht

    Ich hab mit dem Catalog Manager ein Backend Modul namens "Projekte" erstellt.
    Dann hab ich im Modul zwei Eingabefelder angelegt:
    - project_description_de
    - project_description_en

    Das Modul wird bei einer zweisprachigen Contao-Seite verwendet (DE/EN).
    Im Template (ctlg_view_master_projects.html5) gebe ich nun immer (je nachdem in welchem Seitenbaum ich mich befinde) die richtige Projekt-Beschreibung aus:
    Code:
    {{iflng::de}}
        <?= $this->project_description_de ?>
    {{iflng::en}}
        <?= $this->project_description_en ?>
    {{iflng}}
    ... der Kunde will das so, d.h. die Eingabefelder für DE- und EN-Text sollen direkt untereinander erscheinen.
    So wie hier zu sehen: Bildschirmfoto 2022-05-06 um 11.34.26.png

    Das funktioniert soweit.
    Doch nun zu meinem Problem:

    Wenn ich mich in der Detailansicht eines Projekts befinde:
    www.domain.at/de/projekt-details/projekt-titel
    ... und dann mit dem Modul "terminal42/contao-changelanguage" zur EN-Version der Seite wechsle, komme ich hier hin:
    www.domain.at/en/project-detail
    ... es wir die englsiche Projekt-Detail-Seite ohne Inhalt angezeigt – da das Alias in der URL (projekt-titel) nicht mitgegeben wurde.

    Kann ich diesen Alias beim Sprachwechsel irgendwie mitgeben?
    So dass der Wechsel zu EN dann hier hin führt:
    www.domain.at/en/project-detail/projekt-titel

    Dass der Alias eines Projekts immer in der gleichen Sprache ist, ist OK.


    Danke für eure Hilfe und Expertise!
    lg Georg

  2. #2
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.713
    User beschenken
    Wunschliste

    Standard

    Ich komme zwar vom "MM-Lager" aber Du könntest folgende Sachen probieren

    * bei den Seiteneigenschaften bei URL-Parameter "auto_item" eintragen - das ist der versteckte Key vom Value Alias
    * wenn das nicht geht, mit Rewriting an URL parameter bekommt man das hin, auch für komplexere URLs

  3. #3
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard

    Danke für die Tips.


    Das mit "auto_item" hat leider nicht funktioniert.


    Hätte nun das mit dem Hook probiert.
    Scheitere aber schon daran dass eine Hook-Klasse bzw. Methode ausgeführt wird.

    Habs es mal der Einfachheit halber mit dem generatePage-Hook probiert:

    Datei #1 (im root-Verzeichnis):
    contao/config.php
    Code:
    <?php
    use App\EventListener\MyClass;
    
    $GLOBALS['TL_HOOKS']['generatePage'][] = array(MyClass::class, 'myGeneratePage');

    Datei #2:
    src/EventListener/MyClass.php
    Code:
    <?php
    namespace App\EventListener;
    
    class MyClass
    {
        public function myGeneratePage(\PageModel $objPage, \LayoutModel $objLayout, \PageRegular $objPageRegular)
        {
            dump($objPage);
        }  
    }
    ... danach Cache gelöscht.
    Resultat: Es wird nichts ausgegeben beim Seitenaufruf im Frontend

    Der Weg müsste doch in Contao 4.11 noch klappen, oder?





    Wenn ich das hier auf der Konsole eingebe:
    Code:
    vendor/bin/contao-console debug:container App\\EventListener\\MyClass
    ... bekomme ich folgendes:
    Code:
    Information for Service "App\EventListener\MyClass"
    ===================================================
    
     ---------------- ---------------------------
      Option           Value
     ---------------- ---------------------------
      Service ID       App\EventListener\MyClass
      Class            App\EventListener\MyClass
      Tags             -
      Public           no
      Synthetic        no
      Lazy             no
      Shared           yes
      Abstract         no
      Autowired        yes
      Autoconfigured   yes
     ---------------- ---------------------------
    
    
     ! [NOTE] The "App\EventListener\MyClass" service or alias has been removed or inlined when the container was compiled.
    Geändert von thesweetg (06.05.2022 um 16:04 Uhr)

  4. #4
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.713
    User beschenken
    Wunschliste

    Standard

    sieht für mich erstmal i.O. aus...

    Debugmodus war an?

    probier mal dd() statt dump() (ist dump&die)

  5. #5
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard

    Ja, der Debug-Modus ist an.
    Danke für den Tip mit "dd" – die Funktion kannte ich nicht.
    Führt jedoch leider auch nicht zum Erfolg, de Debug-Konsole spuckt nichts aus.


    Das hier funktioniert jedoch interessanterweise:

    Code:
    <?php
    // src/EventListener/CompileArticleListener.php
    
    namespace App\EventListener;
    
    use Contao\CoreBundle\ServiceAnnotation\Hook;
    use Contao\Module;
    use Contao\FrontendTemplate;
    
    /**
     * @Hook("compileArticle")
     */
    class CompileArticleListener
    {
        public function __invoke(FrontendTemplate $template, array $data, Module $module): void
        {
            $template->customContent = '<p>This will be available in mod_article.html5 via $this->customContent</p>';
        }
    }
    ... ich konnte den customContent im Article-Template ausgeben.

    Nur kann ich den ChangeLanguage-Hook ja so nicht ansprechen, oder?

  6. #6
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.713
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von thesweetg Beitrag anzeigen
    Nur kann ich den ChangeLanguage-Hook ja so nicht ansprechen, oder?
    ich glaube nicht, dass CL mit den Annotations zurecht kommt - müsstest Du mal Andy oder Toflar fragen...

  7. #7
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard

    Aber grundsätzlich müsste das hier:

    Code:
    <?php
    
    // contao/config.php
    
    use App\EventListener\MyClass;
    
    $GLOBALS['TL_HOOKS']['generatePage'][] = array(MyClass::class, 'myGeneratePage');
    Code:
    <?php
    
    // src/EventListener/MyClass.php
    
    namespace App\EventListener;
    
    class MyClass
    {
        public function myGeneratePage(\PageModel $objPage, \LayoutModel $objLayout, \PageRegular $objPageRegular)
        {
            dd($objPage);
        }  
    }
    ... doch funktionieren, oder?

  8. #8
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.713
    User beschenken
    Wunschliste

    Standard

    mach mal ein dump in die config.php - ob die geladen wird wenn ja, würde ich mal weiter bei der Verarbeitung des Hooks gucken... also in der PageRegular.php

  9. #9
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard

    Ein dump in der config.php gibt auch nichts aus – d.h. offenbar wird die nicht geladen

    Hier wird die Methode beschrieben die ich versuche:
    https://docs.contao.org/dev/framewor...-configuration

    Ich nehme an die Angabe "contao/config.php" bezieht sich auf das Root-Verzeichnis, oder?
    Oder ist hier die "config.php" in einer eigenen Erweiterung gemeint?


    Geht dass das ich den ChangeLanguage-Hook so wie hier geschildert:
    https://docs.contao.org/dev/framewor...ng-annotations
    ... umsetze?

    Hier die Infos zum ChangeLanguage-Hook:
    https://terminal42.github.io/contao-...evelopers.html
    Geändert von thesweetg (07.05.2022 um 08:58 Uhr)

  10. #10
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.713
    User beschenken
    Wunschliste

    Standard

    Struktur: https://docs.contao.org/dev/getting-...ent/#structure

    in der Doku von ChangeLanguage habe ich nichts gefunden on die Annotations unterstützt werden - bin mir nicht sicher, ob das per see bei allen Hooks geht...

  11. #11
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard

    Habs jetzt mal geschafft den Hook zu aktivieren.
    Und zwar so:

    Code:
    <?php
    
    // src/EventListener/ChangelanguageNavigation.php
    
    namespace App\EventListener;
    
    /**
     * @Hook("changelanguageNavigation")
     */
    class ChangelanguageNavigation
    {
        public function __invoke(\Terminal42\ChangeLanguage\Event\ChangelanguageNavigationEvent $event)
        {
    
            // The target root page for current event
            $targetRoot = $event->getNavigationItem()->getRootPage();
    
            // The target language (en or de)
            $language = $targetRoot->rootLanguage; 
    
            if($GLOBALS['TL_LANGUAGE'] == $language):
                
                dump($event->getUrlParameterBag());
                // diese Ausgabe ist bei allen Versuchen leer
                // d.h. von der Projekt-Detailseite-DE werden beim Wechsel zur Projekt-Detailseite-EN keine Parameter mitgegeben
                
                // falls ich es schaffe dass der Alias der vorigen Seite als Parameter mitgegeben wird, dann würde ich in etwa so fortfahren:
                
                // den Alias der vorigen Seite abfragen
                // $alias = $event->getUrlParameterBag()->getUrlAttribute('items');  
    
                // Pass the new alias to ChangeLanguage
                // $event->getUrlParameterBag()->setUrlAttribute('items', $alias);              
    
            endif;
    
        }
    }
    Den Hook kann ich zwar nun verwenden, aber wie man in den Kommentaren im Code sieht scheitere ich an meinem eigentlichen Vorhaben

    Hier nochmal mein Urpsrungsproblem:

    Ich möchte ja beim Wechsel von:
    company.at/de/projekte/projekt-alias
    ... zu:
    company.at/en/projects/projekt-alias
    ... keine leere Seite vorfinden.

    Nun muss ich beim Wechsel zur englischen Detailansicht-Seite irgendwie den Alias oder die ID vom aktuellen Projekt mitgeben.
    Das krieg ich nicht hin.

    Egal was ich hier eingebe:
    Bildschirmfoto 2022-05-07 um 11.33.44.png
    ... egal ob "ctlg_projekte", "id", "auto_item", "items" oder "projekte" – nichts kommt auf der englischen Detailseite an

    Der UrlParameterBag ist dort immer leer:
    Code:
    Terminal42\ChangeLanguage\Navigation\UrlParameterBag {#1029 ?
      -attributes: []
      -query: []
    }
    Geändert von thesweetg (07.05.2022 um 10:41 Uhr)

  12. #12
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.713
    User beschenken
    Wunschliste

    Standard

    ich habe Dich so verstanden, dass Du bei company.at/en/projects/projekt-alias KEINE leere Seite hast sondern auf company.at/de/projekte/projekt-alias in CL bei EN ein company.at/en/projects steht und dir dort das "/projekt-alias" fehlt ... oder?

    Siehe Doku: du musst mit Deinem echten Key arbeiten und dardst statt 'items' nicht 'auto_item', einsetzen!

    Wie das beim CM läuft kann ich Dir nicht sagen - bin bei MM beheimatet ;-)

  13. #13
    Contao-Fan
    Registriert seit
    29.06.2016.
    Beiträge
    502

    Standard

    Sorry, hab ich bei meiner letzen Nachricht etwas missverständlich formuliert.

    Ich möchte dass ich mit dem ChangeLanguage-Modul von:
    company.at/de/projekte/projekt-alias
    ... zu:
    company.at/en/projects/projekt-alias
    ... wechseln kann.


    Momentan ist es aber leider so:

    Wenn ich mich auf dieser Seite befinde:
    company.at/de/projekte/projekt-alias
    ... und mit dem ChangeLanguage-Modul zu EN wechsle, lande ich hier:
    company.at/en/projects

    ... dh. das englische Project-Reader-Modul weiß nicht welches Projekt es anzeigen soll.




    In Contao 3.5 konnte man bei den Einstellungen das "auto_item" in der URL deaktivieren.
    Geht das in Contao 4 auch noch irgendwie?
    ... vielleicht würde mich das der Lösung näher bringen.
    Geändert von thesweetg (07.05.2022 um 10:53 Uhr)

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
  •