Ankündigung

Einklappen
Keine Ankündigung bisher.

Custom Catalog Problem alias bei Nutzung Changelanguage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Custom Catalog Problem alias bei Nutzung Changelanguage

    Hi,

    ich habe eine zweisprachige Website (de/en). Funktioniert soweit alles gut. Einziges Manko ist das wenn ich mich auf der Produktdetailsseite befinde und dann von deutsch auf englisch wechsel, dann bleibt der alias der deutsche. Dadurch werden manche Inhalte weiterhin auf deutsch angezeigt.

    Es gibt für den englischen Teil eine extra Domain. Beide sind in der Seitenstruktur eingetragen.

    https://www.domain.com/products/alias-englisch.html + https://www.domain.de/produkte/alias-deutsch.html

    Wechsel ich jetzt wie oben erwähnt, wird mir folgendes angezeigt https://www.domain.com/products/alias-deutsch.html

  • #2
    Schau mal hier: http://forum.premium-contao-themes.c...f-detailseiten
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      OK.
      Habe das Template nav_default.html5 genommen. Richtig? Und dann oben den Zusatz eingefügt. Leider keine Veränderung.

      <?php
      $tablename = 'cc_meinKatalog'; // enter your table name | Tabellennamen angeben
      $baseLanguage = 'de'; // base language | Falls Basis-Einträge auch als eigenständige Sprache dienen, hier die Basis-Sprache angeben
      ?>
      <ul class="<?= $this->level ?>">
      <?php foreach ($this->items as $item): ?>
      <?php if ($item['isActive']): ?>
      <li class="<?= $item['class'] ?>"><span class="<?= $item['class'] ?>"<?php if (!empty($item['subitems'])) echo ' aria-haspopup="true"'; ?>><?= $item['link'] ?></span><?= $item['subitems'] ?></li>
      <?php else: ?>
      <li<?php if ($item['class']) echo ' class="' . $item['class'] . '"'; ?>><a href="<?= $item['href'] ?: './' ?>" title="<?= $item['pageTitle'] ?: $item['title'] ?>"<?php if ($item['class']) echo ' class="' . $item['class'] . '"'; ?><?php if ($item['accesskey']) echo ' accesskey="' . $item['accesskey'] . '"'; ?><?php if ($item['tabindex']) echo ' tabindex="' . $item['tabindex'] . '"'; ?><?php if ($item['nofollow']) echo ' rel="nofollow"'; ?><?= $item['target'] ?><?php if (!empty($item['subitems'])) echo ' aria-haspopup="true"'; ?>><?= $item['link'] ?></a><?= $item['subitems'] ?></li>
      <?php endif; ?>
      <?php endforeach; ?>
      </ul>

      Kommentar


      • #4
        Da kommt ein Template mit im Zip.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Upps. Komplett übersehen. Sorry.
          Ok. Wenn ich das Template nutze verschwindet der Sprachenwechsler. Habe dann mal den Inhalt aus dem Template nav_default mit eingefügt. Dann ist der Sprachenwechsler wieder da aber ohne Auswirkung auf den alias. Hab ich was übersehen oder falsch verstanden?

          Kommentar


          • #6
            Das du die nav_default nicht nehmen kannst, sollte klar sein. Siehe all den Code in dem mitgelieferten Template. Dort findet die Arbeit statt.
            Du musst oben im Template noch die CC Informationen hinterlegen.
            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Oh man. Man sollte krank nicht arbeiten.
              Hab nun alles wie beschrieben eingepflegt. Leider wird weiterhin der deutsche alias zur englischen Domain angezeigt.

              Kommentar


              • #8
                Zitat von OliverLibbertz Beitrag anzeigen
                Oh man. Man sollte krank nicht arbeiten.
                Hab nun alles wie beschrieben eingepflegt. Leider wird weiterhin der deutsche alias zur englischen Domain angezeigt.
                Naja, CC setzt eigentlich nur den Alias ein. Hast du changelanguage erstmal fertig konfiguriert. Leser Seiten mit Fallback-Sprachen usw. usw. -> da entsteht ja quasi die Domain.
                http://www.premium-contao-themes.com

                Kommentar


                • #9
                  Das ist alles korrekt konfiguriert.

                  Kommentar


                  • #10
                    Hallo,

                    dachte da kommt noch was. Leider funktioniert das Template nicht. Alles andere ist richtig konfiguriert.
                    Wir haben eine eigene Erweiterung angelegt, damit bei Eingabe Nr. ins Suchfeld das jeweilige Produkt direkt aufgerufen wird. Da war der Knackpunkt
                    HTML-Code:
                    findAssocLanguageSiblings

                    Kommentar


                    • #11
                      Zeig mal deine Lösung und warum das Template nicht geklappt hat.
                      http://www.premium-contao-themes.com

                      Kommentar


                      • #12
                        Gerne

                        HTML-Code:
                        <?php
                        
                        /**
                         * Contao Open Source CMS
                         *
                         * Copyright (c) 2005-2016 Leo Feyer
                         *
                         * @package   xxxx
                         * @author    xxxx
                         * @license   proprietary
                         * @copyright xxxx
                         */
                        
                        use PCT\CustomElements\Models\CustomCatalogModel as CustomCatalogModel;
                        use \PCT\CustomElements\Plugins\CustomCatalog\Core\Multilanguage as Multilanguage;
                        
                        class WebcodeSearch extends \Controller
                        {
                            /**
                              * Copied from \PCT\CustomElements\Plugins\CustomCatalog\Core\Multilanguage
                              */
                            public function findAssocLanguageSiblings($intBaseRecord,$strTable,$strLanguage='')
                            {
                                $objResult = \Database::getInstance()->prepare("SELECT * FROM tl_pct_customcatalog_language WHERE id!=? AND pid=?  AND source=?".(strlen($strLanguage) > 0 ? " AND lang=?" : ""))->execute($intBaseRecord,$intBaseRecord,$strTable,$strLanguage);
                                if ($objResult->numRows < 1) { return array(); }
                                
                                $arrReturn = array();
                                while($objResult->next())
                                {
                                    $q = Database::getInstance()->prepare("SELECT * FROM " . $strTable . " where id=?");
                                    $result = $q->execute($objResult->id);
                                    while ($result->next()) {
                                        $arrReturn[$objResult->lang] = $result;
                                    }
                                }        
                                return $arrReturn;
                            }
                        
                            public function search($arrPages, $strKeywords, $strQueryType, $blnFuzzy)
                            {
                                //$strLanguage = $this->replaceInsertTags('{{page::language}}');
                                $objMultilanguage = new Multilanguage;
                                $strLanguage = $objMultilanguage->getActiveFrontendLanguage();
                                if (!$strLanguage) { $strLanguage = 'de'; }
                                        
                                // Search for a PRODUCT with a webcode matching $strKeywords in all calatlogs
                                foreach (CustomCatalogModel::findAllActive([]) as $catalogModel) {
                                    $query = Database::getInstance()->prepare("SELECT * FROM " . $catalogModel->tableName . " where webcode=?");
                                    try {
                                        $result = $query->execute($strKeywords);
                                        while ($result->next()) {
                                            switch ($catalogModel->tableName) {
                                                case 'cc_katalog_1':
                                                    $basePath = [
                                                        'de' => 'pfad zur Seite',
                                                        'en' => 'pfad zur Seite',
                                                    ];
                                                    break;
                                                case 'cc_katalog_2':
                                                    $basePath = [
                                                        'de' => 'pfad zur Seite',
                                                        'en' => 'pfad zur Seite',
                                                    ];
                                                    break;
                                                default:
                                                    break;
                                            }
                                            // if the language is NOT German, find the product record in the desired language
                                            if ($strLanguage != 'de') {
                                                $result = $this->findAssocLanguageSiblings($result->id, $catalogModel->tableName, $strLanguage); 
                                                $result = $result[$strLanguage];                        
                                            }
                                            $path = $basePath[$strLanguage] . '/' . $result->alias . '.html';
                                            $this->redirect($path, 302);
                                        }
                                    } catch (Exception $e) {
                        
                                    }
                                }
                        
                                // Search for a PAGE with a webcode matching $strKeywords
                                $query = Database::getInstance()->prepare("SELECT id, alias FROM tl_page where webcode=?");
                                $result = $query->execute($strKeywords);
                                while ($result->next()) {
                                    // a page with this webcode exists.  redirect to the page.
                                    $url = $this->replaceInsertTags('{{link_url::' . $result->id . '}}');
                                    $this->redirect($url, 302);
                                }
                        
                            }
                        
                        }
                        
                        $GLOBALS['TL_HOOKS']['customizeSearch'][] = ['WebcodeSearch', 'search'];

                        Kommentar


                        • #13
                          Die Funktion ist 1zu1 die Kern-Funktion von CC , ausser das hier eine zusätzliche Datenbankabfrage getätigt wird für die gefundenen Spracheinträge, die den gesamten CC Eintrag in den Array legt. Die Kern-Funktion legt nur die ID ab, damit es Ressourcen-schonender ist. Wo genau ist der Unterschied?

                          Die search Funktion ist ganz schön brute force aber ok. Hauptsache es passt

                          Ich denke changelanguage hat den Domainübergreifenden Sprung nicht verstanden. Ihr vergebt ja manuell die Domain neu in "pfad zur Seite".
                          Das sollte über das Seiten-Objekt von changelanguage je changelanguage Link erfolgen bzw. muss in den Sprach-Wurzelseiten eine fixe Domain hinterlegt werden -> sonst wird Contao Wurzelseiten nicht als Domainabgrenzungen betrachten. Siehe Multidomain-Modus Contao
                          Zuletzt geändert von Tim; 09.03.2018, 09:27.
                          http://www.premium-contao-themes.com

                          Kommentar


                          • #14
                            Das Ding sorgt aber dafür das die Suche per Webcode das richtige Ergebnis liefert. SPRACHÜBERGREIFEND!!!! Mit einem sauberen alias. Was bringt mir jetzt deine Antwort??

                            Kommentar


                            • #15
                              Ihr könnt natürlich machen, was ihr wollt. Ich dachte aber es ist eine changelanguage nahe Lösung im Template, die flexibel einsetzbar ist. Alles gut.

                              Was ist eine "Suche per Webcode". Meinst du die Contao Suche?

                              Seitens der Links in changelanguage braucht es bei deinem Aufbau (gleiche Alias für Spracheinträge) keine Anpassungen seitens CC. CC versteht gleiche Alias sprachübergreifend. Der Wechsel der Zielseiten/Detailseiten Urls muss durch changelanguage erfolgen.
                              http://www.premium-contao-themes.com

                              Kommentar

                              Lädt...
                              X