[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Modul zeigt Fehler ""Call to a member function isStartArticle() on null"" - 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/
katematsuda
Beiträge: 26
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: 369
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: 369
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: 26
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: 369
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: 26
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: 369
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: 26
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: 369
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: 26
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]“