[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Artikel als News Teaser anzeigen, wie geht das in 4.3.1? - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
missmissr
Beiträge: 175
Registriert: 9. Mär 2008, 18:36

Artikel als News Teaser anzeigen, wie geht das in 4.3.1?

21. Okt 2010, 13:04

Hi,

ich habe jetzt sämtliche Module etc. ausprobiert und nichts erfüllt funktionsmäßig das, was ich bräuchte. Dabei ist es doch nichts Abwegiges. Es kann aber sein, dass ich sowas von auf der Leitung stehe.

Ich will in 4.3.1 auf einer Startseite alle Artikel der Kategorie als Teaser einblenden lassen. Teaser heißt für mich: Ein Bild aus den Metadefinitionen (Metafile/Bild), den Artikelnamen als Headline und etwas Text und der on/offline Status sollte berücksichtigt werden.

Wie kann ich das bitte in 4.3.1 am besten bewerkstelligen?

Bei mir ist es so, dass das sogar das Modul Artikelliste, das mit Redaxo mitgeliefert ist, einen Artikel, den ich auf offline stelle nicht ausblendet, sondern darstellt. Was ist denn da los?

Ich bräuchte dringend Hilfe, da ich die Teaserdarstellung der Artikel in einer Kategorie so quasi als Unternavigation verwenden muss.

Bitte helft mir. Danke.

missmissr
Beiträge: 175
Registriert: 9. Mär 2008, 18:36

21. Okt 2010, 14:56

Hi,

das Modul wäre schon so, wie ich es bräuchte, stellt mir allerdings kein Artikelbild dar. Muss da noch eine Angleichung für 4.3.1 gemacht werden weil das Modul an und für sich für 4.2 ist?

http://www.redaxo.de/165-0-moduldetails ... ule_id=481

Bitte um Hilfe.

su2pect
Beiträge: 4
Registriert: 17. Okt 2010, 17:39

Re: Artikel als News Teaser anzeigen, wie geht das in 4.3.1?

25. Okt 2010, 16:31

Hi,
missmissr hat geschrieben: Ich will in 4.3.1 auf einer Startseite alle Artikel der Kategorie als Teaser einblenden lassen. Teaser heißt für mich: Ein Bild aus den Metadefinitionen (Metafile/Bild), den Artikelnamen als Headline und etwas Text und der on/offline Status sollte berücksichtigt werden.

Wie kann ich das bitte in 4.3.1 am besten bewerkstelligen?
Ich stand jetzt vor einem ähnlichen Problem. Ich wollte Blockinhalte aus den einzelnen Artikeln anteasern. Mein dazugehöriges Modul gibt standardmäßig alle Inhalte fertig in HTML formatiert aus. Ich brauchte für die Teaser aber kein HTML (Teaserdarstellung hat eigenes HTML) und wollte einfach nur auf bestimmte REX_VALUES des jeweiligen Artikels zugreifen.

Ich habe die Ausgabe mit Hilfe einer Modifikation des "Alle Artikel"-Moduls aus der Demo zusammengebastelt:

Original:

Code: Alles auswählen

<?php

$cat = OOCategory::getCategoryById($this->getValue("category_id")); // hier die ID der Kategorie
$articles = $cat->getArticles( true); // Alle Artikel der Kategorie auslesen, die Online sind

if ( is_array( $articles) && count( $articles) > 0) {
foreach ( $articles as $article) {
// Den aktuellen Artikel nicht verlinken
if ( $article->getId() == REX_ARTICLE_ID) continue;

// Startartikel ausblenden
if ( $article->isStartPage()) continue;

$artikel = new article;
$artikel->setArticleID($article->getId());
echo $artikel->getArticle();
}
}

?>
Die modifizierte Variante arbeitet mit slices, mit deren Hilfe ich mir die benötigten Informationen aus den Artikeln hole. Das Ausgabemodul sieht am Ende so aus:

Code: Alles auswählen

<?php

/*
Modul "Funktion - Teaser für Vermittlung"
zeigt eine konfigurierbare Anzahl von zu vermittelnden Tieren aus einer beliebigen Kategorie an
*/

$articles = OOArticle::getArticlesOfCategory("REX_VALUE[1]", true);
$i = 0;

if ( is_array( $articles) && count( $articles) > 0) {
$teaser_output = "";
   
        foreach ( $articles as $article) {
        
          // Den aktuellen Artikel nicht verlinken
          if ( $article->getId() == REX_ARTICLE_ID) continue;
          // Startartikel ausblenden
          if ( $article->isStartPage()) continue;          
          $artikel = new article;
          $artikel->setArticleID($article->getId());
          $slice = OOArticleSlice::getFirstSliceForArticle($article->getId());
          $i++;
          // Nur die ersten 3 Artikel anzeigen
          if ($i <= "REX_VALUE[2]") { 

          // Einige Variablen festlegen / bereinigen 
          $teaserimglist = $slice->getMediaList(1);
          $teaserimg = explode(",", $teaserimglist);                     
          $age = $slice->getValue(2);
          $age_unit = $slice->getValue(3); 
          $headline = $slice->getValue(5); 
          //$headline = substr($headline, 0, 60);
          //$headline = preg_replace("/[^ ]*$/", '', substr($headline, 0, 150));
          $headline = wordwrap( $headline, 88, "<NEXT>" );
          $headline = explode("<NEXT>",$headline);

          $teaser_output = "";
          $teaser_output .= '<div class="animalteaser">';
          $teaser_output .= '<div class="animalteaserimg">';
          $teaser_output .= '<img src="index.php?rex_img_type=previewImage&rex_img_file=' . $teaserimg[0] . '">';
          $teaser_output .= '</div>';

              $alter_plural = "";
              if ($age_unit == "Woche" && $age > 1) {
              $alter_plural = "n";
              } elseif($age > 1) {
              $alter_plural = "e"; }

          $teaser_output .= '<p><strong>' . $slice->getValue(1) . '</strong>, ' . $age . ' ' . $age_unit . $alter_plural . ', ' . $headline[0] . ' ...</p>';
          $teaser_output .= '</div>';
          echo $teaser_output;
          }

        }

}

?>
Da ich verschiedene Kategorien aufrufen will, hole ich die Kategorie-ID über die Moduleingabe mit REX_VALUE[1] und mache die Anzahl der angezeigten Artikel konfigurierbar über REX_VALUE[2].

Code: Alles auswählen

$articles = OOArticle::getArticlesOfCategory("REX_VALUE[1]", true);
bzw.

Code: Alles auswählen

// Nur die ersten 3 Artikel anzeigen
if ($i <= "REX_VALUE[2]") { ...
Entscheidend dabei sind folgende Zeilen:

Code: Alles auswählen

$age = $slice->getValue(2);
$age_unit = $slice->getValue(3); 
$headline = $slice->getValue(5);
Im Redaxo Cheat Sheet findest du die Objektmethoden für Slices http://www.judithraum.net/files/ooredaxo_41.pdf.

Vielleicht hilft dir der Ansatz weiter.

Grüße, su2pect

(PS: man kann das sicher alles schöner bauen, aber ich bin erst seit kurzem mit Redaxo unterwegs und hab schon länger kein PHP mehr geschrieben :oops: )

missmissr
Beiträge: 175
Registriert: 9. Mär 2008, 18:36

28. Okt 2010, 19:07

Hi su2pect,

Danke vielmals für deine Anregung. Ich habe es so geschafft. Und zwar habe ich es mit dem AddOn Meta Infos noch verknüpft.

1.
Im Meta Infos AddOn habe ich mir die Teaser benötigte art_ felder angelegt:

Code: Alles auswählen

art_navi_teaser_bild (als REX_MEDIA_BUTTON)
art_navi_teaser_headline (als text)
art_navi_teaser_text (als text)
art_navi_teaser_link (als REX_MEDIA_BUTTON)
art_navi_teaser_linktext (als REX_LINK_BUTTON)
2.
Dann habe ich das Modul programmiert:

Code: Alles auswählen

Moduleingabe:
Newsteaser aus Meta Infos ...
<br><br>

Code: Alles auswählen

Modulausgabe:

<?php

// hier wird die id der Kategorie bestimmt
// man kann auch eine bestimmte mit z.B. getCategoryById(96) angeben
// $this->getValue holt den Wert dieser Kategorie
$cat = OOCategory::getCategoryById($this->getValue("category_id"));

// hier werden alle Artikel der Kategorie, die online sind ausgelesen
// das erledigt das true in getArticles(true)
$articles = $cat->getArticles(true); 

if ( is_array( $articles) && count( $articles) > 0) {
  
  foreach ( $articles as $article) {
	
    // den aktuellen Artikel nicht verlinken
    if ( $article->getId() == REX_ARTICLE_ID) continue;

    // den Startartikel ausblenden
    if ( $article->isStartPage()) continue;
		
		// die Artikel darstellen und auflisten
			echo '
						<a href="'.rex_getUrl($article->getValue("art_navi_teaser_link")).'"><img src="files/'.$article->getValue("art_navi_teaser_bild").'" alt="'.$article->getName().'" /></a>
						<p><h5>'.$article->getName().'</h5><h6>'.$article->getValue("art_navi_teaser_headline").'</h6>'.$article->getValue("art_navi_teaser_text").'</p>
						<br>
						<ul class="meine_teaserlist">
								<li><a href="'.rex_getUrl($article->getValue("art_navi_teaser_link")).'">'.$article->getValue("art_navi_teaser_linktext").'</a></li>
						</ul>';
   
  }
}

?>
3.
Ins Template muss man dann glaube ich diese Zeilen einfügen, damit die neuen Meta Infos abgerufen werden, ganz oben gleich nach dem <?php ... wo das schon aus dem Standardtemplate steht:

Code: Alles auswählen

// ------ DESCRIPTION/KEYWORDS
$OOStartArticle = OOArticle::getArticleById($REX['START_ARTICLE_ID'], $REX['CUR_CLANG']);
$meta_beschreibung = $OOStartArticle->getValue("art_description");
$meta_suchbegriffe = $OOStartArticle->getValue("art_keywords");
$meta_bild = $OOStartArticle->getValue("art_file");
danach das einfügen ...

Code: Alles auswählen

$art_navi_teaser_headline = $OOStartArticle->getValue("art_navi_teaser_headline");
$art_navi_teaser_text = $OOStartArticle->getValue("art_navi_teaser_text");
$art_navi_teaser_link = $OOStartArticle->getValue("art_navi_teaser_link");
$art_navi_teaser_linktext = $OOStartArticle->getValue("art_navi_teaser_linktext");
$art_navi_teaser_bild = $OOStartArticle->getValue("art_navi_teaser_bild");
und diese Zeilen auch ergänzen ...

Code: Alles auswählen

if($this->getValue("art_navi_teaser_bild") != "")
	$art_navi_teaser_bild = $this->getValue("art_navi_teaser_bild");
	
if($this->getValue("art_navi_teaser_headline") != "")
	$art_navi_teaser_headline = $this->getValue("art_navi_teaser_headline");
	
if($this->getValue("art_navi_teaser_text") != "")
	$rt_navi_teaser_text = $this->getValue("art_navi_teaser_text");
	
if($this->getValue("art_navi_teaser_link") != "")
	$art_navi_teaser_link = $this->getValue("art_navi_teaser_link");
	
if($this->getValue("art_navi_teaser_linktext") != "")
	$art_navi_teaser_linktext = $this->getValue("art_navi_teaser_linktext");
So, und nun kann ich über die Meta Infos die Teaser komfortabel definieren und habe dann sowas wie eine Subnavigation mit Teaserbild und Link. Das ist genau die Mischung aus automatischer Darstellung und manueller Definition der Teaserartikel, die ich mir vorgestellt habe. Das Gute an der Beschäftigung mit den Meta Infos war, dass ich mich jetzt auch mal mit dem Meta Infos beschäftigt habe, was wirklich toll ist, denn ich konnte mein Template dadurch auch im Headerbild noch dynamisieren.

Eine kleine Sache ist noch: Das Modul listet nur Artikel auf, die nicht in nochmaligen Unterkategorien sind. Aber das ist für mich okay. Also die Struktur muss sein > Kategorie > Artikel1, Artikel2 Artikel3. Sobald ich > Kategorie1 > Unterkategorie1.1(mitArtikeln), Unterkategorie1.2(mitArtikeln) hätte, so würden beispielsweise die Artikel der Unterkategorien nicht dargestellt. Vielleicht bräuchte ich das auch noch irgendwann, aber im Moment eben nicht.

Danke dir vielmals su2pect.
Das war der entscheidende Tip mit dem Kategoriemodul.
Grüße, missmissr.

Zurück zu „Allgemeines [R4]“