Teaser-Text-Funktion und Weiterlesen-Link für einen Text in Catalog?

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • geo78
    Contao-Nutzer
    • 23.05.2012
    • 10

    #1

    Teaser-Text-Funktion und Weiterlesen-Link für einen Text in Catalog?

    Hallo,

    ich würde gerne wissen, wie man bei einem Text-Feld (Lang_text) in Catalog, diesen Text so in der Template-Ausgabe anpasst, dass er wie bei einem News-Eintrag nur z.B. die ersten 100 Zeichen als Teaser-Text anzeigt und dananch ein "Weiterlesen"-Link eingefügt wird. Danke für eure Hilfe!!

    Da ich kein PHP-Experte bin, wäre es toll, wenn ihr mir den PHP-Code posten könntet. Vielen Dank!!
  • Tim G
    Contao-Urgestein
    • 13.02.2010
    • 2212

    #2
    So könnte dein catalog_simple template dafür aussehen:

    Das Feld, das gekürzt werden soll heisst bei mir 'description'
    Nach dem Feld wird der Link zum Eintrag gesetzt.

    PHP-Code:
    <?php if (count($this->entries)): ?>
            
    <div class="layout_simple">
    
    <?php foreach ($this->entries as $entry): ?>
    <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?>">
    <?php foreach ($entry['data'] as $field=>$data): ?>
    
    <?php if($field == 'description'): ?>
        <?php    
        $this->import('String');
        $data['value'] = $this->String->substrHtml($data['value'], 100);
        ?>
        <div class="field <?php echo $field; ?>">
            <div class="label"><?php echo $data['label']; ?></div>
            <div class="value"><?php echo $data['value']; ?></div>
            <div class="more"><a href="<?php echo $entry['url'];?>" title="Weiterlesen..."><?php echo $GLOBALS['TL_LANG']['MSC']['more']; ?></a></div>
        </div>
    <?php else: ?>
        <div class="field <?php echo $field; ?>">
            <div class="label"><?php echo $data['label']; ?></div>
            <div class="value"><?php echo $data['value']; ?></div>
        </div>
    <?php endif; ?>
    
    <?php endforeach; ?>
    
    
    <?php if ($entry['showLink'] && $entry['link']): ?>
    <div class="link"><?php echo $entry['link']; ?></div>
    <?php endif; ?>
    <?php if ($entry['linkEdit']): ?>
    <div class="linkEdit"><?php echo $entry['linkEdit']; ?></div>
    <?php endif; ?>
    </div>
    
    <?php endforeach; ?>
    </div>
     
    <?php else: ?>
    
    <?php if ($this->condition): ?>
    <p class="condition"><?php echo $this->condition; ?></p>
    <?php else: ?>
    <p class="info"><?php echo $this->searchEmptyMsg; ?></p>
    <?php endif; ?>
    
    <?php endif; ?>
    Grüße, Tim
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

    Kommentar

    • geo78
      Contao-Nutzer
      • 23.05.2012
      • 10

      #3
      Hallo Tim! Danke für deine Rückmeldung.

      Wenn ich deinen Code modifiziert einbaue, dann erscheint der Teaser-Text gar nicht mehr und auch der Weiterlesen-Link fehlt.

      Ausgegeben werden sollen das Artikelbild (float:left), daneben rechts die Einsatz-Nummer, das Einsatz-Datum, der Titel, der Teaser-Text (beschreibung) und der Weiterlesen-Link.
      Hier der modifizierte PHP-Code (das Text-Feld, dass gekürzt werden soll heißt "beschreibung"):

      PHP-Code:
      <?php if (count($this->entries)): ?>
      
      <div class="layout_simple">
      
      <?php foreach ($this->entries as $entry): ?>
      <div class="item<?php echo $entry['class'] ? ' '.$entry['class'] : ''; ?>">
      
      <?php if($field == 'beschreibung'): ?> 
      <?php
      $this->import('String'); 
      $data['value'] = $this->String->substrHtml($data['value'], 100); 
      ?>
        <div class="image_container" style="float:left; padding:5px 10px 5px 0;"><?php echo $entry['data']['artikelbild']['value']; ?></div>
        <div class="nummer"><?php echo $entry['data']['nummer']['value']; ?> | <?php echo $entry['data']['datum']['value']; ?></div>
      <div class="titel"><?php echo $entry['data']['titel']['value']; ?></div>
      <div class="beschreibung"><?php echo $entry['data']['beschreibung']['value']; ?></div>
      <div class="more"><a href="<?php echo $entry['url'];?>" title="Weiterlesen..."><?php echo $GLOBALS['TL_LANG']['MSC']['more']; ?></a></div>
       
        <div style="float:clear-left"></div>
      <?php else: ?> 
      <div class="image_container" style="float:left; padding:5px 10px 5px 0;"><?php echo $entry['data']['artikelbild']['value']; ?></div>
        <div class="nummer"><?php echo $entry['data']['nummer']['value']; ?> | <?php echo $entry['data']['datum']['value']; ?></div>
      <div class="titel"><?php echo $entry['data']['titel']['value']; ?></div>
      <?php endif; ?> 
      
      
      <?php if ($entry['showLink'] && $entry['link']): ?>
      <div class="link"><?php echo $entry['link']; ?></div>
      <?php endif; ?>
      <?php if ($entry['linkEdit']): ?>
      <div class="linkEdit"><?php echo $entry['linkEdit']; ?></div>
      <?php endif; ?>
      </div>
      
      <?php endforeach; ?>
      </div>
      
      <?php else: ?>
      
      <?php if ($this->condition): ?>
      <div class="condition"><?php echo $this->condition; ?></div>
      <?php else: ?>
      <p class="info">There are no entries matching your search.</p>
      <?php endif; ?>
      
      <?php endif; ?>
      Eigentlich benötige ich keine if-else-schleife, weil es immer eine Beschreibung geben wird. Ändert das was?

      Vielen Dank!
      Zuletzt geändert von geo78; 20.06.2012, 10:07.

      Kommentar

      • Tim G
        Contao-Urgestein
        • 13.02.2010
        • 2212

        #4
        Mein Aufbau ist allgemein und so ausgelegt, dass NUR das Feld "description" manipuliert wird, die anderen Felder werden normal behandelt.

        Du kannst dein Template natürlich mit direkten Werten aus den Array füllen. In diesem Fall würde das hier reichen um die Beschreibung zu kürzen:

        PHP-Code:
        <?php $this->import('String');?>
        <div class="beschreibung"><?php echo substrHtml($entry['data']['beschreibung']['value'],100); ?></div>
        http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

        Kommentar

        • geo78
          Contao-Nutzer
          • 23.05.2012
          • 10

          #5
          Ich hab mich noch mit deinem vorigen Code herumgespielt - jetzt passt es!!

          Vielen Dank!!!!

          Kommentar

          • geo78
            Contao-Nutzer
            • 23.05.2012
            • 10

            #6
            Jetzt doch noch eine Kleinigkeit - wir kann man am Ende des Teaser-Textes "...", also 3 Punkte anhängen. Sonst sieht der Text so abgeschnitten aus.

            Danke!!!

            Kommentar

            • geo78
              Contao-Nutzer
              • 23.05.2012
              • 10

              #7
              ...noch etwas: am Ende des Teaser-Textes werden jetzt manchmal die ersten 2-3 Buchstaben von anderen Absätzen hinzugefügt obwohl der erste Absatz noch genügend Zeilen bzw. Buchstaben hätte...

              Komisch. Hast du einen Rat?

              Kommentar

              • Tim G
                Contao-Urgestein
                • 13.02.2010
                • 2212

                #8
                Zitat von geo78 Beitrag anzeigen
                Jetzt doch noch eine Kleinigkeit - wir kann man am Ende des Teaser-Textes "...", also 3 Punkte anhängen. Sonst sieht der Text so abgeschnitten aus.

                Danke!!!
                Das sollte reichen:

                PHP-Code:
                <?php $this->import('String');?>
                <div class="beschreibung"><?php echo substrHtml($entry['data']['beschreibung']['value'],100) . '...'; ?></div>
                http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

                Kommentar

                • Tim G
                  Contao-Urgestein
                  • 13.02.2010
                  • 2212

                  #9
                  Zitat von geo78 Beitrag anzeigen
                  ...noch etwas: am Ende des Teaser-Textes werden jetzt manchmal die ersten 2-3 Buchstaben von anderen Absätzen hinzugefügt obwohl der erste Absatz noch genügend Zeilen bzw. Buchstaben hätte...

                  Komisch. Hast du einen Rat?
                  Mhh... Ich hab schon extra die interne Funktion von Leo dafür genutzt. Diese sollte sowas berücksichtigen. Passiert das auch bei normalen Artikel-Teasern, wenn du da mal den gleichen Text benutzt?
                  http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

                  Kommentar

                  • geo78
                    Contao-Nutzer
                    • 23.05.2012
                    • 10

                    #10
                    Danke für deine Antwort. Wenn ich die "..." so wie von dir beschrieben einfüge, dann setzt er diese leider immer in einen eigenen Absatz - also unterhalb des Teaser-Textes und nicht unmittelbar dahinter. Was tun?
                    Das Problem mit den Buchstaben scheint gelöst zu sein....

                    LG, Geo

                    Kommentar

                    • Tim G
                      Contao-Urgestein
                      • 13.02.2010
                      • 2212

                      #11
                      Ich befürchte, das liegt in der Natur von substrHtml.
                      Probier sonst einfach die normalen php funktionen substr() mit nem index funzt auch. Aber da kann es schon passieren, dass das Wort einfach abgetrennt wird.
                      Dann ist mehr Logik von Nöten.


                      Sent from my iphone using Tapatalk
                      http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

                      Kommentar

                      Lädt...