[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Alle Artikel unter R5 ausgeben
Seite 1 von 1

Alle Artikel unter R5 ausgeben

Verfasst: 20. Mär 2016, 23:24
von Daimonion
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?

Re: Alle Artikel unter R5 ausgeben

Verfasst: 21. Mär 2016, 08:38
von Sioweb
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

Re: Alle Artikel unter R5 ausgeben

Verfasst: 21. Mär 2016, 09:43
von Daimonion
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

Re: Alle Artikel unter R5 ausgeben

Verfasst: 21. Mär 2016, 10:20
von Thomas.Blum
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

Re: Alle Artikel unter R5 ausgeben

Verfasst: 21. Mär 2016, 10:33
von Daimonion
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.

Re: Alle Artikel unter R5 ausgeben

Verfasst: 21. Mär 2016, 11:27
von Daimonion
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();
        }
    }
?>