Ergebnis 1 bis 9 von 9

Thema: Eigenes Modul mit Sprachwechsler verwenden

  1. #1
    Contao-Nutzer Avatar von humandigital
    Registriert seit
    25.07.2011.
    Ort
    Einsiedeln SZ | Schweiz
    Beiträge
    28

    Frage Eigenes Modul mit Sprachwechsler verwenden

    Hallo zusammen
    Wir haben ein eigenes Modul für Produkte erstellt in dem jedes Produkt in DE, FR und IT erfasst wird.
    Dieses Modul wird jeweils in eine Seite (produkt-detail.html) in jeder Sprache eingesetzt.
    Das Modul erkennt dann die Sprache und zeigt das jeweilige Produkt mit der korrekten Sprache an.
    Soweit alles gut :-)

    Wenn wir nun auf den Sprachwechsler gehen kommt "natürlich" dann die Grund-Seite bei der die Fallback-Seite angegeben ist.
    Beispiel:
    http://www.rematec.ch/cms/de/produkt...tion-3300.html
    -> klick auf Sprache FR und es kommt:
    http://www.rematec.ch/cms/fr/detail-du-produit.html

    Es ist mir klar, dass der Sprachwechsler das Produkt noch nicht kennt ... nur
    kann mir jemand sagen, wie wir innerhalb des Moduls dem Sprachwechsler die Fallback-Seite für das jeweilige Produkt mitgeben können?

    Wir freuen uns auf anregende Tips :-)
    Vielen Dank und Gruss in die Community

  2. #2
    Contao-Nutzer
    Registriert seit
    14.03.2012.
    Ort
    Berlin
    Beiträge
    225

    Standard

    Hi,

    da gibt es einen Hook. Müsste dieser sein:
    $GLOBALS['TL_HOOKS']['translateUrlParameters'][]= array('', '');

    Schaus dir am besten mal bei Isotope oder einem anderen Modul an, wie die es machen.
    https://github.com/isotope/core/blob...ntend.php#L466

    Viel Erfolg damit :-)




    Sent from my iPad using Tapatalk

  3. #3
    Contao-Fan Avatar von bekanntmacher
    Registriert seit
    13.08.2009.
    Ort
    St. Gallen, Schweiz
    Beiträge
    354
    Partner-ID
    6419

    Standard

    Kannst du nicht einfach in deinem Modul die Sprache der Seite abfragen und entsprechend auswerten?

    PHP-Code:
    $objPage->language 

  4. #4
    Contao-Nutzer Avatar von humandigital
    Registriert seit
    25.07.2011.
    Ort
    Einsiedeln SZ | Schweiz
    Beiträge
    28

    Beitrag

    Wow, herzlichen Dank für die schnellen Antworten.

    Innerhalb des Moduls konnte ich das Problem mit "$objPage->language" nicht lösen, da die URL vom Modul ChangeLanguage erstellt wird und ich darauf innerhalb des Moduls keinen Zugriff gesehen habe. Da ist der HOOK genau das Puzzleteil, das mir gefehlt hat. Vielen Dank!!

    Hier ist meine Lösung für alle, die ein ähnliches Problem zu lösen haben:

    => system/modules/my_product_modul/config/config.php
    Code:
    $GLOBALS['TL_HOOKS']['translateUrlParameters'][] = array('My_product_class', 'translateProductUrls');
    Dann habe ich eine Klasse erstellt, in der die Funktion "translateProductUrls" implementiert ist. Es scheint mir besonders wichtig zu sein, dass diese Funktion in einer Klasse (im entsprechenden Ordner) abgelegt wird, da an der Stelle, wo der Hook im "ModuleChangeLanguage" verarbeitet wird, eine Klasse importiert wird. Ich bekam immer Fehlermeldungen, solange ich die Funktion in einer Klasse im Ordner "modules" untergebracht hatte.

    =>system/modules/my_product_modul/classes/My_product_class.php
    Code:
    namespace Contao;
    
    /***
     * Class Hd_produkt
     * Provide methods regarding my_product_modul.
     ***/
    
    class Hd_produkt extends \Frontend
    {
    	 /***
    	 * Hook callback for changelanguage extension to support language switching on product reader page
    	 ****/	
    	 
    	 public function translateProductUrls($arrParams, $strLanguage, $arrRootPage) {
    		
    		// Set the item from the auto_item parameter
    		if (!isset($_GET['product']) && $GLOBALS['TL_CONFIG']['useAutoItem'] && isset($_GET['auto_item']))
    		{
    		    \Input::setGet('product', \Input::get('auto_item'));
    		}
    		if ($this->Input->get('product') != ''){
    			$alias	= ($strLanguage != 'de') ? "alias_".$strLanguage : "alias";
    			// Get the product object
    			$objProdukt = \ProductModel::findProductByAlias(\Input::get('product'));
    				$arrParams['url']['product'] 	= $objProdukt->$alias;
    		}
    		return $arrParams;
    	}
    }
    Ich habe in meiner Produkttabelle für jede Sprache einen eigenen Alias, der aus dem Produktnamen erstellt wird, damit in der URL auch die sprachspezifische Produktbezeichnung angezeigt werden kann. Für die Default-Sprache deutsch heisst das Feld "alias", für die anderen Sprachen wird im Feldnamen das Sprachkürzel angehängt, z.B. "alias_fr". In der Modelklasse "ProductModel" in der Funktion "findProductByAlias" wird sichergestellt, dass das Produkt gefunden wird, egal in welcher Sprache der Alias als Parameter vorliegt.

    Es scheint auch noch wichtig zu sein, dass der "auto_item" Parameter gesetzt wird. Diesen Teil habe ich aus den Contao Core-Modulen abgeschaut und übernommen.

  5. #5
    Contao-Nutzer
    Registriert seit
    10.02.2012.
    Ort
    Basel
    Beiträge
    213
    Partner-ID
    8602

    Standard

    Hallo HumanDigital

    Ganz herzlichen Dank für deinen Beitrag.

    Der hat mir sehr geholfen. Ich habe damit heute meine Metamodels mit [changelanguage] verknüpft.

  6. #6
    Contao-Fan
    Registriert seit
    27.11.2009.
    Beiträge
    326

    Standard

    Auch von mir noch einmal großen Dank für die Lösung!!

    Mit dem Hook lässt sich aber nur der link (url-Parameter) 'übertragen', nicht aber der Titel desselben, oder?

    Viele Grüße!

  7. #7
    Contao-Nutzer
    Registriert seit
    14.06.2016.
    Beiträge
    2

    HTML Weiterer Hook

    Guten Tag,

    ist es möglich, dass Sie einen weiteren Hook in Ihrem Modul einzufügen, so dass man das Tag im Head-Bereich modifizieren kann?
    <link rel="alternate" hreflang=.....

    zB wie folgt

    Code:
    $link = '<link rel="alternate" hreflang="' . $arrRootPage['language'] . '" lang="' . $arrRootPage['language'] . '" href="' . specialchars($domain . $href) . '" title="' . specialchars($pageTitle, true) . '"' . ($objPage->outputFormat == 'html5' ? '>' : ' />');
    
    // HOOK: 
    if (isset($GLOBALS['TL_HOOKS']['changeLanguageAlternateLang']) && is_array($GLOBALS['TL_HOOKS']['changeLanguageAlternateLang']))
    {
        foreach ($GLOBALS['TL_HOOKS']['changeLanguageAlternateLang'] as $callback)
        {
            $this->import($callback[0]);
            $link = $this->{$callback[0]}->{$callback[1]}(
                $arrRootPage['language'],  // hreflang, lang
                specialchars($domain . $href), // href
                specialchars($pageTitle, true), // title
                $objPage->outputFormat == 'html5' // is html5
            );
        }
    }
    
    
    $GLOBALS['TL_HEAD'][] = $link;
    Grüße,
    Fela
    Geändert von fela (14.06.2016 um 10:02 Uhr)

  8. #8
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    In ChangeLanguage 2 wird das nicht gehen. Ein ähnlicher Feature-Request wurde aber vor einiger Zeit bei GitHub gestellt (https://github.com/terminal42/contao...uage/issues/64) und wird in ChangeLanguage v3 enthalten sein (Releasedatum noch unbekannt).
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  9. #9
    Contao-Nutzer
    Registriert seit
    14.06.2016.
    Beiträge
    2

    Staunendes Gesicht Alles klar. Danke

    Alles klar. Danke

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
  •