Seite 1 von 1

Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Verfasst: Do 31. Aug 2017, 08:13
von derju
Hallo zusammen,

ich erhalte in den Logs eine Fehlermeldung:
PHP Warning: Invalid argument supplied for foreach()

Ich vermute das es etwas mit $artikel->content zutun hat.

Vielleicht kann mit hier jemand weiter Helfen.

Code: Alles auswählen

$artikelListe = new cArticleCollector($arrOptions);
$intCounter   = 0;

$tpl->reset();

while ($artikel = $artikelListe->nextArticle())
{
    if($prmMaxCount>0 && $intCounter == $prmMaxCount){break;}
    $aLinks = array();
    foreach($artikel->content as $type => $val){
        
        foreach($val as $iID => $cnt){
        
            if($type == 'cms_img'){
                $imgID =  $artikel->getContent(substr($type,4),$iID);
                $strImagePath  =  '';
                $strImageTitle =  '';
Besten Dank

LG - derJu

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Verfasst: Do 31. Aug 2017, 09:19
von frederic.schneider_4fb
Hast Du Dir mit var_dump($artikel->content); einmal ausgegeben, welcher Wert zurück kommt?

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Verfasst: Do 31. Aug 2017, 09:37
von derju
Ich erhalte NULL

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Verfasst: Do 31. Aug 2017, 09:46
von frederic.schneider_4fb
Und das ist der Fehler: foreach erwartet ein Array und erhält NULL. D. h. Du musst schauen, wieso NULL zurück kommt. Dazu empfehle ich Dir mal, Dir die Funktion cArticleCollector->nextArticle() anzusehen und nachzuvollziehen, wieso da nichts zurück kommt. Es wäre für Dein Modul übrigens - nebenbei bemerkt - empfehlenswert, gar nicht erst bis zur foreach-Schleife zu kommen, wenn $artikel->content leer ist

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Verfasst: Do 31. Aug 2017, 09:50
von Oldperl
Servus,
/**
* Article content
*
* @deprecated [2015-05-27]
* @var array
*/
public $content = NULL;
Steht so in der Klasse contenido/classes/contenido/class.articlelanguage.php.
Am Besten die Daten direkt über die Klasse abfragen.

Gruß aus Franken

Ortwin

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Verfasst: Do 31. Aug 2017, 09:53
von derju
Hallo Ortwin,

könntest du mir hierzu ein Beispiel geben?

LG - Jules

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Verfasst: Do 31. Aug 2017, 09:55
von Oldperl
Wobei ich nicht ganz verstehe, warum die Klassen-Variable deprecated sein soll, aber die Methode getContent(), die diese Variable nutzt/befüllt dann nicht. Eventuell sollte hier der Entwickler nochmal eine genauere Aussage dazu machen.

Gruß aus Franken

Ortwin

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Verfasst: Do 31. Aug 2017, 10:03
von Oldperl
Servus Jules,
derju hat geschrieben: Do 31. Aug 2017, 09:53könntest du mir hierzu ein Beispiel geben?
Sorry, da hab ich gerade nichts entsprechendes hier vorliegen. :roll:
Aber nochmal zum Verständnis. Du greifst auf eine Klassenvariable zu, die als Standard NULL ist. Sie wird erst beim 1. Aufruf von getContent(), falls noch nicht geschehen, befüllt. Daher kommt dein nicht befülltes Array bzw. die NULL in der foreach-Schleife.
Rufst Du diese Methode vor der Schleife ein Mal auf für irgendeinen Content-Type und prüfst sie zusätzlich vor der Abfrage-Schleife dann nochmals auf NULL und Empty sollte deine Schleife funktionieren.

Gruß aus Franken

Ortwin

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Verfasst: Do 31. Aug 2017, 10:09
von frederic.schneider_4fb
Oldperl hat geschrieben: Do 31. Aug 2017, 09:55 Wobei ich nicht ganz verstehe, warum die Klassen-Variable deprecated sein soll, aber die Methode getContent(), die diese Variable nutzt/befüllt dann nicht. Eventuell sollte hier der Entwickler nochmal eine genauere Aussage dazu machen.
Ich habe mich gerne mal informiert:

Die Variable "content" ist zurzeit eine public-Variable. Das wollen wir eigentlich nicht. Deshalb soll die Variable auf Sicht auf protected/private umgestellt und mit einer Get-Methode angesprochen werden. Der zuständige Entwickler hat die Variable deshalb auf deprecated (silent) gestellt, damit externe Entwickler nicht mehr direkt auf diese Variable zugreifen.

D. h. wir werden - wohl nicht mehr in der kommenden, oder was meint Ihr? - in einer der nächsten Versionen die Variable "content" nicht mehr als public in der Klasse haben, sondern geschützt und nur noch über eine Get-Methode aufrufbar.

Ich hoffe, die Erklärung macht das etwas verständlicher

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Verfasst: Do 31. Aug 2017, 10:22
von Oldperl
Servus Frederic,

das trifft meine Vermutung. Dann muss aber auch Julius sein Modul entsprechend ändern. Ein direkter Zugriff auf die Klassenvariabe ist ja dann nicht mehr möglich.

Gruß aus Franken

Ortwin

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Verfasst: Do 31. Aug 2017, 10:23
von frederic.schneider_4fb
Genauso ist es :). Insofern: Gut, dass wir drüber gesprochen haben :mrgreen: