ilch Forum » Ilch CMS 2.X » Fehlersuche und Probleme » RSS Modul

Geschlossen
  1. #1
    User Pic
    Cola0501 Mitglied
    Registriert seit
    21.07.2013
    Beiträge
    43
    Beitragswertungen
    2 Beitragspunkte
    Hey,
    die Aufrufseite für den RSS-Feed ist ja:
    SEITE/index.php/article/index/rss

    Beim Speichern, durch Gründe die ich nicht verstehe zurzeit,
    ersetzt er "<p> bzw. </p>" durch den HTML Code, sprich "&lt;p&gt; bzw &lt;/p&gt;"

    In der Datenbank ist es Normal gespeichert.
    prntscr.com/nj5bfs <- Datenbank

    Nur gibt er mir in der xml Datei das aus:
    <?xml version="1.0" encoding="utf-8"?>
    <rss version="2.0">
      <channel>
        <title>ilch - Content Management System</title>
        <description>Alle Neuigkeiten von ilch - Content Management System</description>
        <language>de</language>
        <link>http://localhost/</link>
        <lastBuildDate>Wed, 1 May 2019 17:47:12 Europe/Berlin</lastBuildDate>
        <item>
          <title>Willkommenß</title>
          <description>&lt;p&gt;34567890üälkjhgfdseer76t8z9uipüäöß&lt;/p&gt;&#13;
    &#13;
    &lt;p&gt;12321&lt;/p&gt;&#13;
    &#13;
    &lt;p&gt;11111&lt;/p&gt;&#13;
    </description>
          <author>Killa Rebell</author>
          <link>http://localhost/index.php/article/index/show/id/2</link>
          <pubDate>Wed, 1 May 2019 17:46:30 Europe/Berlin</pubDate>
          <guid>http://localhost/index.php/article/index/show/id/2</guid>
        </item>
      </channel>
    </rss>


    Habe in der PHP Datei (rss.php)schon den Befehl html_entity_decode eingefügt, dadurch ändert er schonmal die Sonderzeichen zum Normalen Buchstaben.
    Nur ist das Problem das er aus dem <p>-Tag einfach die HTML Code Bezeichnung macht.
    Dadurch entsteht bei der XML Datei ein Parse fehler.

    rss.php
    <?php
    $userMapper = $this->get('userMapper');
    $articles = $this->get('articles');
    $date = new \Ilch\Date();
    
    $adminAccess = null;
    if ($this->getUser()) {
        $adminAccess = $this->getUser()->isAdmin();
    }
    
    $xml = new DOMDocument('1.0', 'utf-8');
    $xml->formatOutput = true;
    
    $rss = $xml->createElement('rss');
    $rss->setAttribute('version', '2.0');
    $xml->appendChild($rss);
    
    $channel = $xml->createElement('channel');
    $rss->appendChild($channel);
    
    $head = $xml->createElement('title', $this->get('siteTitle'));
    $channel->appendChild($head);
    
    $head = $xml->createElement('description', $this->getTrans('rssDesc', $this->get('siteTitle')));
    $channel->appendChild($head);
    
    $head = $xml->createElement('language', substr($this->getTranslator()->getLocale(), 0, 2));
    $channel->appendChild($head);
    
    $head = $xml->createElement('link', $this->getURL());
    $channel->appendChild($head);
    
    $head = $xml->createElement('lastBuildDate', $date->format('D, j M Y H:i:s e', true));
    $channel->appendChild($head);
    
    if ($articles) {
        foreach ($articles as $article) {
            if (!is_in_array($this->get('readAccess'), explode(',', $article->getReadAccess())) && $adminAccess == false) {
                continue;
            }
    
            $articleDate = new \Ilch\Date($article->getDateCreated());
            $user = $userMapper->getUserById($article->getAuthorId());
            $strippedContent = html_entity_decode(str_replace("&nbsp;", " ", $article->getContent()));
    
            $item = $xml->createElement('item');
            $channel->appendChild($item);
    
            $data = $xml->createElement('title', $this->escape($article->getTitle()));
            $item->appendChild($data);
    
            if (strpos($strippedContent, '[PREVIEWSTOP]') !== false) {
                $contentParts = explode('[PREVIEWSTOP]', $strippedContent);
                $data = $xml->createElement('description', reset($contentParts));
                $item->appendChild($data);
            } else {
                $data = $xml->createElement('description', $strippedContent);
                $item->appendChild($data);
            }
    
            if ($user) {
                $data = $xml->createElement('author', $this->escape($user->getName()));
                $item->appendChild($data);
            }
    
            $data = $xml->createElement('link', $this->getUrl(['action' => 'show', 'id' => $article->getId()]));
            $item->appendChild($data);
    
            $data = $xml->createElement('pubDate', $articleDate->format('D, j M Y H:i:s e', true));
            $item->appendChild($data);
    
            $data = $xml->createElement('guid', $this->getUrl(['action' => 'show', 'id' => $article->getId()]));
            $item->appendChild($data);
        }
    }
    
    $xml->save('rss.xml');
    
    echo $article->getContent();

    Am Ende habe ich zur Fehlerbehebung mal echo anstatt die Weiterleitung eingefügt.
    Die von mir geänderte Zeile ist 44.
    Selbst das Neuaufsetzen etc von V2.1.21 hat keinerlei Besserung gebracht.

    mfg Nico


    verwendete ilch Version: 2.1.x
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    blackcoder Entwickler
    Registriert seit
    22.05.2014
    Beiträge
    2.405
    Beitragswertungen
    389 Beitragspunkte
    Die Funktion ist noch nicht wirklich offiziell (muss vielleicht sogar deaktiviert werden bis es richtig umgesetzt ist), aber habe dieses Thema mal dem Ticket zugeordnet.
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Cola0501 Mitglied
    Registriert seit
    21.07.2013
    Beiträge
    43
    Beitragswertungen
    2 Beitragspunkte
    Ok, habe mal eine Lösung die man vllt. übernehmen könnte.
    Alte rss.php
    <?php
    $userMapper = $this->get('userMapper');
    $articles = $this->get('articles');
    $date = new \Ilch\Date();
    
    $adminAccess = null;
    if ($this->getUser()) {
        $adminAccess = $this->getUser()->isAdmin();
    }
    
    $xml = new DOMDocument('1.0', 'utf-8');
    $xml->formatOutput = true;
    
    $rss = $xml->createElement('rss');
    $rss->setAttribute('version', '2.0');
    $xml->appendChild($rss);
    
    $channel = $xml->createElement('channel');
    $rss->appendChild($channel);
    
    $head = $xml->createElement('title', $this->get('siteTitle'));
    $channel->appendChild($head);
    
    $head = $xml->createElement('description', $this->getTrans('rssDesc', $this->get('siteTitle')));
    $channel->appendChild($head);
    
    $head = $xml->createElement('language', substr($this->getTranslator()->getLocale(), 0, 2));
    $channel->appendChild($head);
    
    $head = $xml->createElement('link', $this->getURL());
    $channel->appendChild($head);
    
    $head = $xml->createElement('lastBuildDate', $date->format('D, j M Y H:i:s e', true));
    $channel->appendChild($head);
    
    if ($articles) {
        foreach ($articles as $article) {
            if (!is_in_array($this->get('readAccess'), explode(',', $article->getReadAccess())) && $adminAccess == false) {
                continue;
            }
    
            $articleDate = new \Ilch\Date($article->getDateCreated());
            $user = $userMapper->getUserById($article->getAuthorId());
            $strippedContent = str_replace("&nbsp;", " ", $article->getContent());
    
            $item = $xml->createElement('item');
            $channel->appendChild($item);
    
            $data = $xml->createElement('title', $this->escape($article->getTitle()));
            $item->appendChild($data);
    
            if (strpos($strippedContent, '[PREVIEWSTOP]') !== false) {
                $contentParts = explode('[PREVIEWSTOP]', $strippedContent);
                $data = $xml->createElement('description', reset($contentParts));
                $item->appendChild($data);
            } else {
                $data = $xml->createElement('description', $strippedContent);
                $item->appendChild($data);
            }
    
            if ($user) {
                $data = $xml->createElement('author', $this->escape($user->getName()));
                $item->appendChild($data);
            }
    
            $data = $xml->createElement('link', $this->getUrl(['action' => 'show', 'id' => $article->getId()]));
            $item->appendChild($data);
    
            $data = $xml->createElement('pubDate', $articleDate->format('D, j M Y H:i:s e', true));
            $item->appendChild($data);
    
            $data = $xml->createElement('guid', $this->getUrl(['action' => 'show', 'id' => $article->getId()]));
            $item->appendChild($data);
        }
    }
    
    $xml->save('rss.xml');
    
    Header('Location: '.$this->getURL().'rss.xml');


    Dort einfach in der 2. Zeile (nach <?php Tag)
    header('Content-Type: text/html; charset=UTF-8');


    In der 44. Zeile (was nach dem Einfügen oben die 45. Zeile ist)
    $strippedContent = str_replace("&nbsp;", " ", $article->getContent());
    zu
    $strippedContent = htmlspecialchars(str_replace("&nbsp;", " ", $article->getContent()));


    Dann in der 77. bzw 78. Zeile ersetzen
    $xml->save('rss.xml');
    zu
    utf8_encode($xml->save('rss.xml'));


    Komplette rss.php
    <?php
    header('Content-Type: text/html; charset=UTF-8');
    $userMapper = $this->get('userMapper');
    $articles = $this->get('articles');
    $date = new \Ilch\Date();
    
    $adminAccess = null;
    if ($this->getUser()) {
        $adminAccess = $this->getUser()->isAdmin();
    }
    
    $xml = new DOMDocument('1.0', 'utf-8');
    $xml->formatOutput = true;
    
    $rss = $xml->createElement('rss');
    $rss->setAttribute('version', '2.0');
    $xml->appendChild($rss);
    
    $channel = $xml->createElement('channel');
    $rss->appendChild($channel);
    
    $head = $xml->createElement('title', $this->get('siteTitle'));
    $channel->appendChild($head);
    
    $head = $xml->createElement('description', $this->getTrans('rssDesc', $this->get('siteTitle')));
    $channel->appendChild($head);
    
    $head = $xml->createElement('language', substr($this->getTranslator()->getLocale(), 0, 2));
    $channel->appendChild($head);
    
    $head = $xml->createElement('link', $this->getURL());
    $channel->appendChild($head);
    
    $head = $xml->createElement('lastBuildDate', $date->format('D, j M Y H:i:s e', true));
    $channel->appendChild($head);
    
    if ($articles) {
        foreach ($articles as $article) {
            if (!is_in_array($this->get('readAccess'), explode(',', $article->getReadAccess())) && $adminAccess == false) {
                continue;
            }
    
            $articleDate = new \Ilch\Date($article->getDateCreated());
            $user = $userMapper->getUserById($article->getAuthorId());
            $strippedContent = htmlspecialchars(str_replace("&nbsp;", " ", $article->getContent()));
    
            $item = $xml->createElement('item');
            $channel->appendChild($item);
    
            $data = $xml->createElement('title', $this->escape($article->getTitle()));
            $item->appendChild($data);
    
            if (strpos($strippedContent, '[PREVIEWSTOP]') !== false) {
                $contentParts = explode('[PREVIEWSTOP]', $strippedContent);
                $data = $xml->createElement('description', reset($contentParts));
                $item->appendChild($data);
            } else {
                $data = $xml->createElement('description', $strippedContent);
                $item->appendChild($data);
            }
    
            if ($user) {
                $data = $xml->createElement('author', $this->escape($user->getName()));
                $item->appendChild($data);
            }
    
            $data = $xml->createElement('link', $this->getUrl(['action' => 'show', 'id' => $article->getId()]));
            $item->appendChild($data);
    
            $data = $xml->createElement('pubDate', $articleDate->format('D, j M Y H:i:s e', true));
            $item->appendChild($data);
    
            $data = $xml->createElement('guid', $this->getUrl(['action' => 'show', 'id' => $article->getId()]));
            $item->appendChild($data);
        }
    }
    
    utf8_encode($xml->save('rss.xml'));
    
    Header('Location: '.$this->getURL().'rss.xml');


    Ausgabe XML
    <<?xml version="1.0" encoding="utf-8"?>
    <rss version="2.0">
      <channel>
        <title>Hardstyle-Gaming</title>
        <description>Alle Neuigkeiten von Hardstyle-Gaming</description>
        <language>de</language>
        <link>https://hardstyle-gaming.de/</link>
        <lastBuildDate>Wed, 1 May 2019 17:56:13 UTC</lastBuildDate>
        <item>
          <title>Herzlich Willkommen</title>
          <description>&lt;p&gt;Herzlich Willkommen,&lt;/p&gt;&#13;
    &#13;
    &lt;p&gt;auf unserer Webseite, Hier findet man verschiedene Dinge.&lt;/p&gt;&#13;
    &#13;
    &lt;p&gt;Die Webseite ist noch im Aufbau, es werden noch Downloads folgen, FAQ&amp;#39;s und Forumbeitr&amp;auml;ge.&lt;/p&gt;&#13;
    &#13;
    &lt;p&gt; &lt;/p&gt;&#13;
    &#13;
    &lt;p&gt;mit Freundlichen gr&amp;uuml;&amp;szlig;en&lt;/p&gt;&#13;
    &#13;
    &lt;p&gt;- Hardstyle Gaming&lt;/p&gt;&#13;
    </description>
          <author>Killa Rebell</author>
          <link>https://hardstyle-gaming.de/index.php/article/index/show/id/1</link>
          <pubDate>Wed, 1 May 2019 00:00:00 UTC</pubDate>
          <guid>https://hardstyle-gaming.de/index.php/article/index/show/id/1</guid>
        </item>
      </channel>
    </rss>



    Kann ja mal getestet werden, bei mir Funktioniert es Lokal und auf dem Server wunderbar.
    Seite: hardstyle-gaming.de/rss.xml


    Zuletzt modifiziert von Cola0501 am 01.05.2019 - 20:15:30
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Fehlersuche und Probleme

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten