ilch Forum » Allgemein » HTML, PHP, SQL,... » rss für Forum Kategorien

Geschlossen
  1. #1
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    Wo wird dies rss eigentlich erstellt?

    Also es gibt ja im template/news/rss.htm aber aus welcher .php zieht es die angaben?


    Ich würde gerne wenn möglich ein rss für jede Forum Kategorie machen.
    So das man bsp index.php?forum-rss-12 aufruft und dann im rss alle Einträge aus den Ankündigungs Board erhält

    wäre dies möglich?

    Grüße


    Zuletzt modifiziert von Siggi am 26.01.2013 - 15:09:36
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Wie das news unschwer erkennen lässt, ist das für die News gedacht und wird auch über news.php angesprochen.
    Fürs Forum gibts so ein rss noch nicht. Da ein Forum mit Foren, Themen und Beiträgen auch etwas komplizierter aufgebaut ist als nur die News, müsste man sich dann erstmal überlegen, was denn am Ende überhaupt in dem rss Feed landen soll.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    Nunja ich würde gerne alle bzw mit limit posts aus der Forenkategorie auslesen.

    bsp Board Ankündigung mit id 12 nun ruft man index.php?forum-rss-12 auf und erhält dann das rss von den Ankündigung und der inhalt der 12 posts.

    Versuch aber da zeigt er mir nur eins an aber denke das liegt irgendwie an EXPLODE oder weil keine schleife?

    contents/forum/rss.php
    <?php
    defined ('main') or die ('no direct access');
    
    $nid = escape($menu->get(2), 'integer');
    $abf = "SELECT
          a.id as id,
          b.txt as txt,
          b.time as datum,
          b.erst as erst,
          b.tid as postid,
          c.name as title,
          c.rep as rep,
          c.last_post_id as lastid
        FROM prefix_forums as a
        LEFT JOIN prefix_posts as b ON b.fid = a.id
        LEFT JOIN prefix_topics as c ON c.id = b.tid
        WHERE a.id = '". $nid ."'
        ORDER BY time DESC LIMIT 12";
    
    $erg = db_query($abf);
    
    if (db_num_rows($erg) >= 1) {
    	$row = db_fetch_assoc($erg);
    
    	$tpl = new tpl ('forum/rss.htm');
         	$textToShow = bbcode($row['txt']);
    	$row['page'] = ceil ( ($row['rep']+1)  / $allgAr['Fpanz'] );
    	$ar = array (
        'HEADER_ADDITIONS' => $ILCH_HEADER_ADDITIONS,
        'TITLE' => $row['title'],
        'TXT' => $textToShow,
        'LINK' => 'http://'. $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) .'/index.php?forum-showposts-'. $row['postid'] .'-p'. $row['page'] .'#'. $row['lastid'],
        'AUTHOR' => $row['erst'],
        'DATE' => $row['datum']
        );
    	$tpl->set_ar_out($ar, 0);
    
    } else {
    	echo 'RSS existiert nicht. <br><br><a href="javascript:history.back();"><b>&laquo; zur&uuml;ck</b></a>';
    }
    ?>


    templates/forum/rss.htm
    <?xml version="1.0"  encoding="ISO-8859-1"?>
    <rss version="2.0">
      <channel>
        <title>{FEEDTITLE}</title>
        <link>{SITEURL}</link>
        <description>{_lang_newsfeed_of}</description>
        <language>de-de</language>
    
        <item>
          <title>{TITLE}</title>
          <description><![CDATA[{TXT}]]></description>
          <link>{LINK}</link>
          <author>{AUTHOR}</author>
          <pubDate>{DATE}</pubDate>
        </item>
    
      </channel>
    </rss>



    Zuletzt modifiziert von Siggi am 26.01.2013 - 18:00:01
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Der Fehler ist das Komma vor FROM. (Ok hast du schon selbst gefunden)

    Weiter musst du auch das Template anders ansprechen, wurde erst vor kurzen erklärt und in die FAQ eingetragen. Umgang mit Ilch 1.1 Template-System

    ILCH_HEADER_ADDITIONS brauchst du nicht, ansonsten sieht es schon mal gar nicht so schlecht aus bzw. du brauchst nur das, was du auch im Template dann verwendest.

    Achso, ggf. solltest du noch in der contents/forum.php mal nach den Rechtebedinungungen schauen, ansonsten könnten interne Posts darüber gelesen werden.


    Zuletzt modifiziert von Mairu am 26.01.2013 - 18:03:39
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    So könntes da nochmal drüber schauen?
    Ich denke die view abfrage reicht? zumindest hab ich es getestet indem ich einstellte nur für mitglieder und ein Besucher bekommt dann Rss exestiert nicht also denke es geht so?

    rss.php
    <?php
    defined ('main') or die ('no direct access');
    
    $nid = escape($menu->get(2), 'integer');
    $abf = "SELECT
          a.id as id,
          a.name as foruname,
          b.txt as txt,
          b.time as datum,
          b.erst as erst,
          b.tid as postid,
          b.id as sid,
          c.name as title,
          c.rep as rep
        FROM prefix_forums as a
        LEFT JOIN prefix_posts as b ON b.fid = a.id
        LEFT JOIN prefix_topics as c ON c.id = b.tid
        WHERE a.view >= ".$_SESSION['authright']." AND a.id = '". $nid ."'
        ORDER BY sid DESC LIMIT 12";
    
    	$erg = db_query($abf);
    
    	$tpl = new tpl ('forum/rss.htm');
    
    	$abf2 = "SELECT name FROM prefix_forums WHERE view >= ".$_SESSION['authright']." AND id = '". $nid ."'";
    	$erg2 = db_query($abf2);
    	$row2 = db_fetch_assoc($erg2);
    	
    	$tpl->set_ar_out(array(
             'FEEDTITLE' => 'Forum - '.$row2['name'],
             'SITEURL' => 'http://' . $_SERVER['HTTP_HOST']
             ), 0);
    
    if (db_num_rows($erg) >= 1) {
            while ($row = db_fetch_assoc($erg)) {
         	$textToShow = bbcode($row['txt']);
    		$pubdate = date(r, $row['datum']);
    		$page = ceil ( ($row['rep']+1)  / $allgAr['Fpanz'] );
    	$tpl->set_ar_out(array (
        	'TITLE' => $row['title'],
        	'TXT' => $textToShow,
        	'LINK' => 'http://'. $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) .'/index.php?forum-showposts-'. $row['postid'] .'-p'. $page .'#'. $row['sid'],
        	'AUTHOR' => $row['erst'],
        	'DATE' => $pubdate
        	), 1);
    }
    	$tpl->out(2);
    
    } else {
    	echo 'RSS existiert nicht oder Sie haben keine Rechte sie zu sehen. <br><br><a href="javascript:history.back();"><b>&laquo; zur&uuml;ck</b></a>';
    }
    ?>


    Wenn ich nun index.php?forum-rss-12 aufrufe zeigt er mir die rss richtig an wie es sein sollte also alle posts egal obs mehrere aus ein Thread sind oder Verschiedene Threads.

    Abonniere ich dies jedoch nun zeigt er mir nur ein beitrag aus den Thread an.

    bsp.
    Ich habe 2 Threads im Forum Ankündigung 1. Änderungen 2. Neues Spiel Online.
    Nun poste ich noch etwas im Thread Änderungen zeigt er mir wenn ich das rss aufrufe wohl Änderungen txt, Neues Spiel txt, Änderungen txt an aber wenn ich dies abonniere nur Änderungen und Neues Spiel.

    Woran könnte dies liegen?


    Zuletzt modifiziert von Siggi am 27.01.2013 - 06:13:17
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Ich gehe mal davon aus, dass es daran liegt, das dann beide Feedeinträge den gleichen Titel haben und deswegen nur einer davon angezeigt wird, du müsstest also bei Title dann noch die Postnummer oder sowas mit reinnehmen, damit sie unterschiedlich werden.

    Weiter solltest du in der Abfrage wenigstens noch testen, dass view <= 0 ist, da es auch Teamrechte gibt, die größer als 0 sind und die dann jeder Gast sehen könnte.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    Ahh cool lächeln Jaaa hab nun Title#sid da sid ja immer einzeln ist und das scheint zu gehn lächeln

    Öhm wegen rechte So richtig? habs aus der show_forum

    <?php
    defined ('main') or die ('no direct access');
    
    $nid = escape($menu->get(2), 'integer');
    $abf = "SELECT
          a.id as id,
          a.name as foruname,
          b.txt as txt,
          b.time as datum,
          b.erst as erst,
          b.tid as postid,
          b.id as sid,
          c.name as title,
          c.rep as rep
        FROM prefix_forums as a
        LEFT JOIN prefix_posts as b ON b.fid = a.id
        LEFT JOIN prefix_topics as c ON c.id = b.tid
    	LEFT JOIN prefix_groupusers vg ON vg.uid = ".$_SESSION['authid']." AND vg.gid = a.view
        WHERE ((".$_SESSION['authright']." <= a.view AND a.view < 1)
    	OR vg.fid IS NOT NULL
    	OR -9 = ".$_SESSION['authright'].")
    	AND a.id = '". $nid ."'
        ORDER BY sid DESC LIMIT 12";
    
    	$erg = db_query($abf);
    
    	$tpl = new tpl ('forum/rss.htm');
    
    	$abf2 = "SELECT name FROM prefix_forums WHERE view >= ".$_SESSION['authright']." AND id = '". $nid ."'";
    	$erg2 = db_query($abf2);
    	$row2 = db_fetch_assoc($erg2);
    	
    	$tpl->set_ar_out(array(
             'FEEDTITLE' => 'Forum - '.$row2['name'],
             'SITEURL' => 'http://' . $_SERVER['HTTP_HOST']
             ), 0);
    
    if (db_num_rows($erg) >= 1) {
            while ($row = db_fetch_assoc($erg)) {
         	$textToShow = bbcode($row['txt']);
    		$pubdate = date(r, $row['datum']);
    		$page = ceil ( ($row['rep']+1)  / $allgAr['Fpanz'] );
    	$tpl->set_ar_out(array (
        	'TITLE' => $row['title'].'#'.$row['sid'],
        	'TXT' => $textToShow,
        	'LINK' => 'http://'. $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) .'/index.php?forum-showposts-'. $row['postid'] .'-p'. $page .'#'. $row['sid'],
        	'AUTHOR' => $row['erst'],
        	'DATE' => $pubdate
        	), 1);
    }
    	$tpl->out(2);
    
    } else {
    	echo 'RSS existiert nicht oder Sie haben keine Rechte sie zu sehen. <br><br><a href="javascript:history.back();"><b>&laquo; zur&uuml;ck</b></a>';
    }
    ?>



    Zuletzt modifiziert von Siggi am 27.01.2013 - 12:46:26
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    386 Beitragspunkte
    Passt schon, um nicht 2 SQL Abfragen zu haben, kannst du es auch so machen.

    <?php
    defined ('main') or die ('no direct access');
    
    $nid = escape($menu->get(2), 'integer');
    $abf = "SELECT
          a.id as id,
          a.name as foruname,
          b.txt as txt,
          b.time as datum,
          b.erst as erst,
          b.tid as postid,
          b.id as sid,
          c.name as title,
          c.rep as rep
        FROM prefix_forums as a
        LEFT JOIN prefix_posts as b ON b.fid = a.id
        LEFT JOIN prefix_topics as c ON c.id = b.tid
        LEFT JOIN prefix_groupusers vg ON vg.uid = " . $_SESSION['authid'] . " AND vg.gid = a.view
        WHERE ((" . $_SESSION['authright'] . " <= a.view AND a.view < 1)
        OR vg.fid IS NOT NULL
        OR -9 = " . $_SESSION['authright'] . ")
        AND a.id = '" . $nid . "'
        ORDER BY sid DESC LIMIT 12";
    
    $erg = db_query($abf);
    
    $tpl = new tpl ('forum/rss.htm');
    
    if (db_num_rows($erg) >= 1) {
        $outputHead = true;
        while ($row = db_fetch_assoc($erg)) {
            if ($outputHead) {
                $tpl->set_ar_out(array(
                    'FEEDTITLE' => 'Forum - ' . $row['foruname'],
                    'SITEURL' => 'http://' . $_SERVER['HTTP_HOST']
                ), 0);
                $outputHead = false;
            }
            $textToShow = bbcode($row['txt']);
            $pubdate = date(r, $row['datum']);
            $page = ceil (($row['rep'] + 1) / $allgAr['Fpanz']);
            $tpl->set_ar_out(
                array (
                    'TITLE' => $row['title'] . '#' . $row['sid'],
                    'TXT' => $textToShow,
                    'LINK' => 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/index.php?forum-showposts-' . $row['postid'] . '-p' . $page . '#' . $row['sid'],
                    'AUTHOR' => $row['erst'],
                    'DATE' => $pubdate
                ),
                1
            );
        }
        $tpl->out(2);
    } else {
        echo 'RSS existiert nicht oder Sie haben keine Rechte sie zu sehen. <br><br><a href="javascript:history.back();"><b>&laquo; zur&uuml;ck</b></a>';
    }
    
    ?>
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    Ja das ist doch schön lächeln

    Funktioniert so wie es sein sollte lächeln
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    Acta Mitglied
    Registriert seit
    02.12.2013
    Beiträge
    9
    Beitragswertungen
    0 Beitragspunkte
    Wie müsste denn der Aufruf aussehen... und kann man auch in anderen Installationen verwenden?
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    Na der aufruf wäre bei mir damals zumindest.

    uostuff.uo-projects.net/uostuff/index.php?forum-rss-37

    Die zahl dahinter steht halt fuer die fotenid
    0 Mitglieder finden den Beitrag gut.
  12. #12
    User Pic
    Acta Mitglied
    Registriert seit
    02.12.2013
    Beiträge
    9
    Beitragswertungen
    0 Beitragspunkte
    Eigentlich müsste ich doch nur beide Dateien hochladen und fertig ist es. Oder muss ich irgendwas anpassen.

    Hatte jetzt nix spezielles gefunden!
    0 Mitglieder finden den Beitrag gut.
  13. #13
    User Pic
    Siggi Hall Of Fame
    Registriert seit
    08.02.2007
    Beiträge
    6.558
    Beitragswertungen
    327 Beitragspunkte
    Ja du brauchst die rss.php und rss.htm und in der forum.php muss du halt die rss.php einfügen
        case 'rss'       :  $incdatei = 'rss.php';         break;



    dann halt aufrufen wie gesagt.

    Was geht den nicht?
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten