Ergebnis 1 bis 2 von 2

Thema: Nach Update Fatal error: Call to a member function row() on a non-object in news.php

  1. #1
    Contao-Nutzer
    Registriert seit
    25.05.2010.
    Beiträge
    211

    Standard Nach Update Fatal error: Call to a member function row() on a non-object in news.php

    Hallo,

    ich habe ein Live-Update durchgeführt von der Version 3.2.3 auf Version 3.2.7.

    Seit dem Update tritt nun folgender Fehler auf:
    "PHP Fatal error: Call to a member function row() on a non-object in .../contao/system/modules/news/classes/News.php on line 138"
    Die Fehlermeldung tauchte auch schon bei github auf (https://github.com/contao/core/issues/4791), konnte da aber wohl nicht reproduziert werden und das Ticket wurde unverrichteter Dinge geschlossen.

    Bei mir zeigt sich der Fehler nicht im Frontend auf der Website und auch nicht im Backend.

    ABER:
    Ich erzeuge mittels Cron-Job aus der Datenbank heraus eine JSON-Datei die ich verwende, um die in Contao erstellten News-Beiträge in eine Smartphone-App zu überführen. Das ging die ganze Zeit auch perfekt. Bis zu dem Update.

    Als ich nach dem Update einen Newsbeitrag kopiert und die Kopie mit neuem Text etc. versehen hatte, tauchte der oben genannte Fehler das erste mal auf. Seit dem werden auch keine Bilder in die Newsbeiträge übernommen, die man im Kopf des Beitrags nach dem Bereich "Teasertext" mit "Ein Bild hinzufügen" einer Nachricht zuweisen kann. Außerdem wird nun jeder Beitrag, der ab jetzt eingestellt wird doppelt angezeigt.

    In der Nachricht selbst, wohl gemerkt NICHT im Frontend auf der Website, sondern nur im Nachrichtenbeitrag in der Smartphone-App, wird dann folgende Fehlermeldung angezeigt, bevor der Artikel angezeigt wird:

    You are not allowed to access the requested page!
    Maybe you are not logged in correctly?
    If a user tries to access a protected page without permission, a special error_403 page will be called. In this case you can either display an error message (like we are doing now) by simply creating an article on this page, or you can redirect the user to another page (e.g. the welcome page).
    Accordingly, if a user tries to access a page that does not exist, a special error_404 page will be called. Again, you can either display an error message or redirect the user to another page.
    Bei allen anderen Artikeln die vor dem Update erstellt wurden taucht diese Fehlermeldung nicht auf.
    Aber auch bei diesen älteren Beiträgen fehlt jetzt das Bild dazu.

    Was kann ich tun um diesen merkwürdigen Fehler zu beheben?

    Vielen Dank im Voraus für eure Hilfestellungen.

    Gruß,
    pyretta

    EDIT: Falls es was nützt, die JSON-Datei ist laut JSONLint valide. Aber die neuen Artikel sind hier doppelt drin. Einmal mit dem Fehlertext "You are not allowed to access the requested page! [..]" und einmal mit dem eigentlichen Artikel. Und es fehlt überall der Dateipfad für das Beitragsbild, der ist jedesmal "null".

    Hier der PHP-Code mit der Datenbankabfrage und der Erzeugung des Inhalts der JSON-Datei:
    PHP-Code:
    ///NEWS DATENBANK-ABFRAGEN
    $beispielnews_array = array();
    $beispielnews_select "SELECT n.id,n.tstamp,n.headline,n.alias,n.date,n.time,n.subheadline,n.teaser,n.alt,f.path,u.name,c.text FROM tl_news n LEFT JOIN tl_files f ON f.id = n.singleSRC LEFT JOIN tl_user u ON u.id = n.author LEFT JOIN tl_content c ON c.pid = n.id WHERE n.pid = '4' AND n.published = '1' ORDER BY date DESC LIMIT 0, 10";
    $beispielnews_query mysql_query($beispielnews_select)or die("Anfrage fuer 'tl_news' war nicht erfolgreich. Error: ".mysql_error());
    while(
    $obj_ex_news mysql_fetch_object($beispielnews_query)) {
        
    $beispielnews_array[] = $obj_ex_news;
    }
    //ALLE ARRAYS IN MEHRDIMENSIONALES ARRAY ZUSAMMENFASSEN
    $beispiel_arr = array("beispiel" => array("items" => $beispielnews_array));
    //ARRAY ALS JSON FORMATIEREN
    $json_inhalt json_encode($beispiel_arr); 
    Das hat, wie gesagt, die ganze Zeit vor dem Update super funktioniert.

    EDIT 2: Hier noch ein Auszug aus der JSON-Datei:

    Code:
    {
        "beispiel": {
            "items": [
                {
                    "id": "30",
                    "tstamp": "1400494608",
                    "headline": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",
                    "alias": "lorem-ipsum",
                    "date": "1400494500",
                    "time": "1400494500",
                    "subheadline": "",
                    "teaser": "<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>",
                    "alt": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",
                    "path": null,
                    "name": "Max Mustermann",
                    "text": "You are not allowed to access the requested page!<br />\n<br />\nMaybe you are not logged in correctly?<br />\n<br />\nIf a user tries to access a protected page without permission, a special <strong>error_403</strong> page will be called. In this case you can either display an error message (like we are doing now) by simply creating an article on this page, or you can redirect the user to another page (e.g. the welcome page).<br />\n<br />\nAccordingly, if a user tries to access a page that does not exist, a special <strong>error_404</strong> page will be called. Again, you can either display an error message or redirect the user to another page.\n"
                },
                {
                    "id": "30",
                    "tstamp": "1400494608",
                    "headline": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",
                    "alias": "lorem-ipsum",
                    "date": "1400494500",
                    "time": "1400494500",
                    "subheadline": "",
                    "teaser": "<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>",
                    "alt": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit.",
                    "path": null,
                    "name": "Max Mustermann",
                    "text": "<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. In enim justo, rhoncus ut, imperdiet a, venenatis vitae, justo. Nullam dictum felis eu pede mollis pretium. Integer tincidunt. Cras dapibus. Vivamus elementum semper nisi. Aenean vulputate eleifend tellus.</p>"
                }
            ]
        }
    }
    Da sieht man, dass es sich um ein und den selben Artikel handeln soll, weil die gleiche ID, gleiche Titel, Teaser, Autor, Datum - nur der Text ist ein anderer.
    Geändert von pyretta (27.05.2014 um 15:21 Uhr)

  2. #2
    Contao-Nutzer
    Registriert seit
    25.05.2010.
    Beiträge
    211

    Standard

    Hallo,

    zwei der Hauptprobleme konnte ich selbst lösen, hier der Lösungsweg:

    Lösung zum Thema "neue Beiträge werden in der JSON-Datei doppelt angezeigt":
    Ich habe mal, wie es LeoUnglaub in seinem github Ticket erwähnt hat, den betreffenden Datensatz aus der Tabelle "tl_news" gelöscht und einen neuen Beitrag erstellt. Aber auch hier wird der Newsbeitrag doppelt angezeigt - bzw. doppelt in die JSON-Datei überführt. Nicht direkt doppelt, zwar mit gleichen Kopfdaten aber unterschiedlichem Text. Es war diesmal keine Fehlermeldung dabei sondern der Inhalt eines Artikels mit der gleichen ID. Dann dachte ich: AHA! Und habe in die Datenbank geschaut, und tatsächlich: In der Tabelle "tl_content" wurde eine neue Spalte hinzugefügt "ptable" in der die Referenztabelle steht, also in meinem Fall "tl_news" und "tl_article". Das muss ich in meiner SQL-Abfrage also ab jetzt berücksichtigen, dann wäre das zumindest schon behoben.

    Lösung zum Thema "es werden keine Bilder mehr zu den Nachrichtenbeiträgen angezeigt":
    In der Tabelle "tl_news" ist in der Spalte "singleSRC" ein Code, z.B. "98325826996f11e3a38fdead57e66b02". Dieser Code bezog sich vorher auf die Spalte "id" in der Tabelle "tl_files", in der logischerweise der gleiche Code stand. Jetzt hat sich das in die Spalte "uuid" verschoben. Auch das muss ab jetzt in der SQL-Abfrage berücksichtigt werden.

    Die neue SQl-Abfrage sieht dann so aus:
    Code:
    "SELECT n.id,n.tstamp,n.headline,n.alias,n.date,n.time,n.subheadline,n.teaser,n.alt,f.path,u.name,c.text FROM tl_news n LEFT JOIN tl_files f ON f.uuid = n.singleSRC LEFT JOIN tl_user u ON u.id = n.author LEFT JOIN tl_content c ON c.pid = n.id WHERE n.pid = '4' AND n.published = '1' AND c.ptable = 'tl_news' ORDER BY date DESC LIMIT 0, 10"

    Jetzt fehlt nur noch das mit der PHP-Fehlermeldung, die auftritt, wenn ein Newsbeitrag kopiert wird.
    Hat hier jemand eine Idee?
    Geändert von pyretta (28.05.2014 um 09:51 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •