• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

nochmal zu RSS: RSS 2.0 Einbinden in bestehendes Modul

Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
Ok. Ich hab mich jetzt, denke ich, soweit damit auseinandergesetzt, dass ich es theoretisch einbinden könnte. Die Frage ist nur, wie mach ich das jetzt richtig?
1. Die Items kann ich ja nicht einfach in meiner mySQL-DB lagern, weil sie ständig abrufbereit in der .rss-Datei liegen müssen, oder?
2. Und was macht so ein Aggregator eigentlich? Ruft er alle 30 sek (oder wie oft auch immer) die .rss-Datei neu auf um zu gucken, ob etwas neues passiert ist?
3. Wenn ich ein RSS-Feed in meine Liste aufnehmen möchte, rufe ich eine php-datei auf. Was steht in der php Datei drin, dass der Aggregator weiss, dass das ein Feed ist?
 
Mitglied seit
02.08.2002
Beiträge
2.781
Reaktionen
0
du musst halt eine php-seite schreiben, die die rss struktur zurückgibt (und die daten natürlich aus ner DB holst)

die reader holen tatsächlich einfach immer die neuste version der rss-dateien. das ist halt effizient als jedes mal die gesamte webseite zu laden
 
Mitglied seit
07.07.2005
Beiträge
1.493
Reaktionen
0
Nunja schau dir den quelltext von feeds an und bau das nach, das sollte nicht allzuschwer sein.
Wichtig wäre noch
PHP:
header('Content-type: text/xml');
Sonst kannst du deine feeddatei benennen wie du willst (ok ka ob das alle reader mögen). Wenn die Dateiendung unbedingt .xml oder sowas sein muss kannst du ja immernoch mod_rewrite benutzen
 
Mitglied seit
02.08.2002
Beiträge
2.781
Reaktionen
0
für die ingame feeds sieht die header ausgabe so aus:

PHP:
switch ( $feed_type )
{
    case 'Atom1.0': 
        header( 'Content-type: application/atom+xml; charset=UTF-8' );
    break;
    case 'RSS0.91': case 'RSS1.0': case 'RSS2.0':
        header( 'Content-type: application/rss+xml; charset=UTF-8' );
    break;
    default: 
        header( 'Content-type: text/xml; charset=UTF-8' );
    break;
}
header( 'Content-Disposition: inline' );

durch das Content-Disposition umgeht man imo den download dialog für firefox und ie...
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
zu der Sache mit dem Header. Ich bin deutlich verwirrt, an welche Stelle kommt das in die RSS-Datei?

wenn ich jetzt mal so den Grundaufbau sehe:

Code:
<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0">
    <channel>
        <title>Der Titel der Seite</title>
        <link>[url]www.eineseite.de[/url]</link>
        <description>blablubb und so weiter, ne?</description>
        <item>
            <title>erstes Element</title>
            <link>[url]www.1234.de[/url]</link>
            <description>dies ist das erste Element</description>
        </item>

        <item>
            <title>zweites Element</title>
            <link>[url]www.2345.de[/url]</link>
            <description>dies ist das zweite Element</description>
        </item>
    </channel>
</rss>

da hab ich doch jetzt nirgendwo einen header.

wo bastelt ihr das hin?
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
besser noch: der header kommt vor jedweger textausgabe an der seite, am besten wirklich ganz zum anfang,
 
Mitglied seit
02.08.2002
Beiträge
2.781
Reaktionen
0
der header ist fürs http protokoll wichtig - dadurch weiß der browser welche datei zu erwarten ist. du musst einfach nur die header funktion vor jeder content ausgabe aufrufen - andernfalls meckert php aber auch :P
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
okay. danke dafür.
neue Frage: gibt es auch sowas wie individuelle feeds, also wo ich dem user die Möglichkeit gebe, per auswahlmenues zu entscheiden, was sein feed enthalten soll?
sagen wir mal, ich hab ein multi-writer-blog. jeder hat so 3-4 verschiedene Themen in die er seine Blogeinträge unterteilt.
So, nun kommt ein Leser daher, der möchte nur 2 der Schreibern überhaupt über die Einträge informiert werden und dann auch nur aus bestimmten Themen. Ist sowas machbar?
Ist das so schwer zu proggen, wie ich erstmal denke?
 

bog

Mitglied seit
02.08.2002
Beiträge
10.121
Reaktionen
0
Ort
auf dem mutterschiff
wenn du die entsprechenden postings nach autor und themengebiet taggst, dann laesst sich das relativ leicht mit php und nem adaptierbaren mysql-query loesen. dabei uebergibst du einer php-datei zwei parameter, beispielsweise so:

http://bla.com/rss.php?autor=scholfer,rolfer&thema=golfern,bolfern

und teilst dann die $_GET-strings nach dem delimiter "," auf und packst sie in ein mysql query, z.b.

SELECT * FROM scholfer_artikel WHERE `autor`='scholfer' OR WHERE `autor`='rolfer' AND WHERE `thema`='golfern' OR WHERE `thema`='bolfern' SORT BY `postingzeit` DESC LIMIT 0,15;
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
klasse idee. was für methoden kann ich da nehmen? token_get_all zerteilt die Eingabe dann ja einfach komplett in tokens (oder lässt bei einer solchen Eingabe vieleicht alles einfach nur als einen einzelnen Token?). Da kann ich meinen Delimiter ja garnicht angeben.

Und wie geh ich nachher eigentlich das entstehende array durch (endebedingung für while oder for gesucht)? Hat array da ein Attribut length, so wie in Java?
 
Mitglied seit
02.08.2002
Beiträge
2.781
Reaktionen
0
für ein einfaches splitting gibt es explode() ansonsten halt preg_match für reguläre ausdrücke.

arrays durchläuft man am besten mit foreach...

ansonsonsten sind anpassbare rss-feeds kein problem, wie ja oben schon gesagt wurde. ich finde sowieso, dass das thema rss überschätzt wird. es ist im prinzip nichts anderes als die information anstatt auf ner html seite in ner xml datei zur verfügung zu stellen. d.h. du hast da erstmal die gleichen möglichkeiten der serverseitigen bearbeitung
 

bog

Mitglied seit
02.08.2002
Beiträge
10.121
Reaktionen
0
Ort
auf dem mutterschiff
Original geschrieben von Sholvar
klasse idee. was für methoden kann ich da nehmen? token_get_all zerteilt die Eingabe dann ja einfach komplett in tokens (oder lässt bei einer solchen Eingabe vieleicht alles einfach nur als einen einzelnen Token?). Da kann ich meinen Delimiter ja garnicht angeben.

Und wie geh ich nachher eigentlich das entstehende array durch (endebedingung für while oder for gesucht)? Hat array da ein Attribut length, so wie in Java?
wie eniman sagt: am besten mit foreach. wenn du sicher bist dass auf keinen fall luecken in den keys auftauchen kannst du auch mit count($array) die anzahl der felder abfragen und eine forschleife benutzen.
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
count war das, was mir gefehlt hat. hehe

aber foreach geht in vielen fällen wirklich gut. wusste noch garnich, dass es so eine Methode überhaupt gibt. Gleich mal Kommilitonnen erzählt, der dann meinte, das gibts auch für java.

Hier lernt man immer was neues.

Wenn ich ein mehrdimensionales Array aufbauen will, mach ich das in php auch als verschachteltes array?

kennt einer von euch eine sortierfunktion, die es ermöglicht, eine solche Reihung auf der ersten Dimension nach einer bestimmten Spalte (z.B. Datum ;) ) zu sortieren?
Ich hab jetzt frei Hand erstmal ein bubblesort gebastelt, aber ich denk, ne Methode macht das vielleicht schneller (außerdem siehts etwas übersichtlicher aus).

PHP:
foreach($item as $i_elem)
         foreach($item as $j_elem)
             if($i_element[2] > $j_element[2]){
                 $hlp = $i_element;
                 $i_element = $j_element;
                 $j_element = $hlp;
             }
 
Mitglied seit
02.08.2002
Beiträge
2.781
Reaktionen
0
es gibt sort() und usort() und was weiß ich alles (letzteres nimmt ne benutzerdefinierte vergleichsfunktion)

allerdings solltest du das sortieren lieber schon im sql-query machen, wenn es möglich ist
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
japjap. die gibt es. Aber da finde ich halt keine, die mir eine mehrdimensionale reihung nach einer bestimmten spalte sortiert.
 
Mitglied seit
02.08.2002
Beiträge
2.781
Reaktionen
0
naja mit usort kannste es dir doch basteln - musst einfach ne funktion definieren, die die bestimmte spalte vergleicht

das ist aber nicht performant - vielleicht schilderst du dein problem noch einmal detailiert, dann kann man evtl. andere lösungen erarbeiten.
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
eigentlich dachte ich, dass ich in einer Zählschleife je nach case mal die eine, mal die andere methode aufrufe, wobei mir jede Methode ein 2d-array returnt. Die wollte ich dann zusammenpacken und sortieren.
Aber rein vom logischen her ist es garnicht sinnvoll, mehrere Teiltabellen zu kombinieren. Da bastel ich lieber für jede Teiltabelle ein extra-feed.
man könnte also sagen: hat sich erledigt. :D
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
/*edit: war zu doof mit den " und den ' ordentlich zu arbeiten.

ok. hab mal abstand zur Datenbank gebraucht, deshalb hab ich jetzt halt ein bisschen an der frontendseite gearbeitet.

folgendes ist meine index.php3 im /rss/-Zweig:

PHP:
<?php
include("./rss.inc");
if(!($ausg= getRSS())) echo "es kommt nix aus getRSS()";
else echo $ausg;
?>

und die rss.inc, im moment noch einfach und statisch:

PHP:
<?

function getRSS(){
    header('Content-type: text/xml');
    $ausg;
    $ausg = '<?xml version="1.0" encoding="ISO-8859-1"?>';
    $ausg = $ausg.'';
    $ausg = $ausg.'<rss version="2.0">';
    $ausg = $ausg.'';
    $ausg = $ausg.'   <channel>';
    $ausg = $ausg.'      <title>shols feed</title>';
    $ausg = $ausg.'      <link>[url]http://www.shol.in/blog[/url]</link>';
    $ausg = $ausg.'      <description>Blog von shol.net</description>';
    $ausg = $ausg.'      <item>';
    $ausg = $ausg.'          <title>erstes Item</title>';
    $ausg = $ausg.'          <link>[url]http://www.shol.in/blog/?p=28[/url]</link>';
    $ausg = $ausg.'          <description>dies ist das erste Item und fuehrt zum aktuellsten Artikel meines Blogs</description>';
    $ausg = $ausg.'      </item>';
    $ausg = $ausg.'      <item>';
    $ausg = $ausg.'          <title>zweites Item</title>';
    $ausg = $ausg.'          <link>[url]http://www.shol.in/blog/?p=18[/url]</link>';
    $ausg = $ausg.'          <description>dies ist das zweite Item und fuehrt zur seite 18 meines Blogs.</description>';
    $ausg = $ausg.'      </item>';
    $ausg = $ausg.'  </channel>';
    $ausg = $ausg.'</rss>';

    return $ausg;
}
?>

mein errorlog gibt mir jetzt folgenden fehler (das firefoxfenster bleibt übrigens leer):
PHP Parse error: syntax error, unexpected T_DNUMBER in ordner/unterordner/rss.inc on line 6

kein plan, was jetzt noch fehlen könnte. :/
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
also erstens is das nen ziemlich mieser stil vom coding her

zweitens

$ausg = "<?xml version="1.0" encoding="ISO-8859-1"?>"

na fällt was auf? nein, ich meine nichtmal das fehlende semikolon...

escaping

konkatoperator ist übrigens .= wenns auf dieselbe var geht, spart tipparbeit...

abgesehen davon kriegst wohl eh nen header error geschickt...
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
ok. dein tipp mit dem escaping hätte mir ehrlich gesagt nicht geholfen. habs ja auch schon selbst bereinigt.

warum sollte ich einen headererror kriegen? und warum ist das schlechter programmierstil?
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
du hast immernoch escape-fehler drin...

stil:
exceptions, dieses !$aug=getRss() bla oder wie auch immer ist mehr als dämlich

wenn schon ohne exceptions, dann prüfs halt mit empty() oder gib halt in deiner funktion den wert false zurück. und wenn mich meine erinnerung nicht täuscht prüfst du da nur, ob die wertzuweisung erfolgreich war. klar, zum testen meinetwegen, aber ich denke du codest sonst auch so :p
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
in java nutze ich exceptions. aber nich in php3-4. php5 kann ich nich benutzen.

ach man ich glaub ich kopier meine aktuelle datei nochmal rein. diese escape-dinger nerven ^^
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
hm k das ist was anderes

und mach am besten diesen header(...) aus deiner getRSS funktion raus, und schreibs halt in der aufrufenden datei ganz hoch
die wahrscheinlichkeit ist hoch dass du da schonmal irgendwo nen output hattest, und da kriegst nen header fehler<
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
Original geschrieben von bog
wenn du die entsprechenden postings nach autor und themengebiet taggst, dann laesst sich das relativ leicht mit php und nem adaptierbaren mysql-query loesen. dabei uebergibst du einer php-datei zwei parameter, beispielsweise so:

http://bla.com/rss.php?autor=scholfer,rolfer&thema=golfern,bolfern

und teilst dann die $_GET-strings nach dem delimiter "," auf und packst sie in ein mysql query, z.b.

SELECT * FROM scholfer_artikel WHERE `autor`='scholfer' OR WHERE `autor`='rolfer' AND WHERE `thema`='golfern' OR WHERE `thema`='bolfern' SORT BY `postingzeit` DESC LIMIT 0,15;

die idee hat mir so gut gefallen, dass ich das jetzt komplett so aufbaue.
Aber wie mach ich das im html-Formular, dass ich die einzelnen attribute hinternander an eine get-variable hänge?
wenn ich das ganze z.B. als checkbox mache, krieg ich den mist ja einfach mit xy.php?autor=sholvar&autor=rolver, aber halt nicht zusammen hinternander.
Übergibst du dass dann erstmal an ein zweits php-script, dass einem alles zusammenpackt? wenn ja: wie kriegt man das hin, alles im zweiten php-script zusammenzubappen ohne nochmal einen submit-button zu benötigen?
wenn nein: wie dann?
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
alles klar, danke.

Aber warum machen wir das nicht einfach mit


<input type="checkbox" name="author[]" value="sholvar">sholvar</input>
<input type="checkbox" name="author[]" value="holvar">holvar</input>
<input type="checkbox" name="author[]" value="bolvar">bolvar</input>
<input type="checkbox" name="author[]" value="rolvar">rolvar</input>

das wird ja von der empfänger-php-datei als array interpretiert. Und ein array muss man nicht erst exploden. :confused:

als ich auf dieses zusammenpacken nicht gekommen bin, hab ich einfach das array übergeben und bisher kann ich damit auch ganz gut arbeiten.
 

bog

Mitglied seit
02.08.2002
Beiträge
10.121
Reaktionen
0
Ort
auf dem mutterschiff
einfach mit klammern hat nicht funktioniert als ichs versucht hab. daher haendisch die keys.

input-tags haben uebrigens keinen end-tag, deshalb schreibt man sie xhtml-konform sofort mit /> am ende, wie in meinem beispiel.

beim exploden geht es auch um die datei, die den inhalt des rss-feeds ausgibt, nicht um die obige, die den link fuer eben dieses script generiert. die rss-feed-datei erhaelt naemlich ihre parameter (autoren) per GET-variablen, damit der rss-feed in der gewaehlten konfiguration permanent abrufbar ist, und fuer den GET-krams brauchst du halt explode.
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
ok. bei dem endtag war ich mir nich ganz sicher, deshalb hab ich das einfach mal hingeschrieben. ;)

bei mir läuft das halt so mit den eckigen klammern. vielleicht ist das etwas, das bei php5 abgeschafft wurde?
wie gesagt, ich muss mich hier an php4 halten, weil ich ansonsten noch viel anderen schweinskrams umprogrammieren müsste, der schon seit ewigen zeiten hier rumliegt.

das ich erst in der erstelle-rss.php mit den variablen arbeite ist klar. Aber da kommt das auch gleich als array an, wenn ich die eckigen klammern setze.

der ausdruck hinterm Fragezeichen sieht dann nur etwas besch* aus, aber das juckt uns ja nich.
/*edit: jetzt hab ich nen errorlog

[28-Jun-2007 11:00:14] PHP Warning: Cannot modify header information - headers already sent by (output started at /meinordner/form.php3 on line 13
 

bog

Mitglied seit
02.08.2002
Beiträge
10.121
Reaktionen
0
Ort
auf dem mutterschiff
du darfst vor dem header-befehl natuerlich nichts echo-en. dann ist er naemlich schon aus dem http-header raus und im content. das script, wie ich es auf pastebin.ca gepackt hab, funktioniert so. schau mal nach, dass du nicht irgendwo ein echo reingebaut hast.


edit: natuerlich kannst du auch mit rss.php?autor[]=scholfer&autor[]=bolfer usw arbeiten, solange sich das im kleinen rahmen haelt, ich denke aber die meisten rss-reader haben ne beschraenkung der url-laenge. je nach autoren- und topicauswahl hast du dann evtl ein problem.
 
Mitglied seit
12.01.2004
Beiträge
8.557
Reaktionen
0
Ort
Gießem
dann soll er halt mit den ids der autoren/topics arbeiten, is doch eh viel leichter und zudem datenbanktechnisch schneller.
und arrays in gets wurden nicht abgeschafft...
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
So Ich hab mal wieder einen Fehler. Da ich gleich den Rechner wechseln muss, erkläre ich ihn sehr genau, aber vielleicht reicht zur beantwortung auch schon das errorlog am ende.


ok. ich hab jetzt folgenden aufbau:

ein formular, aus dem ich später verschiedene RSS-Feeds ziehen will. Im Moment hab ich da nur ein Eingabefeld für ne ID Nummer, die später verschiedene Channels ausmachen soll.
Diese includet eine managende Datei, aus der eine Funktion aufgerufen wird, die mir den rss-code generiert. also quasi das, was ich hier schonmal gepostet habe, nur etwas dynamischer.
diese datei wiederum includet 2 dateien. einmal eine starre datei, die solche funktionen in statischer form enthält, die nachher quasi auf datenbankebene die mySQL aufrufe regeln sollen.
Und der 2. include ist eine solche Klasse, in der ich langsam anfangen möchte mit der DB zu arbeiten.
Um mich da ranzutasten, habe ich erstmal einiges noch in statischer form aus der statischen hilfsdatei kopiert. Meine Datenbank enthält ja auch noch garnicht die Tabelle. Ich will erstmal sehen, was ich überhaupt in die Tabelle reinpacken muss.

Nun habe ich im letzten Schritt also nichts weiter getan, als Hilfsmethodenaufrufe durch attribute eines channel-objektes zu ersetzen und die channelklasse so zu gestalten, dass sie genau das gleiche enthalten müsste, was mir die vorher die hilfsmethoden geliefert haben.

Mein Formular, welches die Auswahl der Channel-ID liefert sieht so aus:

PHP:
include("/mein/Pfad/rss_erzeuger.inc");

if(!isset($anzahl)){
    echo '<form action='.$PHP_SELF.'>';
    echo '    <input name="anzahl" type="text" size="30" maxlength="30">';
    echo '    <input type=submit name="schick mich">';
    echo '</form>';
}else{
    header('Content-type: text/xml');
    if(!$ausg=getRSS($anzahl)) echo "es kommt nix aus getRSS()";
    else echo $ausg;
}

meine Datenbank-Klasse sieht so aus (leicht modifiziert, dass mir nicht jemand anfängt an meiner sql-db rumzufeilen ;) ):

http://www.pastebin.ca/593908


so und nun krieg ich wenn ich das Formular völlig ohne eingabe aufrufe im errorlog folgenden eintrag:
[28-Jun-2007 18:15:20] PHP Parse error: syntax error, unexpected T_VAR in /mein/Pfad/Datenbankebene/channel.inc on line 86

line 86 is bei mir direkt die zeile in der die Klasse geschlossen wird.

Kann damit jemand was anfangen?


Wenn ansonsten etwas auszusetzen ist, auch immer her damit ^^
 
Oben