Seite 1 von 2

Threadanordnung

Verfasst: 12.10.2006 18:53
von nickvergessen
der IE zeigt leider mein Forum nicht mehr richtig an.
Er fügt die 0 bzw 1 für den neuen Beitrag vor die Tabelle ein.
daraus resultiert auch, dass hinten ein feld zuviel ist.
Weiß jemand wo der Fehler liegt?

Verfasst: 12.10.2006 20:02
von miccom
In deiner index_body.tpl wird ein </td nicht geschlossen -> </td>.

Liegt vermutlich daran, das du beim Mod-Einbau geschlampt hast, suche nach:

Code: Alles auswählen

</td	<td class="row2" align="center" valign="middle" height="50"><span class="gentblsmall">{catrow.forumrow.TOPICS}</span></td>

Verfasst: 13.10.2006 22:52
von nickvergessen
Wer kann mir sagen, was ich ändern muss, um meine Topics wie folgt zu sortieren:


bis jetzt sieht die sache so aus:

Ich finde das voll unübersichtlich.

Verfasst: 14.10.2006 23:05
von nickvergessen
*push*

das muss dohc jemand wissen!

Verfasst: 15.10.2006 01:01
von gn#36
So einfach ist das leider nicht, unmöglich aber auch nicht. Es sind ein paar Änderungen in diversen Dateien nötig.
Fangen wir mit der viewforum.php an:

Zunächst suche nach

Code: Alles auswählen

//
// Okay, lets dump out the page ...
//
Davor müssen 2 Variablen gesetzt werden:

Code: Alles auswählen

$type_has_changed = FALSE;
$type_of_row = 0;

Code: Alles auswählen

if( $topic_type == POST_ANNOUNCE )
		{
			$topic_type = $lang['Topic_Announcement'] . ' ';
		}
Ersetze dieses durch

Code: Alles auswählen

if( $topic_type == POST_ANNOUNCE )
		{
			$topic_type = $lang['Topic_Announcement'] . ' ';
$type_has_changed = $type_of_row == POST_ANNOUNCE ? FALSE : TRUE;
$type_of_row = POST_ANNOUNCE;
		}
Analog mit dieser Stelle:

Code: Alles auswählen

else if( $topic_type == POST_STICKY )
		{
			$topic_type = $lang['Topic_Sticky'] . ' ';
		}
=>

Code: Alles auswählen

else if( $topic_type == POST_STICKY )
		{
			$topic_type = $lang['Topic_Sticky'] . ' ';
$type_of_row = POST_STICKY;
$type_has_changed = $type_of_row == POST_STICKY ? FALSE : TRUE;
		}
Und ebenso die direkt darauf folgende

Code: Alles auswählen

else
		{
			$topic_type = '';		
$type_of_row = 0;
$type_has_changed = $type_of_row == 0 ? FALSE : TRUE;
		}
(Datei ist noch nicht fertig, aber ich mache das in nachvollziehbarer Reihenfolge)

Jetzt wissen wir schon mal was es ist, denn im Original wird diese Variable ja leider überschrieben mit dem Text des Themas, außerdem wissen wir ob es einen Wechsel gegeben hat (also ein anderer Typ als Vorher ausgegeben werden soll). Dies reicht aus, da die Themen ja sortiert aus der DB kommen. Bei jedem Wechsel können wir dann die Dummyzeile "einschieben". Gerade dieses Einschieben ist allerdings noch nicht vorgesehen, daher sind an dem Template für die Forenausgabe einige Änderungen nötig:
öffne die viewforum_body.tpl (Achtung ich habe keinen großen Wert auf eine "hübsche Darstellung" gelegt, wenn dir die eingefügte Zeile nicht passt musst du sie anpassen)
Suche nach

Code: Alles auswählen

<!-- BEGIN topicrow -->
Direkt danach musst du einfügen

Code: Alles auswählen

<!-- BEGIN topic_subheader -->
	<tr>
		<td colspan="6" class="catHead" align="center"><span class="cattitle">{topic_row.topic_subheader.DESCRIPTION}</span></td>
	</tr>
	<!-- END topic_subheader -->
Das ist später die zusätzliche Zeile in der Forumdarstellung.
Diese muss allerdings noch mit Text gefüllt werden.
Also wieder zurück zur viewforum.php:
nach dieser Stelle

Code: Alles auswählen

$template->assign_block_vars('topicrow', array(
			'ROW_COLOR' => $row_color,
			'ROW_CLASS' => $row_class,
			'FORUM_ID' => $forum_id,
			'TOPIC_ID' => $topic_id,
			'TOPIC_FOLDER_IMG' => $folder_image, 
			'TOPIC_AUTHOR' => $topic_author, 
			'GOTO_PAGE' => $goto_page,
			'REPLIES' => $replies,
			'NEWEST_POST_IMG' => $newest_post_img, 
			'TOPIC_TITLE' => $topic_title,
			'TOPIC_TYPE' => $topic_type,
			'VIEWS' => $views,
			'FIRST_POST_TIME' => $first_post_time, 
			'LAST_POST_TIME' => $last_post_time, 
			'LAST_POST_AUTHOR' => $last_post_author, 
			'LAST_POST_IMG' => $last_post_url, 

			'L_TOPIC_FOLDER_ALT' => $folder_alt, 

			'U_VIEW_TOPIC' => $view_topic_url)
		);
muss ein neuer Codeblock hinein:

Code: Alles auswählen

if($type_has_changed && $type_of_row == POST_ANNOUNCE)
{
$template->assign_block_vars('topicrow.topic_subheader',array('DESCRIPTION'=>preg_replace("#(<b>|</b>|:)#is",'',$lang['Topic_Announcement'])));
}
elseif($type_has_changed && $type_of_row == POST_STICKY)
{
$template->assign_block_vars('topicrow.topic_subheader',array('DESCRIPTION'=>preg_replace("#(<b>|</b>|:|!)#is",'',$lang['Topic_Sticky'])));
}
elseif($type_has_changed)
{
$template->assign_block_vars('topicrow.topic_subheader',array('DESCRIPTION'=>$lang['Topics']));
}
Falls die Überschriften um eine Position verrutscht sein sollten versuche mal stattdessen das ganze oberhalb des codeblocks einzufügen, vielleicht habe ich mich mit der Reihenfolge vertan.

Sollten sich in einem Forum nur normale Themen befinden gibt es auch keine Überschrift. Nur Themen eines anderen Typs werden nicht erkannt, ich denke aber das ist nicht tragisch.
Alternativ zu den preg_replace Befehlen (sollen nur die "Announcement" und "Sticky" Schriftzüge von den HTML Formatierungen und Doppelpunkten befreien) könntest du auch einfach $lang Variablen mit entsprechendem Inhalt anlegen.

Naja, so viele Dateien waren das jetzt doch nicht wie ich dachte.

Wichtig: Alle Dateien vor der Änderung sichern! Ich habe das nicht getestet und übernehme keine Garantie!

Verfasst: 15.10.2006 01:20
von nickvergessen
gn#36 hat geschrieben:Naja, so viele Dateien waren das jetzt doch nicht wie ich dachte.
Vllt doch. Hast du eine vergessen?
Weil so funktioniert es leider nicht :(

Verfasst: 15.10.2006 01:25
von gn#36
Ok ich schau mir das noch mal an...

Verfasst: 15.10.2006 01:51
von gn#36
Klitzekleiner Gewohnheits-tippfehler mit großer Wirkung:

im Template muss es nicht topic_row sondern topicrow heißen:

Code: Alles auswählen

<!-- BEGIN topic_subheader -->
	<tr>
		<td colspan="6" class="catHead" align="center"><span class="cattitle">{topicrow.topic_subheader.DESCRIPTION}</span></td>
	</tr>
	<!-- END topic_subheader -->
Ich hoffe das war der Fehler auch bei dir?
Bei mir klappt es ansonsten einwandfrei. Du musst das natürlich auch in alle Templates einbauen in denen du es haben willst. (wenn du es nicht haben willst kannst du es aber in beliebigen Templates auch einfach weglassen ;) )

