[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
$Cat=$article->getCategory - Call to Undefined Function - 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/
PaxVobisCum
Beiträge: 45
Registriert: 3. Nov 2008, 22:58
Kontaktdaten: ICQ

$Cat=$article->getCategory - Call to Undefined Function

2. Mär 2010, 23:35

Hoi,

ich habe bisher primär C# und Python programmiert und mit PHP eher zu Zeiten vor dem Sprung in die Objetorientierung zu tun gehabt.

Aktuell stehe ich vor folgendem Problem, über das ich schon verschiedentlich gestolpert bin
Ich versuche im Template mir den aktuellen Artikel über

Code: Alles auswählen

$article=$this->getArticle();
zu holen.
Danach soll zu diesem Artikel die Kategorie ermittelt und testweise einfach mal der artikelname ausggeben werden.
Nachdem schon das Ermitteln des Artikels mit obigem Code nicht klappt, das ganze mal auf Nummer Sicher

Code: Alles auswählen

$xaktArticle = OOArticle::getArticleById($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
Ausgabe mit

Code: Alles auswählen

echo $xaktArticle->getName();
klappt, also scheint der Artikel als Objekt vorzuliegen.

Wenn ich nun aber mit

Code: Alles auswählen

$xaktCat = $xaktArticle->getCategory();
echo $xaktCat->getName();
versuche die Kategorie zu ermitteln und den Namen auszugeben bekomme ich die Meldung

Code: Alles auswählen

Call to a member function getName() on a non-object in /
Kann mir da jmd Hilfestellung geben ?

Benutzeravatar
timo.huber
Beiträge: 305
Registriert: 22. Dez 2009, 13:26

2. Mär 2010, 23:51

Hoi,

mit $this->getArticle() gibst du den Inhalt des Artikels aus (kein Object).
Also z.b. '<h2>Hallo</h2>' (was du eben in deinem Backend in diesem Artikel eingegeben hast.

Code: Alles auswählen

$xaktArticle = OOArticle::getArticleById($REX['ARTICLE_ID'], $REX['CUR_CLANG']); 
das ist richtig.


Schau dir mal diese Beispiele an, hoffe es hilft:

Code: Alles auswählen

<p>
<?php

$xaktArticle = OOArticle::getArticleById($REX['ARTICLE_ID'], $REX['CUR_CLANG']); 
echo 'Artikelname ooarticle: ' .  $xaktArticle->getName() . "<br />";

$xaktCat = $xaktArticle->getCategory();
echo "Kategoriename ooarticle->getcat: " . $xaktCat->getName() . "<br />"; 

echo "Kategoriename getvalue: " . $this->getValue("catname"). "<br />";

$cat = OOCategory::getCategoryById($this->getValue("category_id"));
echo "Kategoriename categorybyid: " . $cat->getName() .  "<br />";
?>
</p>
$glaskugel = new rex_glaskugel();
$loesung = $glaskugel->getLoesung("problem");
foreach ($loesung as $l)
{
echo $l;
}

PaxVobisCum
Beiträge: 45
Registriert: 3. Nov 2008, 22:58
Kontaktdaten: ICQ

3. Mär 2010, 08:33

Hat leider nicht funktioniert (obwohl es auch meiner Ansicht nach so richtig ist)

Code: Alles auswählen

$xaktArticle = OOArticle::getArticleById($REX['ARTICLE_ID'],$REX['CUR_CLANG']); 


echo 'Artikelname ooarticle: '.$xaktArticle->getName()."<br/>";
$xaktCat = $xaktArticle->getCategory();
echo "Kategoriename ooarticle->getcat: ".$xaktCat->getName()."<br />";
echo "Kategoriename getvalue: ".$this->getValue("catname")."<br/>";
$cat = OOCategory::getCategoryById($this->getValue("category_id"));
echo "Kategoriename categorybyid: ".$cat->getName()."<br/>";
Beim Aufruf von $xaktCat->getName()

Code: Alles auswählen

Artikelname ooarticle: Test

Fatal error: Call to a member function getName() on a non-object in .....

Benutzeravatar
timo.huber
Beiträge: 305
Registriert: 22. Dez 2009, 13:26

3. Mär 2010, 08:46

Hi,

ich bin eigentlich davon ausgegangen, dass dein Artikel auch in einer Kategorie ist ;)
Hast du einen Artikel auf aller Oberster Ebene?
Da ist es natürlich klar, dass keine Kategorie gefunden werden kann ;)
Dadurch kannst du natürlich auch nicht den Namen Abfragen (nicht vorhandenes Objekt).

Das kannst du aber abfangen:

Code: Alles auswählen

<p>
<?php

$xaktArticle = OOArticle::getArticleById($REX['ARTICLE_ID'], $REX['CUR_CLANG']);
echo 'Artikelname ooarticle: ' .  $xaktArticle->getName() . "<br />";

if($xaktCat = $xaktArticle->getCategory())
echo "Kategoriename ooarticle->getcat: " . $xaktCat->getName() . "<br />";


?>
</p>
mfg
$glaskugel = new rex_glaskugel();
$loesung = $glaskugel->getLoesung("problem");
foreach ($loesung as $l)
{
echo $l;
}

PaxVobisCum
Beiträge: 45
Registriert: 3. Nov 2008, 22:58
Kontaktdaten: ICQ

7. Mär 2010, 17:19

Argl, mal wieder den Wald vor lauter bäumen nicht gesehen ;),
lag natürlich daran, dass ich den Artikel auf oberster Ebene hatte.
Tausend Dank ;)

PaxVobisCum
Beiträge: 45
Registriert: 3. Nov 2008, 22:58
Kontaktdaten: ICQ

7. Mär 2010, 17:23

aber warum funktioniert:

Code: Alles auswählen

$testArticle=$this->getArticle();
echo $testArticle->getName();
nicht, während

Code: Alles auswählen

$xaktArticle = OOArticle::getArticleById($REX['ARTICLE_ID'],$REX['CUR_CLANG']); 
echo 'Artikelname ooarticle: '.$xaktArticle->getName()."<br/>";
funktioniert ?

Benutzeravatar
timo.huber
Beiträge: 305
Registriert: 22. Dez 2009, 13:26

8. Mär 2010, 10:33

Hi,

wie bereits erwähnt gibt getArticle() nicht den Artikel als Objekt zurück, sondern den Inhalt des Artikels.

mfg
$glaskugel = new rex_glaskugel();
$loesung = $glaskugel->getLoesung("problem");
foreach ($loesung as $l)
{
echo $l;
}

Benutzeravatar
Gregor.Harlan
Entwickler
Beiträge: 1130
Registriert: 4. Jun 2007, 10:35
Wohnort: Frankfurt am Main

8. Mär 2010, 16:59

Hallo,

statt

Code: Alles auswählen

$testArticle=$this->getArticle(); 
echo $testArticle->getName();
einfach so:

Code: Alles auswählen

echo $this->getValue('name');
oder außerhalb von <?php ?>

Code: Alles auswählen

REX_ARTICLE[field="name"]
Gruß, Gregor
Friends Of REDAXO: Gemeinsame REDAXO-Entwicklung!

PaxVobisCum
Beiträge: 45
Registriert: 3. Nov 2008, 22:58
Kontaktdaten: ICQ

11. Mär 2010, 23:46

$this ist also immer der aktuelle Artikel ?
Egal ob ich $this in Artikel, slice, template etc benutze ?

Benutzeravatar
timo.huber
Beiträge: 305
Registriert: 22. Dez 2009, 13:26

12. Mär 2010, 12:01

Jawohl so ist es,

$this ist der Aktuelle Artikel.
Du kannst auch $this in einem Template verwenden und damit auf Daten aus dem Artikel zugreifen.

mfg
$glaskugel = new rex_glaskugel();
$loesung = $glaskugel->getLoesung("problem");
foreach ($loesung as $l)
{
echo $l;
}

Zurück zu „Allgemeines [R4]“