Seite 1 von 2

wie posting text mit nur post_id auslesen?

Verfasst: 17.08.2007 16:26
von Gumfuzi
Hallo Leute,

ich habe mir nun die sourcecode docs durchgesehen (http://area51.phpbb.com/docs/code/), aber ich finde keine Funktion, mit der ich anhand einer post_id den dazugehörigen Posting-Text (wenn möglich fertig aufbereitet inkl. BBCodes, Smilies, etc.) bekomme.
Ist euch das was bekannt?

Falls es so eine Funktion nicht gibt, müsste ich den Text zuerst per SQL abfragen (wohl die ganzen Felder von phpbb_posts?) bzw. ein "left_join" einfügen und dann folgende Reihenfolge durchspielen?

Code: Alles auswählen

// Parse the message and subject
$message = censor_text($row['post_text']);

// Second parse bbcode here
if ($row['bbcode_bitfield'])
{
	$bbcode->bbcode_second_pass($message, $row['bbcode_uid'], $row['bbcode_bitfield']);
}

$message = str_replace("\n", '<br />', $message);

// Always process smilies after parsing bbcodes
$message = smiley_text($message);
dann könnte ich $message in das Template übergeben und dort anzeigen lassen?

Liege ich da richtig oder habe ich was übersehen?

Vielen Dank für eure Hilfe/Mühen!

*edit*
habs hinbekommen

posting ID

Verfasst: 19.08.2007 21:24
von korneuburgcc
und wie?!

Verfasst: 21.08.2007 21:10
von Gumfuzi
habe in der viewtopic.php folgendes hinzugefügt:
(keine Garantie auf ev. Schäden / die nachfolgenden Edits habe ich nur durch Duchsehen der Datei aufgelistet, hoffe, dass ich nix übersehen habe)
find:

Code: Alles auswählen

// Configure style, language, etc.
$user->setup('viewforum', $forum_data['forum_style']);
after, add:

Code: Alles auswählen

if ( $forum_data['forum_style'] == 13 )
{
	$erstes_posting_text = 1;
}
find:

Code: Alles auswählen

// Grab all topic data
$rowset = $announcement_list = $topic_list = $global_announce_list = array();

$sql_array = array(
	'SELECT'	=> 't.*',
	'FROM'		=> array(
		TOPICS_TABLE		=> 't'
	),
	'LEFT_JOIN'	=> array(),
);
after, add:

Code: Alles auswählen

# Zusatz für erstes Posting
if ( $erstes_posting_text == 1)
{
	$sql_array['LEFT_JOIN'][] = array(
		'FROM'	=> array(POSTS_TABLE => 'p'),
		'ON'	=> "t.topic_first_post_id = p.post_id"
	);	
	$sql_array['SELECT'] .= ', p.*';
}
find:

Code: Alles auswählen

// SQL array for obtaining topics/stickies
$sql_array = array(
	'SELECT'		=> $sql_array['SELECT'],
	'FROM'			=> $sql_array['FROM'],
	'LEFT_JOIN'		=> $sql_array['LEFT_JOIN'],

	'WHERE'			=> $sql_where . '
		AND t.topic_type IN (' . POST_NORMAL . ', ' . POST_STICKY . ")
		$sql_approved
		$sql_limit_time",

	'ORDER_BY'		=> 't.topic_type ' . ((!$store_reverse) ? 'DESC' : 'ASC') . ', ' . $sql_sort_order,
);
das " ', ' . $sql_sort_order, " in der letzten Zeile muss auch dazu, dann es dann so aussieht wie hier unter "find"!!

BEFORE, add:

Code: Alles auswählen

if ( $erstes_posting_test == 1)
{
	$sql_sort_order = " t.topic_time DESC";
}
find:

Code: Alles auswählen

		// Generate all the URIs ...
		$view_topic_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . (($row['forum_id']) ? $row['forum_id'] : $forum_id) . '&t=' . $topic_id);

		$topic_unapproved = (!$row['topic_approved'] && $auth->acl_get('m_approve', $forum_id)) ? true : false;
		$posts_unapproved = ($row['topic_approved'] && $row['topic_replies'] < $row['topic_replies_real'] && $auth->acl_get('m_approve', $forum_id)) ? true : false;
		$u_mcp_queue = ($topic_unapproved || $posts_unapproved) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=queue&mode=' . (($topic_unapproved) ? 'approve_details' : 'unapproved_posts') . "&t=$topic_id", true, $user->session_id) : '';
after, add:

Code: Alles auswählen

		#erstes Posting Text
		#-----------------
		if ( $erstes_posting_text == 1)
		{
			include_once($phpbb_root_path . 'includes/bbcode.' . $phpEx);
			$bbcode_bitfield = '';
			$bbcode = new bbcode(base64_encode($row['bbcode_bitfield']));

			// Parse the message and subject
			$post_text = censor_text($row['post_text']);

			// Second parse bbcode here
			if ($row['bbcode_bitfield'])
			{
			   $bbcode->bbcode_second_pass($post_text, $row['bbcode_uid'], $row['bbcode_bitfield']);
			}

			$post_text = str_replace("\n", '<br />', $post_text);

			// maximum Länge
			#$post_text = ( utf8_strlen($post_text) > 100 )? (utf8_substr($post_text,0,100) . '...') : ($post_text);

			// Always process smilies after parsing bbcodes
			$post_text = smiley_text($post_text);

		}
		####
die "maximale Länge funzt zwar, wenn man das "#" wegmacht, aber es bricht auch mitten in URL's etc. um, sodaß dann der Style darunter leidet!

find:

Code: Alles auswählen

			'S_TOPIC_TYPE_SWITCH'	=> ($s_type_switch == $s_type_switch_test) ? -1 : $s_type_switch_test,
after, add:

Code: Alles auswählen

			'FIRST_POST_TEXT'		=> $post_text,
			'FIRST_POST_ID'			=> $row['topic_first_post_id'])
