Ergebnis 1 bis 8 von 8

Thema: Teaser automatisch, wenn nicht ausgefüllt

  1. #1
    Contao-Nutzer
    Registriert seit
    19.11.2009.
    Beiträge
    164

    Standard Teaser automatisch, wenn nicht ausgefüllt

    Hi.

    Ich möchte gern automatisch Artikelteaser anzeigen lassen, wenn dort kein Text angegeben ist, diese sollten dann gekürzt auf 300 Zeichen mit "…" am ende erscheinen.

    Ich habe das Ganze bei den News ergolgreich gemacht (dort werden Teaser generell automatisch erzeugt).

    Mein Problem ist jetzt, dass ich das gern auch für die Artikelteaser hätte. Ich habe eigentlich keine Ahnung von php, aber das probiert:
    Code:
    <article class="<?php echo $this->class; ?> block"<?php echo $this->cssID; ?><?php if ($this->style): ?> style="<?php echo $this->style; ?>"<?php endif; ?>>
    
    <div class="ce_text block">
    
    <h2><?php echo $this->headline; ?></h2>
    
    <div class="teaser">
    <?
        $text= $this->teaser; 
    if (strlen($text) >= 299){ 
        echo strip_tags(substr($text, 0, strpos($text," ",300)))." …";  
    } else { 
        echo $text; 
    } 
    ?>
    <?php echo $this->teaser; ?> 
    <p class="more"><a href="<?php echo $this->href; ?>" title="<?php echo $this->readMore; ?>"><?php echo $this->more; ?> <span class="invisible"><?php echo $this->headline; ?></span></a></p>
    </div>
    
    </div>
    
    </article>
    Das zeigt zwar einen gekürzten teaser an, wenn dort auch einer eingetragen ist, gibt es keinen, passiert auch nichts. Und dann bekomme ich die if/then-Abfrage nicht hin. Also nur automatisch, wenn nichts im Teaserfeld steht.

    Ich suche jetzt seit Stunden und finde immer nur die Anleitungen für die News... ich hoffe, mir kann jemand helfen, das wär super!

    Besten Dank und Grüße!

  2. #2
    Contao-Nutzer Avatar von simplex3
    Registriert seit
    22.06.2009.
    Ort
    Oldenburg (Oldb.)
    Beiträge
    73

    Standard

    Moin stixer,

    hier
    PHP-Code:
    ...} else { 
        echo 
    $text
    }... 
    kommt man ja hin, wenn die Länge von $text < 299 ist.
    Also auch bei Länge 0.
    In diesem Fall willst du aber nicht $text (den nicht vorhandenen Teaser ) ausgeben, sondern die ersten 300 Zeichen des Artikels.

    Ich nehme mal an, dass man den Artikelinhalt mit $this->article bekommt. Dann müsst das hier gehen:
    PHP-Code:

    <article class="<?php echo $this->class?> block"<?php echo $this->cssID?><?php if ($this->style): ?> style="<?php echo $this->style?>"<?php endif; ?>>

    <div class="ce_text block">

    <h2><?php echo $this->headline?></h2>

    <div class="teaser">
    <?php
    if (strlen($this->teaser) == 0){ //Kein Teaser also Artikel kürzen
      
    $output =  strip_tags(substr($text0strpos($this->article," ",300)))." …"
    }elseif (
    strlen($this->teaser) > 300){// Teaser länger als 300 Zeichen. Also kürzen.
      
    $output =  strip_tags(substr($text0strpos($text," ",300)))." …";
    }else{
    // Teaser ist kürzer als 300 Zeichen
      
    $output $this->teaser ' ...';
    }
    print 
    $output;
    ?>

    <p class="more"><a href="<?php echo $this->href?>" title="<?php echo $this->readMore?>"><?php echo $this->more?> <span class="invisible"><?php echo $this->headline?></span></a></p>
    </div>

    </div>

    </article>
    Habe ich jetzt völlig übermüdet und ohne Tests geschrieben. Geht auch schöner! Aber ein Versuch ist es wert

    Bis denne..

  3. #3
    Contao-Nutzer
    Registriert seit
    19.11.2009.
    Beiträge
    164

    Standard

    Danke für deinen Einsatz, aber so richtig haut das noch nicht hin. Nachdem ich die erste Zeile noch eingefügt habe, bekomme ich zumindest den gekürzten Teaser von dem Artikel, der schon einen Teaser hat.
    PHP-Code:
    <?php 
    $text
    $this->teaser;
    if (
    strlen($this->teaser) == 0){ //Kein Teaser also Artikel kürzen 
     
    $output =  strip_tags(substr($text0strpos($this->article," ",300)))." …";
    }elseif (
    strlen($this->teaser) > 300){// Teaser länger als 300 Zeichen. Also kürzen. 
      
    $output =  strip_tags(substr($text0strpos($text," ",300)))." …"
    }else{
    // Teaser ist kürzer als 300 Zeichen 
      
    $output $this->teaser ' ';

    print 
    $output
    ?>
    Teaser mit weniger Wörter werden auch angezeigt.
    Der Artikel ohne Teaser bekommt hier nur die Punkte " …", aber der Inhalt fehlt. Wahrscheinlich fehlt nicht viel, auch hier habe ich wieder alles mögliche probiert, aber ich muss die Fahnen strecken... vielleicht hat jemand den Fehler im Blick?

    Ich bekomme übrigens folgende Fehlermeldung:
    Code:
    Warning: strpos() [function.strpos]: Offset not contained in string in /Applications/MAMP/htdocs/meineSeite/templates/mod_article_teaser.html5 on line 12
    #0 [internal function]: __error(2, 'strpos() [parse()
    #4 /Applications/MAMP/htdocs/meineSeite/system/modules/frontend/Module.php(157): FrontendTemplate->parse()
    #5 /Applications/MAMP/htdocs/meineSeite/system/modules/frontend/ModuleArticle.php(71): Module->generate()
    #6 /Applications/MAMP/htdocs/meineSeite/system/libraries/Controller.php(443): ModuleArticle->generate(false)
    #7 /Applications/MAMP/htdocs/meineSeite/system/libraries/Controller.php(307): Controller->getArticle('113', true, false, 'main')
    #8 /Applications/MAMP/htdocs/meineSeite/system/modules/frontend/PageRegular.php(100): Controller->getFrontendModule('0', 'main')
    #9 /Applications/MAMP/htdocs/meineSeite/index.php(266): PageRegular->generate(Object(DB_Mysql_Result))
    #10 /Applications/MAMP/htdocs/meineSeite/index.php(401): Index->run()
    #11 {main}
    …
    Besten Dank!
    Geändert von stixer (16.10.2012 um 09:32 Uhr)

  4. #4
    Contao-Nutzer Avatar von simplex3
    Registriert seit
    22.06.2009.
    Ort
    Oldenburg (Oldb.)
    Beiträge
    73

    Standard

    Ja, da war ich wohl etwas müder als ich selber dachte...
    Zum einen mal den vorerst abgewandelten Code:
    PHP-Code:
    <?php
    if (strlen($this->teaser) == 0){ //Kein Teaser also Artikel kürzen 
    // GEHT SO NICHT, WEIL ARTIKEL HIER NICHT BEKANNT
      
    $output =  substrstrip_tags($this->article), 0strpos($this->article' '300) ) . ' ...';
    }elseif (
    strlen($this->teaser) > 300){// Teaser länger als 300 Zeichen. Also kürzen. 
      
    $output =  substrstrip_tags($this->teaser), 0strpos($this->teaser' '300) ) . ' ...';//   (substr($this->teaser, 0, strpos($this->teaser,' ',300))).' …'; 
      
    }else{// Teaser ist kürzer als 300 Zeichen 
      
    $output $this->teaser ' ...'

    print 
    $output
    ?>
    So klappt es jedenfalls schonmal mit den Fällen, in denen der Teaser nicht leer ist.
    Das mit dem Artikel geht hier so nicht (habe ich ja auch kommentiert), weil der in dem Modul gar nicht bekannt ist.
    Ich denke, das müsste man mittels $this->id aus der tl_content auslesen.
    (In einem Modul mittels $this->Database->prepare("SELECT text FROM tl_content WHERE id=?")->execute($this->id); oder so ungefähr... ) Das wäre aber an dieser Stelle, also im mod_article_teaser nicht der richtige Platz.

    Ist ja eh am besten, wenn du das ganze als Modul(-Erweiterung) schreiben würdest, denke ich, oder?

    Ich muss jetzt aber mal weg. Könnte ggf. später mal gucken. Aber vielleicht hilft dir das ja weiter und verwirrt dich jetzt nich noch mehr .

    Bis denne..

  5. #5
    Contao-Nutzer
    Registriert seit
    19.11.2009.
    Beiträge
    164

    Standard

    Das klingt logisch.

    Ist ja eh am besten, wenn du das ganze als Modul(-Erweiterung) schreiben würdest, denke ich, oder?
    Das übersteigt leider meine Kenntnisse. Fände ich super, wenn du noch mal gucken würdest, wenn du Zeit hast...

    Danke und Grüße!

  6. #6
    Contao-Nutzer Avatar von simplex3
    Registriert seit
    22.06.2009.
    Ort
    Oldenburg (Oldb.)
    Beiträge
    73

    Standard

    Zitat Zitat von stixer Beitrag anzeigen
    Das klingt logisch.
    Das hoffe ich doch sehr
    Zitat Zitat von stixer Beitrag anzeigen
    Das übersteigt leider meine Kenntnisse. Fände ich super, wenn du noch mal gucken würdest, wenn du Zeit hast...
    Ich mache just Urlaub. Ich gucke dann, ob ich das angehe. Könnte sich bei Arbeiten für einen Kunden ggf. "nebenbei" mit ergeben.

    Bis denne..

  7. #7
    Contao-Nutzer
    Registriert seit
    19.11.2009.
    Beiträge
    164

    Standard

    …falls es sich für den Kunden nicht ergeben sollte, wäre ich trotzdem interessiert – vielleicht kommen wir dann ja anderweitig zusammen?

    LG!

    PS: Schönen Urlaub!

  8. #8
    Contao-Nutzer Avatar von simplex3
    Registriert seit
    22.06.2009.
    Ort
    Oldenburg (Oldb.)
    Beiträge
    73

    Standard

    Zitat Zitat von stixer Beitrag anzeigen
    …falls es sich für den Kunden nicht ergeben sollte, wäre ich trotzdem interessiert – vielleicht kommen wir dann ja anderweitig zusammen?

    LG!
    Kriegen wir hin!

    Zitat Zitat von stixer Beitrag anzeigen
    PS: Schönen Urlaub!
    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
  •