Seite 1 von 3

threads sind sortiert aber noch fragen

Verfasst: 07.08.2007 19:59
von Klang-Aktivist
tachchen..

also ich hab mein komplettes forum mit allen topics von a-z sortiert..
etz hab ich dazu aber noch 2 fragen..

die 1 wäre: da ja etz alles von a-z sortiert is, sind die beiträge die als wichtig oder als ankündigung geschrieben wurden bei dem entsprechenden buchstaben..

wie also bekomme ich das so hin, das alles von a-z sortiert bleibt, aber trozdem die threads die als wichtig bzw. als ankündigung gepost wurden an erster stelle stehen?

die 2te frage wäre: ist fasst das gleiche wie bei der 1ten frage, allerdings bleibt bei einem neuen beitrag der geschrieben wurde der thread auch wieder bei dem entsprechendem buchstaben, anstatt an erste stelle zu wandern.

ich hoffe ihr versteht was ich meine und könnt mir helfen..
greetz dave

EDIT:
so in etwa hab ich mir das vorgestellt, damit das so aussieht
http://img262.imageshack.us/img262/959/ ... e01ov9.jpg
Große Bilder bitte verlinken - KB:Knigge //gn#36

Verfasst: 07.08.2007 20:26
von gn#36
Du hast zu große Bilder in deinen Beitrag eingebunden, was das Thema unübersichtlich macht. Es wäre besser die Bilder stattdessen lediglich zu verlinken - siehe auch Grösse von Avataren und Bildern.

Bitte lies Dir den phpBB.de-Knigge und den Hinweis zur Fragestellung und Rechtschreibung durch und beachte diese zukünftig.

Zum Thema:
Es hängt ganz davon ab wie die Sortierung nach Buchstaben realisiert ist ob die Ankündigungen und Wichtigen Themen einsortiert werden oder nicht. Wenn eine Einsortierung nicht erwünscht ist, dann ist die Änderung sogar deutlich einfacher als wenn es notwendig ist die wichtigen Themen mit einzusortieren.
Um genauere Aussagen zu treffen wäre das Verlinken der viewforum.php hilfreich (KB:datei).
Bei deiner zweiten Frage bin ich mir nicht sicher wie du das genau meinst. Entweder die Themen werden nach Name sortiert oder nach Datum, nach beidem gleichzeitig ist eher schwierig, irgendetwas muss Priorität haben.

Verfasst: 07.08.2007 20:53
von Klang-Aktivist
ok dann mach ich das anders..
kann ich das sortieren auf bestimmte topics begrenzen, also das es nicht aufs ganze forum sortiert, sondern nur ein von mir ausgesuchtes topic sortiert?

so, hier die viewforum
Download

Verfasst: 07.08.2007 21:20
von gn#36
Generell kannst du das sicherlich auf bestimmte Themen begrenzen, je nachdem wie speziell das ist wird das mehr oder weniger komplex.
Du musst natürlich immer ein Kriterium haben nach dem du das in eine der beiden Gruppen einordnest, also wenn du z.b. sagen würdest "Alle Ankündigungen und Wichtigen Themen nach Datum, der Rest nach Alphabet" dann wäre das kein Problem. Kompliziert würde es bei "Alle Themen mit A,C,X am Anfang nach Alphabet, der Rest nach Datum wobei die Datumsthemen vor den alphabetischen stehen" oder "Alle Themen neuer als von vorgestern/letztem Login nach oben, der Rest alphabetisch".

Derzeit ist deine Datei so eingerichtet, dass du in allen Foren die Ankündigungen oben hast, den Rest alphabetisch sortierst.
Was genau möchtest du jetzt haben??
Die Wichtigen Themen könntest du schon mal nach oben haben wenn du

Code: Alles auswählen

$order_by = ( $forum_id == 1 ) ? 't.topic_title ASC, t.topic_last_post_id ASC' : 't.topic_title, t.topic_last_post_id DESC';
ersetzt durch

Code: Alles auswählen

$order_by = 't.topic_type DESC, t.topic_title ASC, t.topic_last_post_id DESC';

