Spezielle Sortierung in speziellen Foren

Allgemeiner Support zum phpBB 3 Board und phpBB 3 Modifikationen.
Kein Support für die Download MOD!!
Dafür ist das eigens dafür eingerichtete Entwicklerforum auf http://phpbb3.oxpus.net da oder das Forum für die Version für das phpBB 2!!!
Antworten
Holger
User
User
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Spezielle Sortierung in speziellen Foren

Beitrag von Holger » Fr 17.Feb, 2012 08:41

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
Administrator
Beiträge: 29106
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Spezielle Sortierung in speziellen Foren

Beitrag von oxpus » Fr 17.Feb, 2012 09:08

Wie lautet denn der Fehler?
Vielleicht kann man darüber den Fehler finden...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per ICQ, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per ICQ, Email or PM. Each unasked message will be ignored!

Holger
User
User
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Spezielle Sortierung in speziellen Foren

Beitrag von Holger » Fr 17.Feb, 2012 09:23

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
Administrator
Beiträge: 29106
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Spezielle Sortierung in speziellen Foren

Beitrag von oxpus » Fr 17.Feb, 2012 18:48

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 ICQ, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per ICQ, Email or PM. Each unasked message will be ignored!

Holger
User
User
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Spezielle Sortierung in speziellen Foren

Beitrag von Holger » Mo 20.Feb, 2012 08:50

: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
Administrator
Beiträge: 29106
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Spezielle Sortierung in speziellen Foren

Beitrag von oxpus » Mo 20.Feb, 2012 12:24

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 ICQ, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per ICQ, Email or PM. Each unasked message will be ignored!

Holger
User
User
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Spezielle Sortierung in speziellen Foren

Beitrag von Holger » Mo 20.Feb, 2012 13:29

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
Administrator
Beiträge: 29106
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Spezielle Sortierung in speziellen Foren

Beitrag von oxpus » Mo 20.Feb, 2012 13:51

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 ICQ, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per ICQ, Email or PM. Each unasked message will be ignored!

Holger
User
User
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Spezielle Sortierung in speziellen Foren

Beitrag von Holger » Mo 20.Feb, 2012 15:18

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
Administrator
Beiträge: 29106
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: Spezielle Sortierung in speziellen Foren

Beitrag von oxpus » Mo 20.Feb, 2012 17:07

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 ICQ, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per ICQ, Email or PM. Each unasked message will be ignored!

Holger
User
User
Beiträge: 2253
Registriert: Mi 17.Mär, 2004 18:09

Re: Spezielle Sortierung in speziellen Foren

Beitrag von Holger » Di 21.Feb, 2012 08:48

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