Portal auf eigener Faust

Du suchst einen bestimmten Mod, weißt aber nicht genau wo bzw. ob er überhaupt existiert? Wenn dir dieser Artikel nicht weiterhilft, kannst du hier den von dir gewünschten/gesuchten Mod beschreiben ...
Falls ein Mod-Autor eine der Anfragen hier aufnimmt, um einen neuen Mod zu entwickeln, geht's in [3.0.x] Mods in Entwicklung weiter.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Frank1604
Ehemaliges Teammitglied
Beiträge: 2106
Registriert: 07.11.2007 09:25
Wohnort: Einhausen
Kontaktdaten:

Re: Portal auf eigener Faust

Beitrag 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); 
Gruß, Frank
Meine Meinung steht fest. Bitte verwirrt mich nicht mit Tatsachen!
melowa

Re: Portal auf eigener Faust

Beitrag 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)
Benutzeravatar
AmigaLink
Mitglied
Beiträge: 1417
Registriert: 09.06.2003 21:56
Wohnort: NRW
Kontaktdaten:

Re: Portal auf eigener Faust

Beitrag 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);. :)
Zuletzt geändert von AmigaLink am 26.07.2010 18:25, insgesamt 2-mal geändert.
Benutzeravatar
Frank1604
Ehemaliges Teammitglied
Beiträge: 2106
Registriert: 07.11.2007 09:25
Wohnort: Einhausen
Kontaktdaten:

Re: Portal auf eigener Faust

Beitrag von Frank1604 »

AmigaLink hat geschrieben:Tippfehler, er meint print_r($threads);. :)
Öhäm.. hüstel.. :D
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.
Gruß, Frank
Meine Meinung steht fest. Bitte verwirrt mich nicht mit Tatsachen!
Benutzeravatar
AmigaLink
Mitglied
Beiträge: 1417
Registriert: 09.06.2003 21:56
Wohnort: NRW
Kontaktdaten:

Re: Portal auf eigener Faust

Beitrag 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 !!!)
melowa

Re: Portal auf eigener Faust

Beitrag 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.
Benutzeravatar
AmigaLink
Mitglied
Beiträge: 1417
Registriert: 09.06.2003 21:56
Wohnort: NRW
Kontaktdaten:

Re: Portal auf eigener Faust

Beitrag von AmigaLink »

LOL, nee das konnte nicht gehen.

Der Cache wurde erstellt und auch ausgelesen, aber nicht von der Klasse zurück gegeben. :oops:
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);
?>
Benutzeravatar
7emper5i
Ehemaliger Übersetzer
Beiträge: 1473
Registriert: 11.04.2009 13:31
Wohnort: Köln
Kontaktdaten:

Re: Portal auf eigener Faust

Beitrag 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 :D

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 :P )
Die Deutsche Rechtschreibung ist Freeware, sprich, du kannst sie kostenlos nutzen. Allerdings ist sie nicht Open Source, d.h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen.
melowa

Re: Portal auf eigener Faust

Beitrag 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. :oops:
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
}
Benutzeravatar
AmigaLink
Mitglied
Beiträge: 1417
Registriert: 09.06.2003 21:56
Wohnort: NRW
Kontaktdaten:

Re: Portal auf eigener Faust

Beitrag von AmigaLink »

Gute Frage melowa, da hab ich bei meinem Schnellschuss nicht drüber nachgedacht und deswegen dem Cache keine Ablaufzeit gegeben. :oops:
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. :roll:

Mach mal aus

Code: Alles auswählen

$this->put('_rss_feed_cache', $threads);
ein

Code: Alles auswählen

$this->put('_rss_feed_cache', $threads, 600);
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. :)
Antworten

Zurück zu „[3.0.x] Mod Suche/Anfragen“