[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Alle Artikel unter R5 ausgeben - 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/
Daimonion
Beiträge: 38
Registriert: 15. Okt 2015, 21:00

Alle Artikel unter R5 ausgeben

20. Mär 2016, 23:24

Hallo

beim Versuch alle Artikel aus der gewählten Kategorie auszugeben, bekomme ich eine Fehlermeldung beim Versuch die API zu nutzen:

Code: Alles auswählen

<?php 
	$articles = (rex_category::getArticles(true));
	foreach ($articles as $article) {
		$articleID = $article->getCurrentID();
		$articleContent = new rex_article_content;
		$articleContent->setArticleId($articleID);
		echo $articleContent->getArticle();
	}
?>

Die Fehlermeldung lautet:

Code: Alles auswählen

Strict: Non-static method rex_category::getArticles() should not be called statically, assuming $this from incompatible context in rex://template/1 on line 20
Notice: Undefined property: rex_article_content::$id in D:\Homepage\kirsch-konditor_redaxo\redaxo\src\addons\structure\lib\category.php on line 104
Notice: Undefined property: rex_article_content::$clang_id in D:\Homepage\kirsch-konditor_redaxo\redaxo\src\addons\structure\lib\category.php on line 104[/code

Ich dachte rex_category sei schon statisch und ich kann damit relativ problemlos die Artikel als Array auslesen. Siehe auch 

http://www.redaxo.org/docs/master/source-class-rex_category.html#90-105

Nun dachte ich ich kann mal eine Funktion implementieren ohne euch zu fragen und schaff es immer noch nicht. ;)

Was mach ich da noch falsch?

Benutzeravatar
Sioweb
Beiträge: 29
Registriert: 23. Feb 2015, 10:27
Wohnort: Waldshut-Tiengen
Kontaktdaten: Website

Re: Alle Artikel unter R5 ausgeben

21. Mär 2016, 08:38

Ho!

Du müsstest rex_category mitteilen um welche Kategorie es sich handelt und damit die Instanz starten:

In deinem Fall:

rex_category::getCurrent()->getArticles(true)

lg
Sascha

Daimonion
Beiträge: 38
Registriert: 15. Okt 2015, 21:00

Re: Alle Artikel unter R5 ausgeben

21. Mär 2016, 09:43

Hallo.

Danke für deine Antwort. Denn Sinn bzw. die Idee dahinter habe ich verstanden. Leider mein Redaxo noch nicht. :mrgreen:

Code: Alles auswählen

<?php 
	$articles = array();
	$cat = rex_category::getCurrent();
	$articles = $cat->getArticles(true);
	foreach ($articles as $article) {
		$articleID = $article->getCurrentID();
		$articleContent = new rex_article_content;
		$articleContent->setArticleId($articleID);
		echo $articleContent->getArticle();
	}
?>
bringt mir eine Exception dass $cat kein Object ist:

Code: Alles auswählen

"ErrorException" thrown in rex://template/1 on line 22
Fatal error: Call to a member function getArticles() on a non-object
getcurrent liefert mir doch eine Instanz von rex_category zurück oder?

vgl.: http://www.redaxo.org/docs/master/sourc ... html#10-20

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: Alle Artikel unter R5 ausgeben

21. Mär 2016, 10:20

Hej,

In welchem Artikel rufst du denn dein Skript auf?

Außerdem würde ich eine Prüfung einsetzen und du müsstest nicht getCurrentId() holen sondern nur die getId().

Code: Alles auswählen

<?php 
$articles = array();
$cat = rex_category::getCurrent();
if ($cat instanceof rex_category) {
    $articles = $cat->getArticles(true);
    foreach ($articles as $article) {
        if ($article instanceof rex_article) {
            $articleID = $article->getId();
            $articleContent = new rex_article_content;
            $articleContent->setArticleId($articleID);
            echo $articleContent->getArticle();
        }
    }
}
?>
vg Thomas

Daimonion
Beiträge: 38
Registriert: 15. Okt 2015, 21:00

Re: Alle Artikel unter R5 ausgeben

21. Mär 2016, 10:33

Das Skript soll in allen Artikeln meiner Webseite aufgerufen werden.
Aktuell ist es im Haupttemplate drin und soll alle Artikel einer Kategorie ausgeben.

Ich versuch mal meine Kategoriestruktur hier aufzuskizzieren:

Hauptebene
|-Kategorie 1
| |-Unterkategorie 1
| | |-Artikel 1
| | |-Artikel 2
| | |-...
| |-Unterkategorie 2
| | |-Artikel 1
| | |-Artikel 2
| | |-...
| |-...
| | |-Artikel 1
| | |-Artikel 2
| | |-...
|-Artikel 1
|-Artikel 2
|-...

Wie ihr seht mache ich aktuell 2 Kategorieebenen mit je x Artikeln. Alle Artikel einer Kategorie x (Artikel1,Artikel2,Artikelxxx) sollen dann nacheinander ausgegeben werden.
Thomas.Blum hat geschrieben:Außerdem würde ich eine Prüfung einsetzen und du müsstest nicht getCurrentId() holen sondern nur die getId().
Danke für den Tipp, das mache ich auf jeden Fall!

Edit:
Mit deinem Codebeispiel schlägt die Prüfung bei

Code: Alles auswählen

if ($cat instanceof rex_category) {
fehl.
D.h.

Code: Alles auswählen

$cat = rex_category::getCurrent();
liefert mir keine Instanz. Ich muss aber zugeben, dass ich das bisher nur auf der Hauptebene probiert habe.

*KopfWand* NATÜRLICH......
Ich muss auf der Hauptebene mein Objekt anders holen. War ja unter R4 auch schon so.....
Auf den Unterseiten funktioniert alles schon perfekt.

Daimonion
Beiträge: 38
Registriert: 15. Okt 2015, 21:00

Re: Alle Artikel unter R5 ausgeben

21. Mär 2016, 11:27

Kann ich denn bei:

Code: Alles auswählen

$cat = rex_category::getCurrent();
davon ausgehen, dass ein $cat was keine Instanz von rex_category ist die Root Kategorie ist? Oder wie ist die Idee in R5 die Root Kategorie zu finden?

Wenn das so wäre, hab ich das aktuell so gelöst:

Code: Alles auswählen

<?php 
    $articles = array();
    $cat = rex_category::getCurrent();
    if ($cat instanceof rex_category) {
        $articles = $cat->getArticles(true);
    } else {
        $articles = rex_article::getRootArticles(true);
    }
    foreach ($articles as $article) {
        if ($article instanceof rex_article) {
            $articleID = $article->getId();
            $articleContent = new rex_article_content;
            $articleContent->setArticleId($articleID);
            echo $articleContent->getArticle();
        } else {
            //Fehlerartikel
            $articleContent = new rex_article_content;
            $articleContent->setArticleId(rex_article::getNotFoundArticleId());
            echo $articleContent->getArticle();
        }
    }
?>

Zurück zu „Module/Aktionen [R5]“