Seite 1 von 1

Beiträge / Themen - Archiv auf fremden Seiten

Verfasst: 18.08.2005 14:25
von mgutt
Also ich möchte gerne folgende Funktion anbieten:

Ein Besucher soll die Möglichkeit bekommen ein Javascript einzubinden in dem er die 10 letzten Beiträge z.B. aus dem Newssektor oder einem anderen bestimmten Bereich auf seiner Seite einbinden kann.

Hier bietet sich der recent Mod an.

Jetzt will ich das aber noch so haben, dass die ersten 1000 Zeichen aus dem Beitrag anzeigt werden ohne BBCode, aber mit Zeilenumbruch.

nach 1000 Zeichen kommt dann von mir aus ein "..." oder ein "weiter lesen..."

Ich habe schon angefangen.

Ich werde die Daten auslesen dann puffern und in ein js-script oder in eine html seite schreiben.

Mit der Beitragsauflistung das klappt, aber bei dem BBCode komme ich zur Zeit nicht weiter.

ich lese den Text aus wie folgt:

Code: Alles auswählen

	$sql = "SELECT t.*, f.forum_id, f.forum_name, u.username AS first_poster, u.user_id AS first_poster_id, u2.username AS last_poster, u2.user_id AS last_poster_id, p.post_username AS first_poster_name, p2.post_username AS last_poster_name, p2.post_time, pt.post_text, pt.post_subject, pt.bbcode_uid
		FROM ". $table_prefix ."topics t, ". $table_prefix ."forums f, ". $table_prefix ."users u, ". $table_prefix ."posts p, ". $table_prefix ."posts p2, ". $table_prefix ."users u2, ". $table_prefix ."posts_text pt
		WHERE $where_forums t.topic_poster = u.user_id AND f.forum_id = t.forum_id AND p.post_id = t.topic_first_post_id AND p2.post_id = t.topic_last_post_id AND u2.user_id = p2.poster_id AND pt.post_id = p.post_id AND u.user_id = p.poster_id
		ORDER BY t.topic_last_post_id DESC LIMIT $topic_limit";
weise dann die variablen zu:

Code: Alles auswählen

		$topic_text = $line[$i]['post_text'];
		$bbcode_uid = $line[$i]['bbcode_uid'];
Der Text funktioniert, aber die Funktion hinter dem bbcode verstehe ich nicht, dafür wird nämlich ca. das benötigt: (kann mir hier jemand mal einen tipp geben, ich verstehe nicht ganz diese gleichungen mit "wert ? wert : wert;" auf php.net war die suche bisher erfolglos :cry: )

Code: Alles auswählen

		if ( $bbcode_uid != '' )
		{
			$topic_text = ( 1 = 1 ) ? bbencode_second_pass($topic_text, $bbcode_uid) : preg_replace('/\:[0-9a-z\:]+\]/si', ']', $topic_text);
		}
also zu deutsch, der soll die Funktion "bbencode_second_pass" aus der bbcode.php abarbeiten.

Leider habe ich die nicht, weil ich das Puffern und das speichern auf einer anderen Domain machen möchte.

Aber die Funktion ist mir eh zu umfangreich.

eigentlich brauche ich doch nur ein preg_replace, dass mir die "uid"-werte rauslöscht und die tags entfernt. aber irgendwie bin ich zu blöd dafür einen hinzukriegen ;)

Verfasst: 18.08.2005 14:58
von mgutt
ich dachte eigentlich immer, dass wäre eine verkürzte if abfrage durch einen operator. aber hier wird doch komischerweise abgefragt bzw. festgelegt, dass 1 = 1 zugewiesen wird, und damit bbencode_second_pass durchgeführt wird.

also schlecht erklärt:

if 1=1 dann bbencode sonst preg_replace.

Code: Alles auswählen

$topic_text = ( 1 = 1 ) ? bbencode_second_pass($topic_text, $bbcode_uid) : preg_replace('/\:[0-9a-z\:]+\]/si', ']', $topic_text);
ja ich bin noob ;)

