katematsuda
Beiträge: 6
Registriert: 1. Dez 2017, 18:08

Modul zeigt Fehler ""Call to a member function isStartArticle() on null""

1. Dez 2017, 18:20

Ich versuche ein Modul zu erstellen das jeweils einige Artikel bis auf Startartikel ausliest und ausgibt. Am Ende der Ausgabe soll dann ein Link erscheinen, der z.B. die nächsten 5 Artikel anzeigt, bzw. zu den fünf voringen verlinkt. Das ganze so lange bis zum Ende der Artikel.

Ich habe das Modul versucht für REDAXO5 anzupassen, aber obwohl ich keine Syntaxfehler erhalte gibt es einen Laufzeitfehler "Call to a member function isStartArticle() on null" sobald ich die Seite aufrufe in der das Modul enthalten ist. In der Schleife in der Mitte ist der Aufruf $article->isStartArticle() . Was mache ich da falsch?

Code: Alles auswählen

$articles = array();

foreach ( $cats as $catId) {
  $cat = rex_category::get( $catId);
 
  // CatIds die nicht funktionieren aussortieren
  if( $cat === null) {
     continue;
  }

  $cat_articles = $cat->getArticles( true);

  foreach ( $cat_articles as $ooarticle) {
     // keine Startartikel anzeigen
    if ( $article->isStartArticle()) {
       continue;
     }

     // Damit keine Endlosschleife passiert, den Artikel der die Pagination setzt überspringen
     if ( rex_article::getCurrentId() == REX_ARTICLE_ID) {
        continue;
     }
     $articles[] = $rex_article;
  }
}

Benutzeravatar
runstop64
Beiträge: 321
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Modul zeigt Fehler ""Call to a member function isStartArticle() on null""

1. Dez 2017, 21:28

Hi,

im for Befehl lautet dein Variablenname $ooarticle. Im Folgenden fragst du jedoch $article ab. Später dann $rex_article. Die Variable muss überall gleich heißen.
Zuletzt geändert von runstop64 am 1. Dez 2017, 21:32, insgesamt 1-mal geändert.
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

Benutzeravatar
runstop64
Beiträge: 321
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Modul zeigt Fehler ""Call to a member function isStartArticle() on null""

1. Dez 2017, 21:31

Übrigens enthalten rex_article::getCurrentId()und REX_ARTICLE_ID den gleichen Wert. Du willst hier wohl mit $article->getId() vergleichen (bzw. einer der anderen Variablennamen).
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

katematsuda
Beiträge: 6
Registriert: 1. Dez 2017, 18:08

Re: Modul zeigt Fehler ""Call to a member function isStartArticle() on null""

2. Dez 2017, 01:13

Danke für die Hinweise auf die Namensfehler! Jetzt sind die Laufzeitfehler auch weg. Irgendwo muss aber noch ein Logikfehler sein, oder ein Fehler beim Anpassen an REDAXO5 . Er arbeitet alles ab, findet aber immer nur 0 Artikel, obwohl einige angelegt sind. Vielleicht fällt es jemandem auf , ich bin im Moment zu blind dafür.

Das Modul:

Code: Alles auswählen

<?php

// Nur im Frontend
if (!rex::isBackend()):

if(!function_exists('sortArticlesByCreateDate'))
{
// Sortierfunktion
  function sortArticlesByCreateDate( $artA, $artB) {
     $createA = $artA->_createdate;
     $createB = $artB->_createdate;

     if ( $createA == $createB) {
        return 0;
     }

     return $createA > $createB ? -1 : 1;
  }
}

$start = !empty($_GET['start']) ? (int) $_GET['start'] : 0; // Startitem
$offset = 5; // 5 Items pro Seite
$cats = array( REX_CATEGORY_ID); // alle Kategorien die Du "indizieren" willst

$articles = array();

foreach ( $cats as $catId) {
  $cat = rex_category::get( $catId);

  // CatIds die nicht funktionieren aussortieren
  if( $cat === null) {
     continue;
  } 
  $cat_articles = $cat->getArticles( true);

  foreach ( $cat_articles as $ooarticle) {  echo'1';
     // keine Startartikel anzeigen
    if ( $ooarticle->isStartArticle()) { 
       continue;
     }

     // Damit keine Endlosschleife passiert, den Artikel der die Pagination setzt überspringen
     if ( $ooarticle->getCurrentId() == REX_ARTICLE_ID )

 {
        continue;
     }
     $articles[] = $ooarticle;
  }
} 
$articles_length = count( $articles); 

//Sortieren nach Erstellungsdatum
if ( $articles_length > 0) {

   usort( $articles, "sortArticlesByCreateDate");
}

$article_list = array_slice( $articles, $start, $offset);
foreach ( $article_list as $ooarticle) {
 
  $artId = $ooarticle->getCurrentId();

  $article = new article( $artId);
  echo $article->getArticle();
  echo '<br><br><br><br><br><br><br><br><br><br>';
 
}

$prevStart = $start - $offset;
if ( $prevStart < 0)
{
   $prevStart = '';
}

$nextStart = $start + $offset;
if ( $nextStart >= $articles_length)
{
   $nextStart = '';
}



// Vorherige Seite Link
if ( $prevStart !== '') {
  echo '<a href="'.  rex_getUrl( '', '', array('start'=>$prevStart)).'"> < back </a>';
}

// Nächste Seite
if ( $nextStart !== '') {
  echo '<a href="'.  rex_getUrl( '', '', array('start'=>$nextStart)).'"> more > </a>';
}

endif;

?>

Benutzeravatar
runstop64
Beiträge: 321
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Modul zeigt Fehler ""Call to a member function isStartArticle() on null""

2. Dez 2017, 03:28

$ooarticle->getId() nicht $ooarticle->getCurrentId()
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

katematsuda
Beiträge: 6
Registriert: 1. Dez 2017, 18:08

Re: Modul zeigt Fehler ""Call to a member function isStartArticle() on null""

2. Dez 2017, 10:51

Danke, aber das liegt das Problem anscheinend nicht. Ich habe den Verdacht dass $cat = rex_category::get( $catId); kein Kategorien findet.
Früher war das OOCategory::getCategoryById() .... damit klappte es.

Benutzeravatar
runstop64
Beiträge: 321
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Modul zeigt Fehler ""Call to a member function isStartArticle() on null""

2. Dez 2017, 14:30

Es sollte immer die Kategorie gefunden werden, in der der Artikel mit diesem Modul liegt.
mit

Code: Alles auswählen

dump($variable)
kannst du den jeweiligen Variableninhalt ausgeben und debuggen.

Bei der Artikelausgabe muss es statt

Code: Alles auswählen

new article($artId)
so lauten:

Code: Alles auswählen

new rex_article_content($artId)
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

katematsuda
Beiträge: 6
Registriert: 1. Dez 2017, 18:08

Re: Modul zeigt Fehler ""Call to a member function isStartArticle() on null""

2. Dez 2017, 15:19

Aha! Danke ... die REDAXO5 Doku sagt dazu irgendwie nichts...

Mit dieser Änderung kommt etwas raus, aber auch folgende Fehlermeldung:


Notice: Undefined property: rex_article::$_createdate in rex:///module/26/output on line 10
Notice: Undefined property: rex_article::$_createdate in rex:///module/26/output on line 11

Zu createdate finde ich leider keine Hinweise in der Doku .... weiss es jemand?

Benutzeravatar
runstop64
Beiträge: 321
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: Modul zeigt Fehler ""Call to a member function isStartArticle() on null""

3. Dez 2017, 12:32

Das liegt an der Sortierfunktion im Modul.
Versuche es statt

Code: Alles auswählen

...->_createdate
mit

Code: Alles auswählen

...->getValue(„createdate“)
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

katematsuda
Beiträge: 6
Registriert: 1. Dez 2017, 18:08

Re: Modul zeigt Fehler ""Call to a member function isStartArticle() on null""

3. Dez 2017, 13:21

Vielen Dank an Daniel!

Endlich macht das Modul was es soll. Das war leider eine schwere Geburt. Ich weiss nicht mehr woher das ursprüngliche Modul überhaupt stammt, leider sind die Modul-Download Seiten von früher verschwunden so dass es nicht überprüft werden kann. Dennoch Danke an den ursprünglichen Autor und an alle Helfer hier.

Falls jemand so etwas gebrauchen kann hier der momentan funktionierende Code:

Code: Alles auswählen

<?php

// Nur im Frontend
if (!rex::isBackend()):

if(!function_exists('sortArticlesByCreateDate'))
{
// Sortierfunktion
  function sortArticlesByCreateDate( $artA, $artB) {
     $createA = $artA->getValue('createdate');
     $createB = $artB->getValue('createdate');

     if ( $createA == $createB) {
        return 0;
     }

     return $createA > $createB ? -1 : 1;
  }
}

$start = !empty($_GET['start']) ? (int) $_GET['start'] : 0; // Startitem
$offset = 5; // 5 Items pro Seite
$cats = array( REX_CATEGORY_ID); // alle Kategorien die Du "indizieren" willst

$articles = array();

foreach ( $cats as $catId) {
  $cat = rex_category::get( $catId);
 
  // CatIds die nicht funktionieren aussortieren
  if( $cat === null) {
     continue;
  }

  $cat_articles = $cat->getArticles( true);

  foreach ( $cat_articles as $ooarticle) {
     // keine Startartikel anzeigen
    if ( $ooarticle->isStartArticle()) {
       continue;
     }

     // Damit keine Endlosschleife passiert, den Artikel der die Pagination setzt ?berspringen
     if ( $ooarticle->getId() == REX_ARTICLE_ID) {
        continue;
     }
     $articles[] = $ooarticle;
  }
}
$articles_length = count( $articles);

// Sortieren nach Erstellungsdatum
if ( $articles_length > 0) {

   usort( $articles, "sortArticlesByCreateDate"); 
}

$article_list = array_slice( $articles, $start, $offset);

foreach ( $article_list as $ooarticle) {
  $artId = $ooarticle->getId();

  $article = new rex_article_content( $artId);
  echo $article->getArticle();
  echo '<br><br><br><br><br><br><br><br><br><br>';
 
}

$prevStart = $start - $offset;
if ( $prevStart < 0)
{
   $prevStart = '';
}

$nextStart = $start + $offset;
if ( $nextStart >= $articles_length)
{
   $nextStart = '';
}



// Vorherige Seite Link
if ( $prevStart !== '') {
  echo '<a href="'.  rex_getUrl( '', '', array('start'=>$prevStart)).'"> < back </a>';
}

// N?chste Seite
if ( $nextStart !== '') {
  echo '<a href="'.  rex_getUrl( '', '', array('start'=>$nextStart)).'"> more > </a>';
}

endif;

?>

Zurück zu „Module/Aktionen [R5]“

Wer ist online?

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