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

Fragen/Tipps allgemeiner Art.

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

Beitragvon PaxVobisCum » 2. Mär 2010, 22: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 ?
PaxVobisCum
 
Beiträge: 42
Registriert: 3. Nov 2008, 21:58

Beitragvon timo.huber » 2. Mär 2010, 22: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;
}
Benutzeravatar
timo.huber
 
Beiträge: 305
Registriert: 22. Dez 2009, 12:26

Beitragvon PaxVobisCum » 3. Mär 2010, 07: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 .....
PaxVobisCum
 
Beiträge: 42
Registriert: 3. Nov 2008, 21:58

Beitragvon timo.huber » 3. Mär 2010, 07: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;
}
Benutzeravatar
timo.huber
 
Beiträge: 305
Registriert: 22. Dez 2009, 12:26

Beitragvon PaxVobisCum » 7. Mär 2010, 16: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: 42
Registriert: 3. Nov 2008, 21:58

Beitragvon PaxVobisCum » 7. Mär 2010, 16: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 ?
PaxVobisCum
 
Beiträge: 42
Registriert: 3. Nov 2008, 21:58

Beitragvon timo.huber » 8. Mär 2010, 09: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
timo.huber
 
Beiträge: 305
Registriert: 22. Dez 2009, 12:26

Beitragvon Gregor.Harlan » 8. Mär 2010, 15: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
Benutzeravatar
Gregor.Harlan
Entwickler
 
Beiträge: 804
Registriert: 4. Jun 2007, 09:35
Wohnort: Dresden

Beitragvon PaxVobisCum » 11. Mär 2010, 22:46

$this ist also immer der aktuelle Artikel ?
Egal ob ich $this in Artikel, slice, template etc benutze ?
PaxVobisCum
 
Beiträge: 42
Registriert: 3. Nov 2008, 21:58

Beitragvon timo.huber » 12. Mär 2010, 11: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;
}
Benutzeravatar
timo.huber
 
Beiträge: 305
Registriert: 22. Dez 2009, 12:26


Zurück zu Allgemeines [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste