Seite 3 von 4
Re: Portal auf eigener Faust
Verfasst: 26.07.2010 17:19
von Frank1604
melowa hat geschrieben:Array ( [0] => Array ( [TITLE] =>" usw stehen. Ist das gewollt?
Ja, das kommt daher, dass ich dir die Daten in ein Array gezogen habe. Damit du die Ausgabe siehst, lasse ich den Inhalt des Arrays mit [php:print_r] anzeigen.
Ich weiß nicht ob du unbedingt einen Cache brauchst. Das hängt davon ab, wie viele User du gleichzeitig auf deiner Seite hast. Bei ein paar Hundert gleichzeitig kann man da schonmal drüber nachdenken, bei 10 eher mal nicht.
Die Erzeugung des Feeds wird ja bereits vom phpBB gecached, dein Cache würde ja lediglich das auslesen des Feeds abfangen.
melowa hat geschrieben:Im Contentbereich sind so Sachen wie "Statistik: Verfasst von Gast — Di 20. Jul 2010, 22:02 — Antworten 1 — Zugriffe 32" drinne, die dort eigentlich nicht reingehören
Das ist die Themenstatistik des Themas aus dem der angezeigte Beitrag ist, zur Not schneide sie einfach raus.
Code: Alles auswählen
preg_replace('#<p>Statistik:(.*)"></p>#Uis','',$contentsting);
Re: Portal auf eigener Faust
Verfasst: 26.07.2010 17:47
von melowa
Frank1604 hat geschrieben:Ja, das kommt daher, dass ich dir die Daten in ein Array gezogen habe. Damit du die Ausgabe siehst, lasse ich den Inhalt des Arrays mit [php:print_f] anzeigen.
Entweder bin ich blind, oder ich sehe im obigen Quelltext kein "print_f".
Frank1604 hat geschrieben:Ich weiß nicht ob du unbedingt einen Cache brauchst. Das hängt davon ab, wie viele User du gleichzeitig auf deiner Seite hast. Bei ein paar Hundert gleichzeitig kann man da schonmal drüber nachdenken, bei 10 eher mal nicht.
Die Erzeugung des Feeds wird ja bereits vom phpBB gecached, dein Cache würde ja lediglich das auslesen des Feeds abfangen.
Naja, wir haben im Durchschnitt, derzeitig bereits 150 verschiedene Benutzer täglich zu verzeichnen. (Bei ~50 Mitgliedern - also ~100 Gäste) Da finde ich persönlich es schon sinnvoll zu Cachen. (Ob auf Forumbasis oder Eigener)
Re: Portal auf eigener Faust
Verfasst: 26.07.2010 18:02
von AmigaLink
melowa hat geschrieben:Frank1604 hat geschrieben:Ja, das kommt daher, dass ich dir die Daten in ein Array gezogen habe. Damit du die Ausgabe siehst, lasse ich den Inhalt des Arrays mit [php:print_f] anzeigen.
Entweder bin ich blind, oder ich sehe im obigen Quelltext kein "print_f".
Tippfehler, er meint
print_r($threads);.

Re: Portal auf eigener Faust
Verfasst: 26.07.2010 18:15
von Frank1604
AmigaLink hat geschrieben:Tippfehler, er meint print_r($threads);.

Öhäm.. hüstel..
melowa hat geschrieben:Naja, wir haben im Durchschnitt, derzeitig bereits 150 verschiedene Benutzer täglich zu verzeichnen. (Bei ~50 Mitgliedern - also ~100 Gäste) Da finde ich persönlich es schon sinnvoll zu Cachen. (Ob auf Forumbasis oder Eigener)
Nuja, bei 150 täglich sind wohl kaum mehr als 10 gleichzeitig da. Bei diesem Aufkommen würde ich mir ehrlich gesagt keinen Kopf ums Cachen machen.
Im Prinzip ist das aber garnicht schwer, du brauchst ja blos die Ausgabe in eine Datei schreiben. Dann prüfst du beim Aufruf des Scripts wie alt die gecachte Datei ist, erstellst sie ggf. neu oder lieferst sie aus.
Sicher kann dir hier jemand weiterhelfen, ich muss mich verabschieden. Ich fliege jetzt in den Urlaub und muss noch packen.
Re: Portal auf eigener Faust
Verfasst: 26.07.2010 18:26
von AmigaLink
Schönen Urlaub, Frank.
Und was das Cachen anbetrifft, nötig finde ich es auch nicht. Aber wenn deine Seite ins phpBB eingebunden ist, könntest du es z.B. so machen:
Code: Alles auswählen
<?php
class rss_reader extends acm
{
function get_feed();
{
if (($threads = $this->get('_rss_feed_cache')) === false)
{
$quelle = $data = '';
$tmp_ary = $threads = array();
$quelle = @file('http://webdesign-kompetenz.de/feed.php?mode=news');
$data = implode ("", $quelle);
$tmp_ary = explode('<entry>', $data);
array_shift($tmp_ary);
foreach($tmp_ary as $thread)
{
$threads[] = array(
'TITLE' => $this->get_middle($thread, '<title type="html"><![CDATA[', ']]></title>', 0),
'AUTHOR' => $this->get_middle($thread, '<author><name><![CDATA[', ']]></name></author>', 0),
'CONTENT' => preg_replace('#xml:base="(.*)"><\!\[CDATA\[#Uis','',$this->get_middle($thread, '<content type="html" ', ']]></content>', 0)),
'LINK' => $this->get_middle($thread, '<link href="', '"/>', 0),
);
}
$this->put('_rss_feed_cache', $threads);
}
}
function get_middle($source, $beginning, $ending, $init_pos)
{
$beginning_pos = strpos($source, $beginning, $init_pos);
$middle_pos = $beginning_pos + strlen($beginning);
$ending_pos = strpos($source, $ending, $beginning_pos + 1);
$middle = substr($source, $middle_pos, $ending_pos - $middle_pos);
return $middle;
}
}
$rss_cache = new rss_reader();
$threads = $rss_cache->get_feed();
print_r($threads);
?>
(Ungetesteter Schnellschuss !!!)
Re: Portal auf eigener Faust
Verfasst: 26.07.2010 20:06
von melowa
Ich habe deinen Lösungsweg nun eingebaut. Meine Seite ins Forum eingebaut habe ich ja eig. mit folgendes, oder irre ich mich:
Code: Alles auswählen
<?php
// Session Management
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
$user->session_begin();
$auth->acl($user->data);
$user->setup();
?>
Nunja, es kommt zumindest zu dieser Fehlermeldung:
Code: Alles auswählen
Fatal error: Non-abstract method rss_reader::get_feed() must contain body in /kunden/292617_49124/webseiten/index.php on line 64
EDIT: Fehler gefunden, ein Simikolon zuviel in Zeile 4 des Scripts. Nunja, nun gibt es schonmal keine Fehlermeldung, aber es wird nichts angezeigt. Also müsste ich ein Fazit setzen, das Cache des Feeds existiert nicht, bzw wird nicht abgerufen.
Re: Portal auf eigener Faust
Verfasst: 26.07.2010 22:24
von AmigaLink
LOL, nee das konnte nicht gehen.
Der Cache wurde erstellt und auch ausgelesen, aber nicht von der Klasse zurück gegeben.
So ists richtig:
Code: Alles auswählen
<?php
class rss_reader extends acm
{
function get_feed()
{
if (($threads = $this->get('_rss_feed_cache')) === false)
{
$quelle = $data = '';
$tmp_ary = $threads = array();
$quelle = @file('http://webdesign-kompetenz.de/feed.php?mode=news');
$data = implode ("", $quelle);
$tmp_ary = explode('<entry>', $data);
array_shift($tmp_ary);
foreach($tmp_ary as $thread)
{
$threads[] = array(
'TITLE' => $this->get_middle($thread, '<title type="html"><![CDATA[', ']]></title>', 0),
'AUTHOR' => $this->get_middle($thread, '<author><name><![CDATA[', ']]></name></author>', 0),
'CONTENT' => preg_replace('#xml:base="(.*)"><\!\[CDATA\[#Uis','',$this->get_middle($thread, '<content type="html" ', ']]></content>', 0)),
'LINK' => $this->get_middle($thread, '<link href="', '"/>', 0),
);
}
$this->put('_rss_feed_cache', $threads);
}
return $threads;
}
function get_middle($source, $beginning, $ending, $init_pos)
{
$beginning_pos = strpos($source, $beginning, $init_pos);
$middle_pos = $beginning_pos + strlen($beginning);
$ending_pos = strpos($source, $ending, $beginning_pos + 1);
$middle = substr($source, $middle_pos, $ending_pos - $middle_pos);
return $middle;
}
}
$rss_cache = new rss_reader();
$threads = $rss_cache->get_feed();
print_r($threads);
?>
Re: Portal auf eigener Faust
Verfasst: 26.07.2010 22:39
von 7emper5i
melowa hat geschrieben:I
Code: Alles auswählen
<?php
[ ... ]
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './forum/';
Nabend,
Vorab: ich hab keine Ahnung
aber ich arbeite mich ja beständig tiefer in die Materie und während ich selber gerade rumfummel (nicht an einem RSS, btw), fiel mir diese Zeile bei dir/euch auf.
Ich nehme an, dass du deine feed.php noch im root liegen hast und der Code hier drüber aus der feed.php stammt.
Wenn ja, hast du in der Datei angegeben, dass die Datei unabhängig von ihrem richtigen Ort noch eine Ebene drüber, im Ordner
forum liegt.
Ob das nun causal für das Nicht-Funktionieren ist, weiss ich nicht. So fit bin ich noch nicht
Ich hoffe, es war kein Mist, den ich da verzäll (wie der Kölner so schön sacht, .. Mundarten hatten wir heute ja schon mal

)
Re: Portal auf eigener Faust
Verfasst: 26.07.2010 22:57
von melowa
AmigaLink hat geschrieben:LOL, nee das konnte nicht gehen.
Der Cache wurde erstellt und auch ausgelesen, aber nicht von der Klasse zurück gegeben.
Nun klappts, danke, aber nun zu einer anderen Sache, ich habe die Seite aufgerufen, somit wurde der Cache gefüllt, nun eine neue News geschrieben, aber die wird nicht aufgenommen, da der Cache noch gefüllt, wie macht man denn nun eine Abfrage, ob sich was geändert hat?
Bsp:
if (hat sich nichts geändert) {
nichts tun
} else {
neu abrufen
}
Re: Portal auf eigener Faust
Verfasst: 27.07.2010 01:23
von AmigaLink
Gute Frage melowa, da hab ich bei meinem Schnellschuss nicht drüber nachgedacht und deswegen dem Cache keine Ablaufzeit gegeben.
Somit ist er für exakt 365 Tage gültig, es sei denn man löscht ihn. Das macht in dem Fall aber natürlich überhaupt keinen Sinn.
Mach mal aus
ein
dann wird der Cache alle 10 Minuten erneuert. (Die 600 ist die Zeit in Sekunden, die der Cache gültig ist.)
Damit die Änderung wirkt, musst du allerdings die bereits bestehende Cache-Datei einmalig von Hand löschen.
Du findest sie in deinem Cache-Ordner und sie hat den Namen
data_rss_feed_cache.php
Alternativ könnte man die posting.php so anpassen das sie den Cache löscht wenn du eine neue News Postest. Das ist mir aber ehrlich gesagt etwas zu aufwändig, weil ich dafür die posting.php erst mal nach der richtige Codestelle durchsuchen müsste.
@ 7emper5i
Du hast den Sinn bzw. die Funktion der Zeile durchaus richtig erkannt.
