[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Alle Teaser-Artikel anzeigen - 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/
Benutzeravatar
holger
Beiträge: 403
Registriert: 21. Jun 2005, 13:21
Wohnort: Sehnde / Hannover / lower saxony
Kontaktdaten: Website

Alle Teaser-Artikel anzeigen

27. Mär 2006, 16:19

Hallo,

ich möchte alle Artikel vollständig anzeigen lassen, die als Teaser gekennzeichnet und online sind. Egal in welcher Kategorie.


Und als Erweiterung:
Von diesen möchte ich immer 4 zufällig ausgewählt anzeigen lassen.
Hat jemand eine Idee ?

Ich habe schon mal angefangen. Leider wird irgendwie nix angezeigt.

Code: Alles auswählen

<?php
// Nur im Frontend
if ( !$REX['REDAXO']):

// Anzahl anzuzeigender Meldungen
$anzahl= 'REX_VALUE[1]';

$sql = new sql(); 
$qry = sprintf( "SELECT id FROM rex_article WHERE status='1' AND teaser='1' AND clang=%s ORDER BY prior", $REX['CUR_CLANG']); 

$sql->setQuery( $qry); 
$arr = $sql->get_array(); 

$articles = array(); 
if (is_array($arr)) { 
  foreach ( $arr as $row) { 
    $articles[] = OOArticle::getArticleById( $row['id']); 
  } 
} else { 
 echo '<h1>Nix da ;-)</h1>'; 
} 


for($i = 0; $i < count( $articles); $i++) {
  // keine Startartikel anzeigen
  if( $articles[$i]->isStartPage()) {
    unset( $articles[$i]);
    continue;
  }
  // Endlosschleife vermeiden
  if( $articles[$i]->getId() == REX_ARTICLE_ID) {
    unset( $articles[$i]);
    continue;
  }
}
// Artikel mischen
shuffle( $articles);

// Falls weniger Artikel vorhanden sind als ausgewählt
if ($anzahl > count ($articles)):
$anzahl = count($articles);
endif;

// Artikel ausgeben
for($i = 0; $i < $anzahl; $i++) {
$randArticle = $articles[ $i];
$article = new article();
$article->setArticleId( $randArticle->getId());


//Ausgabe
echo '<span class="zufall">'.$article->getArticle().'</span>';
}
endif;
?> 
mfg
holger
// Wenn die Theorie von der Praxis abweicht: --> Ändere die Theorie //

CHRONO.net Media Works
In der Wörth 11
31319 Sehnde
+495138614810 tel
+495138615553 fax
info@chrono.net

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

27. Mär 2006, 17:20

Hi Holger,

was genau ist jetzt das Problem?

Gruß,
Markus

Benutzeravatar
holger
Beiträge: 403
Registriert: 21. Jun 2005, 13:21
Wohnort: Sehnde / Hannover / lower saxony
Kontaktdaten: Website

27. Mär 2006, 17:38

Hallo,
Ich habe schon mal angefangen. Leider wird irgendwie nix angezeigt.
Keine Ausgabe, nix da, nothing, gar nichts, leere Seite,
"irgendwo ist da der Fehler" -aber wo.

mfg
Holger
// Wenn die Theorie von der Praxis abweicht: --> Ändere die Theorie //

CHRONO.net Media Works
In der Wörth 11
31319 Sehnde
+495138614810 tel
+495138615553 fax
info@chrono.net

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

21. Jul 2006, 16:27

ich glaube, ich frage mich derzeit was ganz ähnliches: wie kann man denn alle im system als teaser markierten artikel ausgeben lassen? ich hab da irgendwie den codeteil im modul im verdacht:

Code: Alles auswählen

foreach ( $cats as $catId) {
  $cat = OOCategory::getCategoryById( $catId);
 
  // CatIds die nicht funktionieren aussortieren
  if( $cat === null) {
     continue;
  }

  $cat_articles = $cat->getArticles( true);

  foreach ( $cat_articles as $ooarticle) {
     // keine Startartikel anzeigen
    if ( $ooarticle->isStartPage()) {
       continue;
     }

     // Damit keine Endlosschleife passiert, den Artikel der die Pagination setzt überspringen
     if ( $ooarticle->getId() == REX_ARTICLE_ID) {
        continue;
     }
     $articles[] = $ooarticle;
  }
}
was kann und muss ich denn da abändern? ich hab auch grad keine ahnung, wie ich

if( $cat === null) {
continue;
}

abändern könnte - falls das die entsprechende böse stelle ist..

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

21. Jul 2006, 16:39

Hi,

wenn die Seite mehr als 60-70 Artikel hat, würd ich das ganze via SQL machen, nicht via OOF:

Code: Alles auswählen

$qry = 'SELECT id FROM '. $REX['TABLE_PREFIX'] .'article WHERE teaser=1 and status=1 and clang='. $REX['CUR_CLANG'];
$sql = new sql();
$sql->setQuery($qry);

for($i = 0; $i < $sql->getRows(); $i++)
{
  $art = OOArticle::getArticleById($sql->getValue('id'));
  // Tu mit dem OOArticle was du willst
  $sql->next();
}
Gruß,
Markus

Benutzeravatar
cukabeka
Beiträge: 821
Registriert: 31. Mai 2006, 00:01
Wohnort: Aschaffenburg

24. Jul 2006, 17:13

mir ist eben aufgefallen, dass es eigentlich für meine zwecke schon reichen würde, eine (offline geschaltete) Kategorie mittels modul auszulesen und die darin vorhandenen Artikel mit bix zu x zeichen auszugeben. in anlehnung an Deine idee von http://forum.redaxo.de/sutra16421.html#16404 hab ich mal folgendes gebaut:

Code: Alles auswählen

<?

$itemsPerSide = "REX_VALUE[1]";
$wordsPerArticle = "REX_VALUE[2]";


$cat = OOCategory::getCategoryById(50); // betreffende kategorie angeben, in der die artil stehen
$aktuelle_artikel = $cat->getArticles();

foreach ($aktuelle_artikel as $article) {

		$artid = $article->getId();
		
		$articleContent = new article;
		$articleContent->setArticleID($artid);
		
		$articleContent = $articleContent->getArticle();
		
		// Leerzeichen entfernen am Anfang und Ende des Strings
		$articleContent = trim($articleContent);
		
		// Leerzeichen vor </p> einfuegen.
		// Sonst wird das letzte Wort eines Absatzes und das erste Wort 
		// des nachfolgenden Absatzes als ein Wort erkannt
		$articleContent = str_replace("</p>", " </p>", $articleContent);
		
		// Leerzeichen vor <br /> einfuegen.
		// Sonst wird das letzte Wort einer Zeile und das erste Wort 
		// des nachfolgenden Zeile als ein Wort erkannt
		$articleContent = str_replace("<br />", " <br />", $articleContent);
		
		
		// kein h1
		$articleContent = str_replace("<h1>", " <h4>", $articleContent);
		$articleContent = str_replace("</h1>", " </h4>", $articleContent);
		
		$articleContent = str_replace("<h2>", " <h4>", $articleContent);
		$articleContent = str_replace("</h2>", " </h4>", $articleContent);
		
		$articleContent = str_replace("<h3>", " <h4>", $articleContent);
		$articleContent = str_replace("</h3>", " </h4>", $articleContent);
		
		
		$output = "";
		$words = explode(" ",$articleContent);
		$wordsCount = count($words);
	
		if ($wordsCount < $wordsPerArticle) $wEnd = $wordsCount;
			else  $wEnd = $wordsPerArticle;
					
		for ($w=0;$w<$wEnd;$w++) {
			$output .= $words[$w]." ";
		}
		
		// Leerzeichen entfernen am Anfang und Ende des Strings	
		$output = trim($output);
	
		$isCloseParagraph = substr($output,-4);
		$link = '<a href="'.rex_getUrl($articleId).'">...mehr</a>';
		$newString = $link.'</p>';
	
	
		if ($isCloseParagraph == '</p>') {
				$output = substr_replace($output,$newString,-4);
			}
			else {
				$output .= $newString;
			}
		
		print '<div class="teaser">'.$output.'</div>';
	
	}

?>
ich frag mich grade noch, wie man das ganze nach datum geordnet ausgeben kann.. getArticlesByDate()? ist leider nicht dokumentiert..

Havard
Beiträge: 150
Registriert: 20. Jan 2005, 19:59

10. Jun 2007, 13:54

Hallo, hab ein ähnliches Problem. Jedoch würde ich gerne nur die letzten drei als Teaser gekennzeichneten Artikel der selben Kategorie anzeigen lassen. (ganz schön viele Informationen auf einmal, bitte genau lesen ;))

Dabei ist mir lediglich folgende Anzeige wichtig:

Code: Alles auswählen

<div id="notice"><a href="'.rex_getUrl($articleId).'"><img src="'.$REX[HTDOCS_PATH].'/files/'.$articleFile.'" alt="???" /></a><p>'.$articleName.'</p></div>
Wie gebe ich zudem den alt_text aus, der sich auf den Medienpool-Titel des Bildes bezieht?

Hoffe ihr köpnnt mir helfen!


Gruß und vielen lieben Dank!
Havard

Havard
Beiträge: 150
Registriert: 20. Jan 2005, 19:59

13. Jun 2007, 21:17

kann mir niemand helfen? *push* :oops:

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

13. Jun 2007, 21:31

Hi,

einfach via SQL die Artikel der Kategorie abfragen, mit einem ORDER BY updatedate desc LIMIT 3

Wie man an die Metadaten eines Bildes kommst, siehst du hier
http://www.redaxo.de/165-Moduldetails.html?module_id=29

cukabeka hat geschrieben: ich frag mich grade noch, wie man das ganze nach datum geordnet ausgeben kann.. getArticlesByDate()? ist leider nicht dokumentiert..
http://wiki3.redaxo.de/index.php?n=R3.S ... lichkeiten

Gruß,
Markus

