Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrsprachiges Item zeigt keinen fallback an?

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

  • #16
    Ich suche quasi soetwas:
    PHP-Code:
     $GLOBALS['TL_LANG']['PCT_CUSTOMCATALOG']['MSC']['language_field'] = 'Sprache'
    Gibt es sowas?

    Kommentar


    • #17
      So etwas gibt es nicht.
      Labels für die einzelnen Filter können direkt im Backend vergeben werden. Dort kann man auch mit Inserttags arbeiten. Darüberhinaus geht nur noch Template.
      http://www.premium-contao-themes.com

      Kommentar


      • #18
        Ah ok, hast du noch mal geschaut wegen dem Sprachfallback des Basiseintrags, denn bei mir funktioniert das immer noch nicht.

        Kommentar


        • #19
          Ganz so wie du dir das vorstellst tickt CC hier nicht. Der Fallback wird nur aktiv, wenn es auch die Sprache nicht in CC gibt. Contao tickt auch so. Die Fallback-Sprache in Contao wird nur aktiv, wenn es explizit keine Seite für die Sprache des Users gibt.
          In CC:
          Das du keine Einträge für eine Sprache hast, diese Sprache aber eine valide Sprache in CC ist, ist kein Fallback-Grund, sondern ein Grund für eine Leere Liste. => Keine Einträge für diese Sprache.
          http://www.premium-contao-themes.com

          Kommentar


          • #20
            Ah ok und wie könnte ich das nun machen? Ich habe insgesamt 10 Eintrage, alle sind mit deutsch und englischem Inhalten befüllt bei der jeweiligen Sprache. Zwei davon sind mit französischem Inhalt befüllt.

            Im FE möchte ich jetzt diese zwei auf der .fr Seite wie gewohnt auf französisch angezeigt bekommen und den rest der 10, dann nur auf englisch, geht das irgend wie?

            Kommentar


            • #21
              Zitat von Juli_ane Beitrag anzeigen
              Ah ok und wie könnte ich das nun machen? Ich habe insgesamt 10 Eintrage, alle sind mit deutsch und englischem Inhalten befüllt bei der jeweiligen Sprache. Zwei davon sind mit französischem Inhalt befüllt.

              Im FE möchte ich jetzt diese zwei auf der .fr Seite wie gewohnt auf französisch angezeigt bekommen und den rest der 10, dann nur auf englisch, geht das irgend wie?
              Naja, im Template geht alles. Das wäre aber Handarbeit.

              Anderer Weg:
              Du kannst auch eine zweite Liste nutzen, dort einen Sprachenfilter rein mit aktiver Sprache "English" eingestellt. Der Sprachenfilter erlaubt direkt Sprachvorauswahl.
              http://www.premium-contao-themes.com

              Kommentar


              • #22
                Ok, dann arbeite ich im template mit abfrage der .tld und:
                PHP-Code:
                $objCC CustomCatalog::findByTableName('meineTabelle');
                $objEntry $objCC->findPublishedItemByIdOrAlias(\Input::get($GLOBALS['PCT_CUSTOMCATALOG']['urlItemsParameter']),'en');

                echo 
                $objEntry->id

                Kommentar


                • #23
                  Wenn das die Detailseite ausgibt:
                  PHP-Code:
                  $objCC CustomCatalog::findByTableName('meineTabelle');
                  $objEntry $objCC->findPublishedItemByIdOrAlias(\Input::get($GLOBALS['PCT_CUSTOMCATALOG']['urlItemsParameter']),'en');

                  echo 
                  $objEntry->id
                  Wie kann ich dann z.b. die Überschrift:
                  PHP-Code:
                  $entry->field('ueberschrift')->value(); 
                  Auf der deutschen Seite auf deutsch und auf der englischen Seite auf englisch ausgeben lassen?

                  Irgend wie so vielleicht?

                  PHP-Code:
                  $entry->field('ueberschrift')->value()[en]; 
                  PHP-Code:
                  $entry->field('ueberschrift')->value()[de]; 
                  Zuletzt geändert von Juli_ane; 23.08.2016, 09:05.

                  Kommentar


                  • #24
                    Nein, du musst hier schon objektorientiert denken. Da du den engl. Eintrag quasi von null aus der DB holst (, kannst du mit ->value() etc. nichts mehr damit anstellen. Diesen Service gibts hier nicht mehr, jetzt bist du an Rohdaten -> daher vorab mein Hinweis mit der neuen CC Liste und dem strikten EN Sprachfilter.
                    PHP-Code:
                    $objCC CustomCatalog::findByTableName('meineTabelle');
                    $objEnglEntry $objCC->findPublishedItemByIdOrAlias(\Input::get($GLOBALS['PCT_CUSTOMCATALOG']['urlItemsParameter']),'en');

                    echo 
                    $objEnglEntry->ueberschrift// output: serialized array, vergleichbar mit ->value() 
                    http://www.premium-contao-themes.com

                    Kommentar


                    • #25
                      Danke schon mal, ok, Objektorientiert bin ich jetzt noch nicht so ganz firm.

                      Habe ich hier irgend etwas vergessen, normalerweise müsste ich zwei mal die überschrift ausgegeben bekommen:

                      PHP-Code:

                      <?php

                      $objCC 
                      CustomCatalog::findByTableName('media_center');
                      $objEnglEntry $objCC->findPublishedItemByIdOrAlias(\Input::get($GLOBALS['PCT_CUSTOMCATALOG']['urlItemsParameter']),'en');

                      echo 
                      $objEnglEntry->ueberschrift;
                      ?>

                      <?php if($entry->field('ueberschrift')->value()): ?><h3><?php echo $entry->field('ueberschrift')->value(); ?></h3><?php endif;?>
                      Zuletzt geändert von Juli_ane; 23.08.2016, 10:05.

                      Kommentar


                      • #26
                        der Aufruf $entry-> existiert nur in der normalen foreach Schleife. Sonst existiert die Variable $entry gar nicht.

                        Zeig mal dein ganzes Template.
                        http://www.premium-contao-themes.com

                        Kommentar


                        • #27
                          Das ist jetzt mein vorläufiges Template für den Lister:

                          PHP-Code:
                          <div class="autogrid_wrapper cte block">
                              <div class="inner">
                                  
                                  <?php if(!$this->empty): ?>
                                      <?php
                                      $i 
                          $j $k 0;
                                      foreach(
                          $this->entries as $entry):
                                          
                          $i++;
                                          
                          $class '';
                                          
                          $class2 '';
                                          if(
                          $j === 0) {
                                              
                          $class 'first';
                                              
                          $class2 'autogrid-first';
                                          }
                                          
                          $j++;
                                          
                          $html '';
                                          if(
                          $i === 0) {
                                              
                          $k++;
                                              
                          $j = ($i - ($k));
                                              
                          $class 'last';
                                              
                          $class2 'autogrid-last';
                                              
                          $html "<div class='clear autogrid_clear'></div></div></div>
                                           <div class='autogrid_wrapper cte block'><div class='inner'>"
                          ;
                                          }
                                          
                          ?>
                                          <div class="ce_card autogrid-type_cte n5 one_fifth autogrid_mode_auto autogrid <?php echo $class2?> <?php echo $class?> block">
                                              <div class="<?php echo $this->class?> block"<?php echo $this->cssID?><?php if ($this->style): ?> style="<?php echo $this->style?>"<?php endif; ?>>
                                                  <?php if(!$this->empty): ?>
                                                      <div class="card_wrapper">
                                                          <a class=""  href="<?php echo $entry->field('link_address')->value(); ?>"  title="<?php echo $entry->field('ueberschrift')->value(); ?>">
                                                              <?php if($entry->field('optional_logo_overlay')->value()): ?>
                                                                  <div class="logo-overlay">
                                                                      <img src="<?php echo $entry->field('optional_logo_overlay')->generate(); ?>" alt="<?php echo $entry->field('ueberschrift')->value(); ?>">
                                                                  </div>
                                                              <?php endif;?>
                                                              <?php if($entry->field('link_address')->value()): ?>

                                                              <?php echo $entry->field('image')->html(); ?>
                                                          </a>
                                                          <?php else: ?>
                                                              <a class="iframe"  href="<?php echo $eloquaLang; echo $entry->field('eloqua_id')->value(); ?>"  title="<?php echo $entry->field('ueberschrift')->value(); ?>" data-lightbox="">
                                                                  <?php echo $entry->field('image')->html(); ?>
                                                              </a>
                                                          <?php endif;?>
                                                          <div class="card_content">

                                                              <?php
                                                              $cc_language 
                          $_GET['language'];
                                                              echo 
                          $cc_language;

                                                              
                          $objCC CustomCatalog::findByTableName('media_center');
                                                              
                          $objEnglEntry $objCC->findPublishedItemByIdOrAlias(\Input::get($GLOBALS['PCT_CUSTOMCATALOG']['urlItemsParameter']),'fr');

                                                              echo 
                          $objEnglEntry->ueberschrift// output: serialized array, vergleichbar mit ->value()
                                                              
                          ?>

                                                              <?php if($entry->field('ueberschrift')->value()): ?><h3><?php echo $entry->field('ueberschrift')->value(); ?></h3><?php endif;?>
                                                              <?php if($entry->field('kurztext')->value()): ?><p><?php echo $entry->field('kurztext')->value(); ?></p><?php endif;?>
                                                              <?php if($entry->field('link_address')->value()): ?>
                                                                  <a class="button read_more"  href="<?php echo $entry->field('link_address')->value(); ?>"  title="<?php echo $entry->field('ueberschrift')->value(); ?>">
                                                                      {{iflng::en}}Learn more{{iflng}}
                                                                      {{iflng::de}}Erfahren Sie mehr{{iflng}}
                                                                      {{iflng::fr}}En savoir plus{{iflng}}
                                                                      {{iflng::nl}}Meer informatie{{iflng}}
                                                                  </a>
                                                              <?php else: ?>
                                                                  <a class="button iframe download"  href="<?php echo $eloquaLang; echo $entry->field('eloqua_id')->value(); ?>"  title="<?php echo $entry->field('ueberschrift')->value(); ?>" data-lightbox="">
                                                                      {{iflng::en}}Download{{iflng}}
                                                                      {{iflng::de}}Download{{iflng}}
                                                                      {{iflng::fr}}Télécharger{{iflng}}
                                                                      {{iflng::nl}}Downloaden{{iflng}}
                                                                  </a>
                                                              <?php endif;?>

                                                          </div>
                                                          <div class="clear"> </div>
                                                      </div>
                                                  <?php endif;?>
                                              </div>
                                          </div>

                                          <?php
                                          
                          echo $html;
                                      endforeach;
                                      
                          ?>
                                  <?php else: ?>
                                      <p class="info empty">{{iflng::en}}The selected filter combination delivers no result.{{iflng}}{{iflng::de}}Die gewählte Filterkombination liefert kein Resultat.{{iflng}}{{iflng::fr}}La combinaison de filtre sélectionné fournit aucun résultat.{{iflng}}</p>
                                  <?php endif;?>
                                  <div class="clear autogrid_clear"></div>
                              </div>
                          </div>

                          Kommentar


                          • #28
                            Ok, ist ja doch komplexer geworden und du machst es dir nicht leichter, wenn du direkt mischt. Ich denke du wirst hier sehr schnell den den Überblick verlieren. Trenne strikt. Auch im Template. Mache erst den Test ob der normale Eintrag gezeigt werden soll oder der Fallback.

                            So, ich breche das mal hier runter auf das Wesentliche. So würde ich das machen.
                            Oben testen ob Eintrag existiert, falls nicht einen autarken Fallback-Bereich erstellen. (hier könnte man auch via Inserttag ein Modul einfügen. Das spart ggf. die manuelle Arbeit. Einfach {{insert_module :: ID-DES-MODULS}}

                            Man sollte CC die ganze Arbeit machen lassen, damit schleichen sich keine eigenen Fehler ein und das System ist rund.
                            Der Fallback-CC kann das gleiche Template fahren wie der aktuelle Leser, oder halt ein neues.

                            PHP-Code:

                            <?php 
                            // Beispiel Template für einen Fallback-Spracheintrag    
                            ?>

                            <?php if(!$this->empty): ?>

                            <!-- hier mein normaler template aufbau -->

                            <?php else: ?>

                            <?php // fallback ab hier, falls die aktuelle Sprache bzw. der Eintrag leer ist
                            $objCC = \CustomCatalog::findByTableName('media_center');

                            // CC ein Template übergeben
                            $objCC->setLayoutTemplate('customcatalog_default');

                            // Spracheintrag ermitteln
                            $objFallbackEntry $objCC->findPublishedItemByIdOrAlias(\Input::get($GLOBALS['PCT_CUSTOMCATALOG']['urlItemsParameter']),'fr');

                            // passender fallback eintrag existiert
                            if($objFallbackEntry->id 0)
                            {
                                
                            // erstelle einfachen filter auf die ID des Fallback-Eintrags
                                
                            $objSimpleFilter = new \PCT\CustomElements\Filters\SimpleFilter();
                                
                            $options = array
                                (
                                    
                            'column'    => 'id',
                                    
                            'operation'    => '=',
                                    
                            'value'        => $objFallbackEntry->id,
                                );
                                
                            $objSimpleFilter->setOptions($options);
                                
                                
                            // neuen Filter an CC kleben
                                
                            $objCC->addFilter($objSimpleFilter);
                            }

                            // den fallback eintrag rendern, durchlaeuft das obengesetzte Template (kann natuerlich auch das gleiche sein wie der aktuelle Leser (halbe Arbeit :) )
                            echo $objCC->render();
                            ?>

                            <?php endif; ?>
                            Angehängte Dateien
                            Zuletzt geändert von Tim; 23.08.2016, 10:58.
                            http://www.premium-contao-themes.com

                            Kommentar


                            • #29
                              Wow, da muss ich mich erst mal durch ackern.

                              Ich hätte es jetzt einfach so gemacht, am URL Parameter festgelegt welche Sprache und dann daran abhängig, welche Sprachvariable ich anzeige.

                              Kommentar


                              • #30
                                Zitat von Juli_ane Beitrag anzeigen
                                Wow, da muss ich mich erst mal durch ackern.

                                Ich hätte es jetzt einfach so gemacht, am URL Parameter festgelegt welche Sprache und dann daran abhängig, welche Sprachvariable ich anzeige.
                                Möglich ist sicher alles. Dies hier wäre mein Weg.

                                * einfach so
                                -> das wird nicht einfacher. Du musst auf dem Weg ohne CC Power im Nacken (roher Datensatz), ALLES selbst abarbeiten. Du hast hier den blanken Datensatz und solch schicke Methoden die ->html() auf ein Bild-Attribut und peng das Bild ist fertig da, geht nicht mehr. Der Datensatz kennt nur den Wert je Feld, der weiss nicht mal woher er stammt bzw. das es ein Attribut gibt. Ergo: -> Bild von null bauen, Dateiausgaben von null bauen, Überschriften von null usw. usw. usw.
                                Wenn es nur Textausgaben wären, ok...
                                http://www.premium-contao-themes.com

                                Kommentar

                                Lädt...
                                X