Verfasst: 08.08.2007 02:50
von Klang-Aktivist
ok das mit dem wichtigen themen nach oben hat super geklappt, danke ;)

so habs mir nochmal überlegt, ich will nur in bestimmten topics das es alphabetisch geordnet ist, der rest soll wieder wie beim standart nach datum sortiert werden..

gibt es da nen code dafür?

Verfasst: 08.08.2007 03:00
von gn#36
Wie willst du das nach Themen unterscheiden?
Nach Forum unterscheiden wäre kein Problem, nach Thementyp auch nicht, aber wenn du nach Thema unterscheiden willst brauchst du ein Kriterium anhand dessen du das machst.
Meine Vermutung wäre dass du möchtest dass ein Teil der Foren alphabetisch sortiert, der Rest nach Datum sortiert wird, oder?

Code: Alles auswählen

$order_by = 't.topic_type DESC, t.topic_title ASC, t.topic_last_post_id DESC';
ersetzen durch

Code: Alles auswählen

if(in_array($forum_id,array(1, 2, 3)))
{
$order_by = 't.topic_type DESC, t.topic_title ASC, t.topic_last_post_id DESC';
}
else
{
$order_by = 't.topic_type DESC, t.topic_last_post_id DESC, t.topic_title ASC';
}
das sollte dafür sorgen dass die Themen in den Foren 1,2,3 (ID, lässt sich z.b. über die URL herausbekommen) alphabetisch und die übrigen nach Datum sortiert werden. 1,2,3 kannst du durch beliebige ID's ersetzen die du mit einem Komma trennen musst.

Verfasst: 08.08.2007 05:02
von Klang-Aktivist
hat super geklappt, ich danke dir :)

Verfasst: 08.08.2007 10:49
von Klang-Aktivist
ahja eine kleine frage hab ich noch..

ist es möglich in den topics wo ich das von a-z sortiert hab, die seitenwahl zu ändern?

also damit nicht seite 1,2,3,4....... da steht, sondern a,b,c,d......

Verfasst: 08.08.2007 12:12
von gn#36
Bitte nicht Bumpen, neue Informationen kannst du auch per EDIT hinzufügen...

Das ist schon erheblich komplizierter. Die Seitenzahlen werden - unabhängig wo sie eingesetzt werden - von einer zentralen Stelle generiert. Diese Funktion müsste man erweitern, dass sie auch Buchstaben liefern kann. Danach müsste man außerdem die viewforum so anpassen, dass sie bei ausgewähltem Buchstaben auch nur die Themen mit diesem Buchstaben anzeigt (ich nehme an, dass es das ist was du möchtest, oder?).

Probieren wir's:
Wichtig: Alle bearbeiteten Dateien und die Datenbank vorher sichern!
Die Funktion generate_pagination befindet sich in der functions.php
suche nach

Code: Alles auswählen

function generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = TRUE)
und ersetze das durch

Code: Alles auswählen

function generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = TRUE, $use_letters = FALSE)
Als nächstes das hier

Code: Alles auswählen

$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
			
ersetzen durch

Code: Alles auswählen

if($use_letters)
{
$page_string .= ( $i == $on_page ) ? '<b>' . strtoupper(base_convert(10, 36,$i+9)) . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . strtoupper(base_convert(10, 36,$i+9)) . '</a>';
			
}
else
{
$page_string .= ( $i == $on_page ) ? '<b>' . $i . '</b>' : '<a href="' . append_sid($base_url . "&start=" . ( ( $i - 1 ) * $per_page ) ) . '">' . $i . '</a>';
}
Das ganze kommt insgesamt 4 mal vor und muss auch an allen 4 Stellen ersetzt werden.
Falls du außerdem möchtest dass grundsätzlich das komplette Alphabet angezeigt wird und nicht nur die Buchstaben in der Umgebung der aktuellen Seite dann musst du zusätzlich in der gleichen Funktion noch folgende Änderung machen:
suche

Code: Alles auswählen

if ( $total_pages > 10 )
ersetze durch

Code: Alles auswählen

if ( $total_pages > 10 && !$use_letters)
Das waren die Änderungen an der functions.php
Hinzu kommen jetzt noch die Anpassungen an der viewforum.php:
Suche hier die Zeilen

Code: Alles auswählen

$template->assign_vars(array(
		'PAGINATION' => generate_pagination("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id&topicdays=$topic_days", $topics_count, $board_config['topics_per_page'], $start),
		'PAGE_NUMBER' => sprintf($lang['Page_of'], ( floor( $start / $board_config['topics_per_page'] ) + 1 ), ceil( $topics_count / $board_config['topics_per_page'] )), 

		'L_GOTO_PAGE' => $lang['Goto_page'])
	);
ersetze sie durch das hier:

Code: Alles auswählen

if(in_array($forum_id, array(1, 2, 3)))
{
$template->assign_vars(array(
		'PAGINATION' => generate_pagination("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id&topicdays=$topic_days", 26, 1, $start, true, true),
		'PAGE_NUMBER' => sprintf($lang['Page_of'], $start, 26), 

		'L_GOTO_PAGE' => $lang['Goto_page'])
	);
}
else
{
$template->assign_vars(array(
		'PAGINATION' => generate_pagination("viewforum.$phpEx?" . POST_FORUM_URL . "=$forum_id&topicdays=$topic_days", $topics_count, $board_config['topics_per_page'], $start),
		'PAGE_NUMBER' => sprintf($lang['Page_of'], ( floor( $start / $board_config['topics_per_page'] ) + 1 ), ceil( $topics_count / $board_config['topics_per_page'] )), 

		'L_GOTO_PAGE' => $lang['Goto_page'])
	);
}
Zusätzlich muss nun noch die SQL Abfrage angepasst werden die die Themen aus der Datenbank holt:
Ersetze

Code: Alles auswählen

$sql = "SELECT t.*, u.username, u.user_id, u2.username as user2, u2.user_id as id2, p.post_username, p2.post_username AS post_username2, p2.post_time 
	FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . POSTS_TABLE . " p2, " . USERS_TABLE . " u2
	WHERE t.forum_id = $forum_id
		AND t.topic_poster = u.user_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 t.topic_type <> " . POST_ANNOUNCE . " 
		$limit_topics_time
	ORDER BY $order_by 
	LIMIT $start, ".$board_config['topics_per_page'];
durch

Code: Alles auswählen

if(in_array($forum_id,array(1, 2, 3)))
{
if($start)
{
$where_add = "AND ( t.topic_title LIKE '".strtoupper(base_convert(10,36, $start + 9)) . "%' OR t.topic_title LIKE '". strtolower(base_convert(10, 36, $start + 9)) . "%') ";
}
else
{
$where_add = '';
}
$sql = "SELECT t.*, u.username, u.user_id, u2.username as user2, u2.user_id as id2, p.post_username, p2.post_username AS post_username2, p2.post_time 
	FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . POSTS_TABLE . " p2, " . USERS_TABLE . " u2
	WHERE t.forum_id = $forum_id
		AND t.topic_poster = u.user_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 t.topic_type <> " . POST_ANNOUNCE . " 
$where_add
		$limit_topics_time
	ORDER BY $order_by 
	 ";
}
else
{
$sql = "SELECT t.*, u.username, u.user_id, u2.username as user2, u2.user_id as id2, p.post_username, p2.post_username AS post_username2, p2.post_time 
	FROM " . TOPICS_TABLE . " t, " . USERS_TABLE . " u, " . POSTS_TABLE . " p, " . POSTS_TABLE . " p2, " . USERS_TABLE . " u2
	WHERE t.forum_id = $forum_id
		AND t.topic_poster = u.user_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 t.topic_type <> " . POST_ANNOUNCE . " 
		$limit_topics_time
	ORDER BY $order_by 
	LIMIT $start, ".$board_config['topics_per_page'];
}

Verfasst: 08.08.2007 12:27
von Klang-Aktivist
hab das alles so eingefügt, aber bei den topics wo ich es alphabetisch geordnet habe, ist immernoch 1,2,3,4.... anstatt a,b,c,d....