Havard
Beiträge: 150
Registriert: 20. Jan 2005, 19:59

13. Jun 2007, 22:09

alles klar danke.. ich probier mich mal!

Havard
Beiträge: 150
Registriert: 20. Jan 2005, 19:59

14. Jun 2007, 16:42

hey, leider bekomme ich das mit den metadaten nicht hin. mein code sieht jetzt folgendermaßen aus und zeigt bis auf den title den gewünschten effekt:

Code: Alles auswählen

<?
$cat = OOCategory::getCategoryById($this->getValue("category_id"));
$article = $cat->getArticles();
$limit = "REX_VALUE[1]" != "" && is_numeric( "REX_VALUE[1]") ? "REX_VALUE[1]" : 5;

$sql = new sql();
$qry = sprintf( "SELECT id FROM rex_article WHERE clang=%s AND id != REX_ARTICLE_ID ORDER BY updatedate DESC LIMIT %s", $REX['CUR_CLANG'], $limit);

if (is_array($article)) {
	foreach ($article as $var) {

	$articleId		= $var->getId();
	$articleName		= $var->getName();
	$articleFile		= $var->getFile();

		if ($var->getValue(_startpage) != 1) {
			echo '<div id="notice"><a href="'.rex_getUrl($articleId).'"><img src="'.$REX[HTDOCS_PATH].'/files/'.$articleFile.'" alt="'.$bildTitle.'" /></a><p>'.$articleName.'</p></div>';
		}
	}
}
?>
fehlt außerdem, dass nur in den metadaten als teaser gekennzeichnete artikel aufgelistet werden sollen.

vielen dank für deine hilfe!
Zuletzt geändert von Havard am 14. Jun 2007, 17:03, insgesamt 1-mal geändert.

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

14. Jun 2007, 17:02

Hi,

Aus dem Modul oben, müsstest du sowas ähnliches hier rauskopieren..

Code: Alles auswählen

  $media = OOMedia::getMediaByName( $metaFile);
  $path = $media->getFullPath();
  $desc = htmlentities( $media->getDescription());
  $width = $media->getWidth();
  $height = $media->getHeight();
  printf ('<div class="banner"><img src="%s" alt="%s" title="%s" style="width: %spx; height:%spx" /></div>', $path, $desc, $desc, $width, $height);
Warum fragst du die Artikel via OOF und SQL ab?


Gruß,
Markus

Havard
Beiträge: 150
Registriert: 20. Jan 2005, 19:59

14. Jun 2007, 17:05

