Schlagworte für Catalog

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • mike_mcfly
    Contao-Fan
    • 29.11.2009
    • 462

    #1

    Schlagworte für Catalog

    Ahoi zusammen,

    ich habe mir die Erweiterung "catalog_tagsfield" installiert. Im Backend habe ich ein neues Feld "Schlagworte" angelegt und dieses im Katalog-Leser aktiviert.

    Dann noch im Template die entsprechende Zeile eingefügt:

    PHP-Code:
    <?php echo $entry['data']['schlagworte']['value']; ?>
    Problem:
    Die Schlagworte werden nicht angezeigt! Die Anzeige per
    PHP-Code:
    <?php print_r($this->entries); ?>
    Gibt mir aus:
    HTML-Code:
    Array ( [label] => Tags [type] => tagsmodul_field [raw] => 0
    Das Array scheint also leer zu sein. Ich hab' das jetzt drei mal gecheckt: im entsprechenden Katalog-Eintrag sind die Schlagworte da (4 Stück übrigens)...

    Ich steh' auf dem Schlauch!
    .................................................. ...............................
    Warum der Marine beitreten, wenn man Pirat sein kann?
    - Steve Jobs
  • MacKP
    Contao-Yoda
    • 15.06.2009
    • 13315

    #2
    Hallo mike_mcfly,
    ich hab keine Ahnung von der Erweiterung.. deswegen kann ich da nur raten...
    1. Alle Module installiert die du dafür brauchst?
    2. Welcher Catalog ist es? Aus dem ER oder aus dem SVN? Kann sein, das nur einer davon damit zusammenspielt, wenn sich schon wieder einiges geändert hat an den Stellen wo diese Erweiterung ansetzt...
    3. Eventuell funktioniert die da auch gar nicht, da bei der Beschreibung steht, das die bisher nur im Backend getestet wurde ;-)

    Viele Grüße
    Contao Pool | C-C-A | MetaModels | [Internetseite -> Mediendepot Ruhr]
    [Arbeitet bei -> Paus Design & Medien]
    "I can EXPLAIN it to you, but I can't UNDERSTAND it for you."

    Kommentar

    • mike_mcfly
      Contao-Fan
      • 29.11.2009
      • 462

      #3
      Schlagworte für Catalog

      Hi,

      also bei mir ist der Catalog 2.0.0 beta2 installiert, ebenso die tags Erweiterung.

      Edit: ich habe jetzt mal den Entwickler angeschrieben, vielleicht hat er einen Rat!
      Zuletzt geändert von mike_mcfly; 31.12.2012, 10:37.
      .................................................. ...............................
      Warum der Marine beitreten, wenn man Pirat sein kann?
      - Steve Jobs

      Kommentar

      • sr-tag
        Contao-Nutzer
        • 13.12.2010
        • 74

        #4
        die Lösung ist eine manuelle Anpassung des Templates

        Hi mike_mcfly,

        Da die Werte des tags-Moduls nicht in den Katalog-Tabellen sondern in der tags-Tabelle abgelegt werden, benötigt man/frau für die Ausgabe der vergebenen Tags eine SQL-Abfrage direkt im jeweiligen Template.

        Im folgenden aus einem Projekt. Das ist ein zusätzlicher Filter von einem catalog-list-Template. Dieser Code wird ausgeführt wenn ein tag(Schlagwort) per GET-Parameter übergeben wurde.

        Code:
        <?php
        
        $Table = 'cat_hints'; //Tabelle an die eigene catalog-Tabelle anpassen
        $idArr = array();
        
        if($this->Input->get('tag'))
        {
            $this->import('Database');
            $hintsByTagsObj = $this->Database->prepare('SELECT `'.$Table.'`.`id` FROM `'.$Table.'` LEFT JOIN `tl_tag` USING(`id`) WHERE `tl_tag`.`from_table`=? AND `tl_tag`.`tag`=?')
        				     ->execute($Table,$this->Input->get('tag'));
            
            $hintsByTagsArr = $hintsByTagsObj->fetchAllAssoc();
        
            foreach($hintsByTagsArr as $col => $val) $idArr[] = $val['id'];
        }
        
        ?>
        dann musst du noch in der foreach-Schleife vor dem HTML folgendes einfügen, damit alle Einträge übersprungen werden, die nicht mit diesem Tag übereinstimmen.

        Code:
        if(count($idArr) > 0 && !in_array($entry['id'],$idArr)) continue;
        -----------------------------------------
        Ich hab eben gesehen das du seit zwei Wochen bereits auf Antwort wartest. Da ich so selten hier ins Forum schaue, am besten mich immer gleich per Mail anschreiben. Das geht wesentlich schneller
        Zuletzt geändert von sr-tag; 31.12.2012, 17:05.

        Kommentar

        • mike_mcfly
          Contao-Fan
          • 29.11.2009
          • 462

          #5
          catalog tags

          Danke erst mal für Deine Hilfe!

          Beziehen sich Deine Angaben auf die Erweiterung "catalog_tagsfield"?

          Also mein Template sieht jetzt so aus (kurze Vorwarnung: ich bin in PHP ein Nulpe):

          PHP-Code:
          <?php if (count($this->entries)): ?>
          <div class="layout_full">
          <?php foreach ($this->entries as $entry): ?>
          <?php if(count($idArr) > 0 && !in_array($entry['id'],$idArr)) continue; ?>
          <?php $GLOBALS['kunde_css_klasse'] = $entry['data']['kunde']['value']; ?>
          <div class="Design-Projekt-Detail">
          <h2 itemprop="name"><?php echo $entry['data']['kunde']['value']; ?> <span><?php echo $entry['data']['kategorie']['value']; ?></span></h2>
          <?php endforeach; ?>
          
          <!-- Slideshow darstellen falls angegeben -->
          <?php if($entry['data']['slideshow']['value']) : ?>
          <div class="flexslider">
              <ul class="slides">  
                  <?php  
                  foreach($this->entries as $entry) :    
                      foreach($entry['data']['slideshow']['meta'] as $picture) {  
                          echo "<li><img src=\"{$picture['src']}\" width=\"880\"/></li>\n";  
                      }   
                  endforeach; ?>      
              </ul>
          </div>
          <?php endif; ?>
          
          <?php if($entry['data']['kurzbeschreibung']['value']) : ?>
          <!-- Kurzbeschreibung darstellen falls eingegeben -->
          <h3 itemprop="description" class="kurzbeschreibung"><?php echo $entry['data']['kurzbeschreibung']['value']; ?></h3>
          <?php endif; ?>
          
          <?php if($entry['data']['beschreibung']['value']) : ?>
          <!-- Beschreibung darstellen falls eingegeben -->
          <p class="beschreibung"><?php echo $entry['data']['beschreibung']['value']; ?></p>
          <?php endif; ?>    
          
          <?php if($entry['data']['bigpicture']['value']) : ?>
          <!-- Grosse Bilder darstellen falls eingegeben -->
          <p class="bigpicture"><?php echo $entry['data']['bigpicture']['value']; ?></p>
          <?php endif; ?>    
          
          <?php if($entry['data']['popup_bilder']['value']) : ?>
          <!-- Projektbilder -->
              <div id="lightbox_bilder"><?php echo $entry['data']['popup_bilder']['value']; ?></div>
          <?php endif; ?>    
          
          <!-- Tags -->
          <?php
              $Table = 'schlagworte'; //Tabelle an die eigene catalog-Tabelle anpassen
              $idArr = array();
              if($this->Input->get('tag'))
              {
              $this->import('Database');
              $hintsByTagsObj = $this->Database->prepare('SELECT `'.$Table.'`.`id` FROM `'.$Table.'` LEFT JOIN `tl_tag` USING(`id`) WHERE `tl_tag`.`from_table`=? AND `tl_tag`.`tag`=?') ->execute($Table,$this->Input->get('tag'));
              $hintsByTagsArr = $hintsByTagsObj->fetchAllAssoc();
              foreach($hintsByTagsArr as $col => $val) $idArr[] = $val['id'];
              }
          ?>
              
          </div> <!-- Ende Design-Projekt-Detail -->
          
          </div>
          <?php else: ?>
          <p class="info"><?php echo $this->noItemsMsg; ?></p>
          <?php endif; ?>
          In Zeile 4 und ab dem <!-- Tags --> Kommentar habe ich Deine Zeilen eingefügt. Das Tabellenfeld lautet "Schlagworte"...

          ...so funktioniert's leider noch nicht !
          .................................................. ...............................
          Warum der Marine beitreten, wenn man Pirat sein kann?
          - Steve Jobs

          Kommentar

          • sr-tag
            Contao-Nutzer
            • 13.12.2010
            • 74

            #6
            nein, vergiss dort mal wie dein tag-Feld in deinem Katalog heißt. Das brauchen wir nicht. Die Tabelle, also wie heißt deine Katalog-Tabelle? Die muss du dort eintragen. Denn die Begriffe werden nicht in der Katalog-Tabelle gespeichert sondern in der Tabelle vom tags-Modul. Dort wird sie mit der ID und dem Tabellen-Namen pro Begriff-Zuordnung abgelegt. Also muss man die Zuordnungen dort auch wieder rausholen.

            Mein PHP-Schnipsel pack mal ganz an den Anfang deines Templates.

            Das in Zeile 4 kann so stehn bleiben, nur muss eben der PHP-Code noch vor der foreach-Schleife ausgeführt werden.

            dann sollte es funktionieren
            Zuletzt geändert von sr-tag; 01.01.2013, 22:05.

            Kommentar

            • mike_mcfly
              Contao-Fan
              • 29.11.2009
              • 462

              #7
              Hab' ich gemacht, leider gibt es keine Ausgabe.

              Die Catalog-Tabelle heißt "referenzen"

              PHP-Code:
              <?php
                  $Table = 'referenzen'; //Tabelle an die eigene catalog-Tabelle anpassen
                  $idArr = array();
                  if($this->Input->get('tag'))
                  {
                  $this->import('Database');
                  $hintsByTagsObj = $this->Database->prepare('SELECT `'.$Table.'`.`id` FROM `'.$Table.'` LEFT JOIN `tl_tag` USING(`id`) WHERE `tl_tag`.`from_table`=? AND `tl_tag`.`tag`=?') ->execute($Table,$this->Input->get('tag'));
                  $hintsByTagsArr = $hintsByTagsObj->fetchAllAssoc();
                  foreach($hintsByTagsArr as $col => $val) $idArr[] = $val['id'];
                  }
              ?>
              
              <?php if (count($this->entries)): ?>
              <div class="layout_full">
              <?php foreach ($this->entries as $entry): if(count($idArr) > 0 && !in_array($entry['id'],$idArr)) continue; ?>
              
              <?php $GLOBALS['kunde_css_klasse'] = $entry['data']['kunde']['value']; ?>
              <div class="Design-Projekt-Detail">
              <h2 itemprop="name"><?php echo $entry['data']['kunde']['value']; ?> <span><?php echo $entry['data']['kategorie']['value']; ?></span></h2>
              <?php endforeach; ?>
              
              <!-- Slideshow darstellen falls angegeben -->
              <?php if($entry['data']['slideshow']['value']) : ?>
              <div class="flexslider">
                  <ul class="slides">  
                      <?php  
                      foreach($this->entries as $entry) :    
                          foreach($entry['data']['slideshow']['meta'] as $picture) {  
                              echo "<li><img src=\"{$picture['src']}\" width=\"880\"/></li>\n";  
                          }   
                      endforeach; ?>      
                  </ul>
              </div>
              <?php endif; ?>
              
              <?php if($entry['data']['kurzbeschreibung']['value']) : ?>
              <!-- Kurzbeschreibung darstellen falls eingegeben -->
              <h3 itemprop="description" class="kurzbeschreibung"><?php echo $entry['data']['kurzbeschreibung']['value']; ?></h3>
              <?php endif; ?>
              
              <?php if($entry['data']['beschreibung']['value']) : ?>
              <!-- Beschreibung darstellen falls eingegeben -->
              <p class="beschreibung"><?php echo $entry['data']['beschreibung']['value']; ?></p>
              <?php endif; ?>    
              
              <?php if($entry['data']['bigpicture']['value']) : ?>
              <!-- Grosse Bilder darstellen falls eingegeben -->
              <p class="bigpicture"><?php echo $entry['data']['bigpicture']['value']; ?></p>
              <?php endif; ?>    
              
              <?php if($entry['data']['popup_bilder']['value']) : ?>
              <!-- Projektbilder -->
                  <div id="lightbox_bilder"><?php echo $entry['data']['popup_bilder']['value']; ?></div>
              <?php endif; ?>    
              
              <!-- Tags -->
              
                  
              </div> <!-- Ende Design-Projekt-Detail -->
              
              </div>
              <?php else: ?>
              <p class="info"><?php echo $this->noItemsMsg; ?></p>
              <?php endif; ?>

              Fehlt da nicht noch ein echo, damit das Tag auch angezeigt wird, bisher haben wir ja nur eine Abfrage der Datenbanktabelle, oder?
              Zuletzt geändert von mike_mcfly; 01.01.2013, 22:08.
              .................................................. ...............................
              Warum der Marine beitreten, wenn man Pirat sein kann?
              - Steve Jobs

              Kommentar

              • sr-tag
                Contao-Nutzer
                • 13.12.2010
                • 74

                #8
                jenachdem worauf du hinauswillst.

                mein gezeigter Code filtert die Liste nach den übergebenen Schlagwort. Wenn du eine Tagwolke haben willst dann nimmst du die aus dem Tag--Modul mit den Begriffen deiner Catalog-Tabelle.
                Wenn du alle zugeordneten Begriffen pro Eintrag direkt im Eintrag ausgegeben haben willst muss man da noch was anderes machen.

                Beschreib mal genauer was genau du haben willst.

                Kommentar

                • mike_mcfly
                  Contao-Fan
                  • 29.11.2009
                  • 462

                  #9
                  Aufzählung der Tags

                  Verstehe.

                  Also ich wollte dass eigentlich so haben, dass in der Catalog-Full-Ansicht unterhalb des Katalogeintrages eine Tagliste steht, die ich zuvor mit der "catalog_tagsfield" Erweiterung im Backend in dem jeweiligen Katalog-Eintrag angegeben habe.

                  Ungefähr so:

                  Tags: schlagwort1, schlagwort2, schlagwort3

                  Das hätte ich dann einfach innerhalb der foreach-Schleife per unsortierter Liste ausgegeben:
                  HTML-Code:
                  <ul id="tagliste">
                  	<li><?php echo $entry['data']['tag']['value']; ?></li>
                  </ul>
                  ...funktioniert aber so nicht. Habe auch schon alle möglichen Array-Values ausprobiert, leider ohne Erfolg es wird nichts angezeigt.
                  Zuletzt geändert von mike_mcfly; 01.01.2013, 22:50.
                  .................................................. ...............................
                  Warum der Marine beitreten, wenn man Pirat sein kann?
                  - Steve Jobs

                  Kommentar

                  • sr-tag
                    Contao-Nutzer
                    • 13.12.2010
                    • 74

                    #10
                    aha,

                    wie schon paar mal geschrieben, die Schlagwörter(tags) werden nicht in deiner Catalog-Tabelle abgelegt sondern in der Tabelle des tag-Moduls.

                    also must du innerhalb deiner foreach-Schleife eine Datenbankabfrage machen.

                    De folgenden Code hab ich hier direkt reingeschrieben und noch nicht selbst getestet:

                    PHP-Code:
                    <?php
                        $Table = 'referenzen'; //Tabelle an die eigene catalog-Tabelle anpassen
                        $tagsList = '';
                        $this->import('Database');
                        $tagsObj = $this->Database->prepare('SELECT * FROM `tl_tag`  WHERE `from_table`=? AND `id`=?') ->execute($Table, $entry['id'] );
                    
                        if($tagsObj->numRows >0)
                        {
                            while($tagsObj->next()) $tagsList = '<li>'.$tagsObj->tag.'</li>';
                            $tagsList = '<ul>'.$tagsList.'</ul>';
                        }
                    ?>
                    und dann kannst du danach an einem Platz im Template deiner Wahl diese Begriffe als String so ausgeben.
                    PHP-Code:
                    <?php echo $tagsList; ?>
                    Zuletzt geändert von sr-tag; 01.01.2013, 23:14.

                    Kommentar

                    • mike_mcfly
                      Contao-Fan
                      • 29.11.2009
                      • 462

                      #11
                      klappt zwar noch nicht so... aber ich will Dich jetzt nicht weiter mit meinen Fragen nerven.

                      Daher sage ich an der Stelle jetzt mal vielen herzlichen Dank

                      ...und probiere es weiter.

                      Wenn ich's rausgefunden habe poste ich es dann hier für die Nachwelt!


                      EDIT: ---------------

                      Wer lesen kann ist klar im Vorteil!

                      So klappt's! Mit dem Codeschnipsel, wie von Dir beschrieben, INNERHALB der Schleife !

                      Super
                      Zuletzt geändert von mike_mcfly; 01.01.2013, 23:15. Grund: erledigt
                      .................................................. ...............................
                      Warum der Marine beitreten, wenn man Pirat sein kann?
                      - Steve Jobs

                      Kommentar

                      • sr-tag
                        Contao-Nutzer
                        • 13.12.2010
                        • 74

                        #12
                        hab grad meinen letzten Post nochmal überarbeitet. probier den mal.

                        Also Code innerhalb der foreach-Schleife und Ausgabe da wo du es haben willst aber unterhalb des Codes

                        Kommentar

                        • mike_mcfly
                          Contao-Fan
                          • 29.11.2009
                          • 462

                          #13
                          Zitat von sr-tag Beitrag anzeigen
                          hab grad meinen letzten Post nochmal überarbeitet. probier den mal.

                          Also Code innerhalb der foreach-Schleife und Ausgabe da wo du es haben willst aber unterhalb des Codes
                          Super!

                          Allerdings wird jetzt nur noch das letzte Tag ausgegeben!
                          .................................................. ...............................
                          Warum der Marine beitreten, wenn man Pirat sein kann?
                          - Steve Jobs

                          Kommentar

                          • sr-tag
                            Contao-Nutzer
                            • 13.12.2010
                            • 74

                            #14
                            ah ok ich seh das Problem,

                            tausch mal die Zeile:
                            PHP-Code:
                            while($tagsObj->next()) $tagsList = '<li>'.$tagsObj->tag.'</li>'; 
                            
                            mit:
                            PHP-Code:
                            while($tagsObj->next()) $tagsList .= '<li>'.$tagsObj->tag.'</li>'; 
                            
                            Der fehlende Punkt bei .= war da Problem

                            Kommentar

                            • mike_mcfly
                              Contao-Fan
                              • 29.11.2009
                              • 462

                              #15
                              Suuuuuper

                              Genau dass war's !

                              Vielen Dank für Deine Hilfe. Ich hoffe ich kann's mal wieder "in Sachen CSS" gut machen, darin bin ich ganz gut
                              .................................................. ...............................
                              Warum der Marine beitreten, wenn man Pirat sein kann?
                              - Steve Jobs

                              Kommentar

                              Lädt...