Verfasst: 15.10.2006 01:59
von nickvergessen
immer noch nicht ganz...
jetzt hat er zwar Ankündigungen drüber geschrieben,
aber wichtig und normal sind immernoch nicht davon getrennt.
Wenn du dich überzeugen willst:

Verfasst: 15.10.2006 02:11
von gn#36
Ok, eigentlich habe ich mich beim Einbau bei mir selbst an meine eigene Anleitung gehalten...
Hier noch mal die Geänderten Codeabschnitte aus meiner funktionierenden Datei (viewforum.php):

Code: Alles auswählen

$type_has_changed = FALSE;
$type_of_row = 0;
//
// Okay, lets dump out the page ...
//
if( $total_topics )
{
	for($i = 0; $i < $total_topics; $i++)
	{
		$topic_id = $topic_rowset[$i]['topic_id'];

		$topic_title = ( count($orig_word) ) ? preg_replace($orig_word, $replacement_word, $topic_rowset[$i]['topic_title']) : $topic_rowset[$i]['topic_title'];

		$replies = $topic_rowset[$i]['topic_replies'];

		$topic_type = $topic_rowset[$i]['topic_type'];

		if( $topic_type == POST_ANNOUNCE )
		{
			$topic_type = $lang['Topic_Announcement'] . ' ';
			$type_has_changed = $type_of_row == POST_ANNOUNCE ? FALSE : TRUE;
			$type_of_row = POST_ANNOUNCE; 
		}
		else if( $topic_type == POST_STICKY )
		{
			$topic_type = $lang['Topic_Sticky'] . ' ';
			$type_has_changed = $type_of_row == POST_STICKY ? FALSE : TRUE;
			$type_of_row = POST_STICKY; 
		}
		else
		{
			$topic_type = '';
			$type_has_changed = $type_of_row == 0 ? FALSE : TRUE;
			$type_of_row = 0; 		
		}
und

Code: Alles auswählen

$template->assign_block_vars('topicrow', array(
			'ROW_COLOR' => $row_color,
			'ROW_CLASS' => $row_class,
			'FORUM_ID' => $forum_id,
			'TOPIC_ID' => $topic_id,
			'TOPIC_FOLDER_IMG' => $folder_image, 
			'TOPIC_AUTHOR' => $topic_author, 
			'GOTO_PAGE' => $goto_page,
			'REPLIES' => $replies,
			'NEWEST_POST_IMG' => $newest_post_img, 
			'TOPIC_TITLE' => $topic_title,
			'TOPIC_TYPE' => $topic_type,
			'VIEWS' => $views,
			'FIRST_POST_TIME' => $first_post_time, 
			'LAST_POST_TIME' => $last_post_time, 
			'LAST_POST_AUTHOR' => $last_post_author, 
			'LAST_POST_IMG' => $last_post_url, 

			'L_TOPIC_FOLDER_ALT' => $folder_alt, 

			'U_VIEW_TOPIC' => $view_topic_url)
		);
		if($type_has_changed && $type_of_row == POST_ANNOUNCE)
		{
		$template->assign_block_vars('topicrow.topic_subheader',array('DESCRIPTION'=>preg_replace("#(<b>|</b>|:)#is",'',$lang['Topic_Announcement'])));
		}
		elseif($type_has_changed && $type_of_row == POST_STICKY)
		{
		$template->assign_block_vars('topicrow.topic_subheader',array('DESCRIPTION'=>preg_replace("#(<b>|</b>|:|!)#is",'',$lang['Topic_Sticky'])));
		}
		elseif($type_has_changed)
		{
		$template->assign_block_vars('topicrow.topic_subheader',array('DESCRIPTION'=>$lang['Topics']));
		}
Im Template sollte das hier sein:

Code: Alles auswählen

<!-- BEGIN topicrow -->
	<!-- BEGIN topic_subheader -->
	<tr>
		<td colspan="6" class="catHead" align="left"><span class="cattitle">{topicrow.topic_subheader.DESCRIPTION}</span></td>
	</tr>
	<!-- END topic_subheader -->
Aber das stimmt wohl schon, ansonsten würdest du überhaupt keine Anzeige bekommen.