Spezielle Sortierung in speziellen Foren

Allgemeiner Support zum phpBB 3 Board und phpBB 3 Modifikationen.
Kein Support für die Download MOD / Extension!!
No support for the Download MOD / Extension!!
Please visit https://phpbb3.oxpus.net for Download MOD / Extension
Antworten
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Spezielle Sortierung in speziellen Foren

Beitrag von Holger »

Hallo,

ich möchte in einigen Foren eine alphabetische Sortierung als Standard haben.
Leider habe ich keinen Mod gefunden, aber dieses Snippet:

Code: Alles auswählen

// Sort topics alphabetically
if ($forum_id == 25)
{
    $sort_by_text = array('t' => $user->lang['TOPIC_TITLE']);
    $sort_by_sql = array('t' => 't.topic_title');
    $sort_dir = 'a';
}
Das soll in viewforum.php eingefügt werden vor:

Code: Alles auswählen

// Limit topics to certain time frame, obtain correct topic count
Also so:

Code: Alles auswählen

// Topic ordering options
$limit_days = array(0 => $user->lang['ALL_TOPICS'], 1 => $user->lang['1_DAY'], 7 => $user->lang['7_DAYS'], 14 => $user->lang['2_WEEKS'], 30 => $user->lang['1_MONTH'], 90 => $user->lang['3_MONTHS'], 180 => $user->lang['6_MONTHS'], 365 => $user->lang['1_YEAR']);

$sort_by_text = array('a' => $user->lang['AUTHOR'], 't' => $user->lang['POST_TIME'], 'r' => $user->lang['REPLIES'], 's' => $user->lang['SUBJECT'], 'v' => $user->lang['VIEWS']);
$sort_by_sql = array('a' => 't.topic_first_poster_name', 't' => 't.topic_last_post_time', 'r' => 't.topic_replies', 's' => 't.topic_title', 'v' => 't.topic_views');

$s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param, $default_sort_days, $default_sort_key, $default_sort_dir);

// Sort topics alphabetically
if ($forum_id == 25)
{
    $sort_by_text = array('t' => $user->lang['TOPIC_TITLE']);
    $sort_by_sql = array('t' => 't.topic_title');
    $sort_dir = 'a';
}

// Limit topics to certain time frame, obtain correct topic count
Es klappt gut, aber leider generiert es einen SQL-Fehler sobald ich die Sortierung im Seitenfuss ändere.

Wie könnte ich anders den Standard für die Sortierung in einzelnen Foren ändern?

Gruss
Holger
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Spezielle Sortierung in speziellen Foren

Beitrag von oxpus »

Wie lautet denn der Fehler?
Vielleicht kann man darüber den Fehler finden...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Spezielle Sortierung in speziellen Foren

Beitrag von Holger »

General Error
SQL ERROR [ mysqli ]

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC LIMIT 127' at line 7 [1064]

SQL

SELECT t.topic_id FROM phpbb3_topics t WHERE t.forum_id = 25 AND t.topic_type IN (0, 1) AND t.topic_approved = 1 ORDER BY t.topic_type DESC, ASC LIMIT 127

BACKTRACE

FILE: [ROOT]/includes/db/mysqli.php
LINE: 182
CALL: dbal->sql_error()

FILE: [ROOT]/includes/db/mysqli.php
LINE: 224
CALL: dbal_mysqli->sql_query()

FILE: [ROOT]/includes/db/dbal.php
LINE: 170
CALL: dbal_mysqli->_sql_query_limit()

FILE: [ROOT]/viewforum.php
LINE: 462
CALL: dbal->sql_query_limit()
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Spezielle Sortierung in speziellen Foren

Beitrag von oxpus »

Kannst du dann mal bitte die SQL-Anweisung posten, die in der viewtopic.php vor Zeile 462 steht?
Dort ist eine Variable eingetragen, die zum besagten Zeitpunkt nicht gesetzt ist, so dass der Fehler angezeigt wird...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Spezielle Sortierung in speziellen Foren