mit:

Code: Alles auswählen

$topic_text = preg_replace('/\:[0-9a-z\:]+\]/si', ']', $topic_text);
erreiche ich auf jedenfall, dass die uid's verschwinden. lieber wäre mir aber, wenn die bbcode-tags komplett wegfallen würden.. mal weiter testen. oder kann mir jemand schnell nen heißen tipp geben?

Verfasst: 18.08.2005 17:38
von kratzer54847
if 1=1
da 1 aber immer gleich 1 ist bringt das doch überhaupt nichts... :roll:

Verfasst: 18.08.2005 18:03
von mgutt
naja das gleiche denke ich ja auch. aber der code ist original aus der viewtopic.php ;)

EDIT:

Ich habe mir jetzt mal was zusammengefummelt, so dass die bbcodes HTML-mäßig umgewandelt werden:

Code: Alles auswählen

		//
		// Parse message and/or sig for BBCode if reqd
		// 

		if ( $bbcode_uid != '' )
		{
		$c = '\:[0-9a-z\:]+\]/i';
		$suche = array ('([\n])',
						'/\[b' . $c,
						'/\[\/b' . $c,
						'/\[i' . $c,
						'/\[\/i' . $c,
						'/\[quote' . $c,
						'/\[\/quote' . $c,
						'/\[code' . $c,
						'/\[\/code' . $c,
						'/\[img' . $c,
						'/\[\/img' . $c,
						'/\[url\]([^>]*?)\[/i',
						'/\[url\=([^>]*?)\]([^>]*?)\[/i',
//						'/http:\/\/([^>]*?)/i',
						'/\/url\]/i',
						'/\[center' . $c,
						'/\[\/center' . $c,
						'/\[color=([a-z]*)' . $c,
						'/\[\/color' . $c,
						'/\[u' . $c,
						'/\[\/u' . $c,
						'/\[size\=([0-9]*)' . $c,
						'/\[\/size' . $c);

		$ersetze = array ('<br />',
						'<strong>',
						'</strong>',
						'<em>',
						'</em>',
						'<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center">
							<tr>
								<td><b>Zitat:</b></td>
							</tr>
							<tr>
								<td>',
						'</td>
							</tr>
						</table>',
						'<table width="90%" cellspacing="1" cellpadding="3" border="0" align="center">
							<tr>
								<td><b>Code:</b></td>
							</tr>
							<tr>
								<td>',
						'</td>
							</tr>
						</table>',
						'<img src="',
						'">',
						'<a href="\\1">\\1',
						'<a href="\\1">\\1',
//						'<a href="http://\\1">http://\\1</a>',
						'</a>',
						'<div align="center">',
						'</div>',
						'<font color="\\1">',
						'</font>',
						'<u>',
						'</u>',
						'<font size="\\1px">',
						'</font>');

			$topic_text = preg_replace($suche, $ersetze, $topic_text);
		}
Damit bin ich erstmal zufrieden. Leider funktioniert das Umwandeln von normalen URLs nicht, da er dann jede URL doppelt umwandeln will.

Jetzt kann ich alle Beiträge aus den Foren auslesen und Puffern. Theoretisch könnte man daraus jetzt ein echtes Archiv bauen, so dass z.B. alte Beiträge wie z.B. bei Motor-Talk nicht mehr neu aufgebaut werden, sondern stupide als HTML dargestellt werden. (z.B. bei Beiträgen auf die seit ca. 100 Tagen keine Antwort mehr gestellt wurde)

Das spart ja bekannterweise MySQL Verbindungen und bringt damit wiederrum Performance ;)

Aber ich will eher "Spammen" und meine Beiträge auf andere Seiten bringen ;)

Verfasst: 23.07.2006 03:41
von MW_Skripts
Ist der MOD jetzt schon fertig?

Habe ich das richtig Verstandn, der MOD schreibt die letzt Beiträge von 10 Tagen auf eine exteren HTML datei.