dies sind auch die variablen, die Du in das/die Template einfügen musst.

Viel Erfolg!

Verfasst: 22.08.2007 02:11
von Kleopatras_Sister
morgen,

entschuldigt wenn ich laie nach frage, aber was genau machen diese Änderungen bzw. ich verstehe nicht was das Thema Insgesamt bewirkt :oops:

Verfasst: 22.08.2007 10:58
von Gumfuzi
die Änderungen habe ich zB. gemacht, damit ich in der Forenansicht bereits den Text der ersten Postings verwenden kann, bei mir für den Blog-Style, man kann es aber ev. auch für die Anzeige des Threadanfangs (erstes posting) beim Mouseover in der Forenansicht nutzen?

Damit das nicht immer abgefragt wird, habe ich diese Bedingungsabfrage gemacht, die jeder selblst definieren kann (bei gewissen Foren ($forum_id), oder gewissen Styles, etc.)

Verfasst: 22.08.2007 15:17
von Kleopatras_Sister
aso ok, habs zwar noch immer nicht ganz verstanden ist aber nicht das was ich such.

Ich suche nämlich das jedes Post in einem Topc eine id hat, man zu dieser direkt verlinken kann. Dachte nach lesen des Themas, das diese Anpassungen dies bewirken würden. Schade.

Aber hab herzlichen dank für deine Antworten :)

Verfasst: 22.08.2007 15:36
von Berliner Schildkroete
Kleopatras_Sister hat geschrieben:
Ich suche nämlich das jedes Post in einem Topc eine id hat, man zu dieser direkt verlinken kann. Dachte nach lesen des Themas, das diese Anpassungen dies bewirken würden. Schade.
jedes post hat doch seine eigene Id die du so aufrufen kannst:
Dein_Forum/viewtopic.php?f=ID&t=ID&p=ID#pID
ID Forum ID
IDTopic ID
ID Post ID
Es wird dann direkt zum Post gesprungen... z.B. so

oder willst du das das Topic "ohne alles" angezeigt wird, also ohne andere post

Verfasst: 22.08.2007 15:42
von Kleopatras_Sister
ui

ähm ja, also ich hätte gerne in meinem style Acid das in jedem Post recht unten eine direkte Zahl erscheint, also Post 1 in Toic xy

Hab das mal in einem Forum gesehen und finde das sehr nützlich.

Dazu kommt, was anscheinend auch ne Einstellung ist, wenn ich z.b. sagen wir bei der mitte des Topic bin und die Seite Reloade (F5) dann lande ich statt dort wo ich war, wieder am Anfang des thema... ka ob ich zu sehr abdrifte. Aber vieleicht kannst du mir als Profi da etwas helfen. :) Lieb wäre das (sehr)

;)

Verfasst: 22.08.2007 15:44
von Berliner Schildkroete
Kleopatras_Sister hat geschrieben:ui

ähm ja, also ich hätte gerne in meinem style Acid das in jedem Post recht unten eine direkte Zahl erscheint, also Post 1 in Toic xy

Hab das mal in einem Forum gesehen und finde das sehr nützlich.

Dazu kommt, was anscheinend auch ne Einstellung ist, wenn ich z.b. sagen wir bei der mitte des Topic bin und die Seite Reloade (F5) dann lande ich statt dort wo ich war, wieder am Anfang des thema... ka ob ich zu sehr abdrifte. Aber vieleicht kannst du mir als Profi da etwas helfen. :) Lieb wäre das (sehr)

;)
sowas such ich selber :P

Verfasst: 22.08.2007 16:23
von Gumfuzi
bei jedem Posting in der Threadansicht gibt es die Symbole [ externes Bild ] und [ externes Bild ]
dahinter verbirgt sich ein Link, der gleich auf das jeweilige Posting verlinkt.

Falls Du wirklich eine "fortlaufende" Postingzahl pro Thread brauchst (für eben andere Zwecke als direkt auf ein Post zu verlinken (wie ich eben beschrieben habe), dann müsste man eine Variable mitzählen lassen in der viewtopic.php und diese dann an das Template übergeben (Abschnitt "topicrow"; wo die anderen Variablen übergeben werden.