Beitrag von Holger »

:anbet

Code: Alles auswählen

// Grab just the sorted topic ids
$sql = 'SELECT t.topic_id
	FROM ' . TOPICS_TABLE . " t
	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;
$result = $db->sql_query_limit($sql, $sql_limit, $sql_start);

while ($row = $db->sql_fetchrow($result))
{
	$topic_list[] = (int) $row['topic_id'];
}
$db->sql_freeresult($result);
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Spezielle Sortierung in speziellen Foren

Beitrag von oxpus »

Dort ist $sql_sort_order eingetragen, die du nicht in deinem Code definiert. Die ist dann klar nicht gesetzt und führt dann zum besten Fehler.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Spezielle Sortierung in speziellen Foren

Beitrag von Holger »

Sollte das dann so in diesem Stil sein?

Code: Alles auswählen

// Sort topics alphabetically
if ($forum_id == 25)
{
    $sort_by_text = array('t' => $user->lang['TOPIC_TITLE']);
    $sort_by_sql = array('t' => 't.topic_title');
    $sort_dir = 'a';
    $sql_sort_order = 'ASC';
}
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Spezielle Sortierung in speziellen Foren

Beitrag von oxpus »

Schau doch mal in der viewtopic.php nach, was die Variable eigentlich beinhalten soll. Dort wäre doch eigentlich ein weiteres Feld genannt, nach dem sortiert werden soll.
Und genau das willst du ja mit deinem Code ändern.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Spezielle Sortierung in speziellen Foren

Beitrag von Holger »

Hm, sorry, das habe ich nicht verstanden :hh:
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Spezielle Sortierung in speziellen Foren

Beitrag von oxpus »

Die Abfrage verwendet $sql_sort_order für die Sortierung nach irgend einem weiteren Feld neben dem Topic-Typ.
Und genau diese Variable hast du nicht in deinem Code verwendet, bzw. gefüllt.
Daher bleibt mit deiner Sortierung das Feld "leer" und die SQL-Anweisung führt zu Fehlern.

Also:

Code: Alles auswählen

if (is_array($sort_by_sql[$sort_key]))
{
	$sql_sort_order = implode(' ' . $direction . ', ', $sort_by_sql[$sort_key]) . ' ' . $direction;
}
else
{
	$sql_sort_order = $sort_by_sql[$sort_key] . ' ' . $direction;
}
So wird die Variable im Original gefüllt.
Mit deinem Code ist dann also etwas nicht in Ordnung, dass weder $direction oder $sort_by_sql korrekt gefüllt sind.
Somit bleibt $sql_sort_order leer und damit ein Fehler im SQL-Statement.

Code: Alles auswählen

$s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param, $default_sort_days, $default_sort_key, $default_sort_dir);

// Sort topics alphabetically
if ($forum_id == 25)
{
    $sort_by_text = array('t' => $user->lang['TOPIC_TITLE']);
    $sort_by_sql = array('t' => 't.topic_title');
    $sort_dir = 'a';
}
Das hast du so eingetragen.
Dabei ist die Reihenfolge falsch.
Wenn dann so:

Code: Alles auswählen

// Sort topics alphabetically
if ($forum_id == 25)
{
    $sort_by_text = array('t' => $user->lang['TOPIC_TITLE']);
    $sort_by_sql = array('t' => 't.topic_title');
    $sort_dir = 'a';
}

$s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param, $default_sort_days, $default_sort_key, $default_sort_dir);
Denn so werden auch deine Elemente berücksichtigt und nicht mit allen anderen Parametern verwürfelt.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Holger
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Spezielle Sortierung in speziellen Foren

Beitrag von Holger »

Oha, das muss ich mir jetzt mal genau anschauen! Danke!
Real men don’t back up, they learn data recovery. ;-)
http://www.mysqldumper.de
http://www.mysqldumper.se
Antworten