na bin doch nicht der große coder.. suche mir die schnipsel meist zusammen und deswegen ist es wohl so geworden. wie ginge es denn noch? ;) wo genau binde ich den deinen schnipsel ein? hab schon mehreres ausprobiert und kam nicht zum erfolg - immer wieder fehlermeldungen :(
Havard hat geschrieben:edit: fehlt außerdem, dass nur in den metadaten als teaser gekennzeichnete artikel aufgelistet werden sollen.

Dr KillerJoe
Beiträge: 1711
Registriert: 24. Nov 2005, 22:29
Kontaktdaten: ICQ Website Yahoo Messenger

15. Jun 2007, 13:02

Havard hat geschrieben:edit: fehlt außerdem, dass nur in den metadaten als teaser gekennzeichnete artikel aufgelistet werden sollen.
>Template: Artikel ist Teaser?< Daraus kannst Du Dir das nehmen was Du brauchst ;)

mfg
Flo
Die Doku und Wiki sind Deine Freunde!!!

Havard
Beiträge: 150
Registriert: 20. Jan 2005, 19:59

17. Jun 2007, 18:25

kann mir vielleicht das beides jemand vielleicht so einpflegen, dass es auch funktioniert?

wenn ich versuche etwas einzupflegen, kommen bei mir entweder nur fehlermeldungen oder aber es wird gar nichts angezeigt.

danke!!

gruß havard

Dr KillerJoe
Beiträge: 1711
Registriert: 24. Nov 2005, 22:29
Kontaktdaten: ICQ Website Yahoo Messenger

18. Jun 2007, 13:14

Zeig doch mal her was Du da gebastelt hast, dann kann man Dir auch sagen wo der Fehler liegt. Wenn das jemand für Dich macht lernst Du ja auch nichts dabei ;)

mfg
Flo
Die Doku und Wiki sind Deine Freunde!!!

Benutzeravatar
diefanz
Beiträge: 83
Registriert: 13. Feb 2006, 04:06
Wohnort: Cham
Kontaktdaten: ICQ Website Yahoo Messenger

25. Okt 2007, 18:43

So, grab den Thread mal wieder aus.

Habe mir folgendes zusammengebastelt.

Code: Alles auswählen

<?php

$qry = 'SELECT id FROM '. $REX['TABLE_PREFIX'] .'article WHERE teaser=1 and status=1 and clang='. $REX['CUR_CLANG'].' ORDER BY createdate DESC';
$sql = new sql();
$sql->setQuery($qry);

for($i = 0; $i < $sql->getRows(); $i++)
{
	$art = OOArticle::getArticleById($sql->getValue('id'));
	$online = date('d.m.Y', $art->getValue('createdate'));
	
	$cat = OOCategory::getCategoryById($art->getValue('re_id'));

	// Tu mit dem OOArticle was du willst

	$articleId = $art->getId();
	$articleName = $art->getName();
	$articleDate = $art->getCreateDate();
	$articleCat = $cat->getName(); 
	$articleDescription	= $art->getDescription();
	$article = new article();
	$article->setArticleId( $articleId);


		if ($art->getValue(_startpage) != 1) {
			echo "\n".'<div class="article-list"><h1>'.$articleName.'</h1>'."\n\t";
			echo '<h5>'.$online.', Kategorie: '.$articleCat.'</h5>'."\n\t";
			echo '<p>'.$articleDescription.'</p>'."\n\t";
			echo '<p><a href="'.rex_getUrl($articleId).'">more >></a></p>'."\n";
			echo '</div>'."\n";
		}
  
  $sql->next(); 
}

?>
Jeder als Teaser indiziert Artikel wird nun ausgegeben. Als Text wird die Beschreibung aus den Metadaten genommen. Jetzt würde er aber alle Artikel auflisten und in einer Basketballsaison kommen da ganz schön viel Artikel zusammen.

Jetzt habe ich zwei Fragen:

1. Wie löse ich das Problem, dass nur eine bestimmte Anzahl pro Seite angezeigt werden und dafür ein "vor" und "zuück" Button angezeigt werden. Habe schon in den Teasermodulen gesucht, aber ich komme da auf keinen grünen zweig.

2. Kann ich die Styles vom ersten oder letzten Artikel beeinflussen?

Danke für eure Tipps
Hallo,
gestatten, ich bin die Signatur!

Zurück zu „Allgemeines [R3]“