Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Alles rund um Module und Plugins in CONTENIDO 4.9.
Antworten
derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Beitrag von derju » Do 31. Aug 2017, 08:13

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
Contenido 4.8.20 | Contenido 4.9.12

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Beitrag von frederic.schneider_4fb » Do 31. Aug 2017, 09:19

Hast Du Dir mit var_dump($artikel->content); einmal ausgegeben, welcher Wert zurück kommt?
Frederic Schneider
Entwickler bei der four for business AG

derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Beitrag von derju » Do 31. Aug 2017, 09:37

Ich erhalte NULL
Contenido 4.8.20 | Contenido 4.9.12

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Beitrag von frederic.schneider_4fb » Do 31. Aug 2017, 09:46

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
Frederic Schneider
Entwickler bei der four for business AG

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Beitrag von Oldperl » Do 31. Aug 2017, 09:50

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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

derju
Beiträge: 301
Registriert: Do 15. Jan 2009, 09:00
Kontaktdaten:

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Beitrag von derju » Do 31. Aug 2017, 09:53

Hallo Ortwin,

könntest du mir hierzu ein Beispiel geben?

LG - Jules
Contenido 4.8.20 | Contenido 4.9.12

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Beitrag von Oldperl » 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.

Gruß aus Franken

Ortwin
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Beitrag von Oldperl » Do 31. Aug 2017, 10:03

Servus Jules,
derju hat geschrieben:
Do 31. Aug 2017, 09:53
kö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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Beitrag von frederic.schneider_4fb » Do 31. Aug 2017, 10:09

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
Frederic Schneider
Entwickler bei der four for business AG

Oldperl
Beiträge: 4250
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Beitrag von Oldperl » Do 31. Aug 2017, 10:22

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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

frederic.schneider_4fb
Beiträge: 967
Registriert: Do 15. Apr 2004, 17:12
Wohnort: Eschborn-Niederhöchstadt
Kontaktdaten:

Re: Problem bei Upgrade eines Moduls von 4.8 auf 4.9

Beitrag von frederic.schneider_4fb » Do 31. Aug 2017, 10:23

Genauso ist es :). Insofern: Gut, dass wir drüber gesprochen haben :mrgreen:
Frederic Schneider
Entwickler bei der four for business AG

Antworten