Seite 1 von 3

Pagination im phpBB?

Verfasst: 06.12.2002 22:27
von Jason
Hi,
wie genau funktioniert das mit der pagination() funktion im phpBB also wenn ich z.b.
mit dieser abfrage alle User aus der tabelle phpbb_users auslese:

Code: Alles auswählen

$sql = "SELECT username FROM phpbb_users WHERE user_id";
wie kann ich das dann ab einer bestimmten anzahl auf mehrere Seiten verteilen wie z.b. bei der memberlist?Ich habe mir den Code aus der memberlist schon angesehen aber werde net so schlau daraus :-/ Wäre nett wenn mir das jemand (vieleicht anhand eines einfachen Beispiels ) erklären könnte :)

Grüße Jason

Verfasst: 06.12.2002 23:06
von Mister_X
ganz unten ist LIMIT erklärt http://www.schattenbaum.net/php/abfrage2.php

Verfasst: 06.12.2002 23:20
von Jason
Mir ist schon klar wie das mit LIMIT funzt aber net wie genau das im phpBB abläuft das unten dann die Seitenzahlen angezeigt werden etc.

Jason

Verfasst: 06.12.2002 23:27
von Jensemann
Die funktion ruft nen template block auf in dem die seitenzahlen mit links generiert werden.

Mfg
Jens

Verfasst: 07.12.2002 13:11
von Jason
Jo das ist mir auch klar (denk ich :-? ) aber ich weiss nicht genau was ich bei meinem php script hinzufügen muss damit das angezeigt wird!

Wäre echt nett wenn mir jemand etwas genauer sagen könnte was genau ich in meinem Script hinzufügen muss damit es klappt

Hier mal mein script:

Code: Alles auswählen

<?php

$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

$userdata = session_pagestart($user_ip, PAGE_INDEX, $session_length);
init_userprefs($userdata);

$page_title = $lang['user'];
include($phpbb_root_path . 'includes/page_header.'.$phpEx);

$sql = 'SELECT  username
        FROM " . USERS_TABLE . "
        WHERE user_id
        ORDER BY username
        LIMIT 10';
                if ( !$result = $db->sql_query($sql) )
                {
                        message_die(GENERAL_ERROR, 'Error getting user listing', '', __LINE__, __FILE__, $sql);
                }
                $row = $db->sql_fetchrow($result)

$template->set_filenames(array(
   'body' => 'user.tpl',
   'jumpbox' => 'jumpbox.tpl')
);

$jumpbox = make_jumpbox($forum_id);
$template->assign_vars(array(
   'USERNAME' => $row['username'],
   'L_GO' => $lang['Go'],
   'L_JUMP_TO' => $lang['Jump_to'],
   'L_SELECT_FORUM' => $lang['Select_forum'],

   'S_JUMPBOX_LIST' => $jumpbox,
   'S_JUMPBOX_ACTION' => append_sid('viewforum.$phpEx'))
);
$template->assign_var_from_handle('JUMPBOX', 'jumpbox');


$template->pparse('body');
include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
?>
Bin für jeden tip dankbar!

Grüße Jason

Verfasst: 08.12.2002 01:16
von Jason
hmm niemand der mir das a bisserl genauer erklären könnte?

Jason :cry:

Verfasst: 08.12.2002 01:31
von Jensemann
Na gut, ich kann keinen LFS Fan hängen lassen (ist doch richtig die vermutung?)

Wie gesagt, generate_pagination übergibst du eine art url rohform und dann die anzahl der einträge/datensätze/wasauchimmer pro seite, es erzeugt dann eben die notwendigen aufrufe an die methode assign_block_vars der Objects $template (Instanz der template Klasse). Der notwendige block muß natürlich in min. einem der geladenen templates vorkommen.

Bei weiteren fragen hätte ich aber gernen nen konkreten anwendungsfall mit den nötigen daten, will heissen: php code, url zu dieser seite, link zum template.

Mfg
Jens

Verfasst: 09.12.2002 18:47
von Jason
jensemann hat geschrieben:Na gut, ich kann keinen LFS Fan hängen lassen (ist doch richtig die vermutung?)
Jo deine vermutung ist richtig :)

Ich denke soweit habe ich das mit der pagination verstanden,ich habe jetzt mal versucht das ganze in mein script (Ne zusammengebastelte Buddyliste) einzubauen ( Hab mich soweit wie möglich an der memberlist orientiert) aber nu bekomme ich diese fehlermeldung:

Code: Alles auswählen

Error getting buddy listing

DEBUG MODE

SQL Error : 1064 You have an error in your SQL syntax near '$start, 50' at line 8

SELECT b.buddy_name, b.buddy_id, b.user_id, b.added, u.user_msnm, u.user_yim, u.user_aim, u.user_email, u.user_viewemail, u.user_icq, u.user_website, IF(s.session_user_id <> "","true","false") AS is_online, count(*) AS total FROM phpbb_buddylist b, phpbb_users u LEFT OUTER JOIN phpbb_sessions s ON b.buddy_id = s.session_user_id AND s.session_time >= 1039376827 WHERE b.buddy_id = u.user_id AND b.user_id = 2 ORDER BY b.added LIMIT $start, 50

Line : 227
File : /is/htdocs/board/buddylist.php
Hier mal das gesamte script & template: php: buddylist.txt

template: buddylist_tpl.txt

Ich denke mal das ich irgendwas vergessen habe (oder falsch eingebaut habe) aber ich habe keinen schimmer was :-?

Gruß Jason

BTW: Übrigends das hier: http://www.phpbb.de/viewtopic.php?t=19079 war ich,ich konnte mich gestern net einloggen irgendwie bekomme ich seit vorgestern Abend dauernd "Could not connect to Database" beim Login hmm..

Verfasst: 09.12.2002 18:58
von Jensemann

Code: Alles auswählen

$sql = 'SELECT  b.buddy_name, b.buddy_id, b.user_id, b.added,
                                u.user_msnm, u.user_yim, u.user_aim, u.user_email, u.user_viewemail, u.user_icq, u.user_website,
                        IF(s.session_user_id <> "","true","false") AS is_online, count(*) AS total
                        FROM ' . BUDDYLIST_TABLE . ' b, ' . USERS_TABLE . ' u
                        LEFT OUTER JOIN '.SESSIONS_TABLE.' s ON b.buddy_id = s.session_user_id AND s.session_time >= '.( time() - 300 ) . '
                        WHERE b.buddy_id = u.user_id AND b.user_id = ' . $user_id . '
                        ORDER BY b.added
                        LIMIT $start, ' . $board_config['topics_per_page'];
muß in doppelte anführungszeichen, da sonst das $start nicht als variable erkant wird.

Solche meldungen sagen einfach nur aus das dein sql query fehlerhaft ist.

Mfg
Jens

Verfasst: 09.12.2002 20:07
von Jason
Ich nehm mal an du meinst so:

Code: Alles auswählen

$sql = 'SELECT  b.buddy_name, b.buddy_id, b.user_id, b.added,
                                u.user_msnm, u.user_yim, u.user_aim, u.user_email, u.user_viewemail, u.user_icq, u.user_website,
                        IF(s.session_user_id <> "","true","false") AS is_online, count(*) AS total
                        FROM ' . BUDDYLIST_TABLE . ' b, ' . USERS_TABLE . ' u
                        LEFT OUTER JOIN '.SESSIONS_TABLE.' s ON b.buddy_id = s.session_user_id AND s.session_time >= '.( time() - 300 ) . '
                        WHERE b.buddy_id = u.user_id AND b.user_id = ' . $user_id . '
                        ORDER BY b.added
                        LIMIT ' . $start . ', ' . $board_config['topics_per_page'];
Soweit so gut nur bekomme ich jetzt eine andere fehlermeldung:
SQL Error : 1140 Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause

SELECT b.buddy_name, b.buddy_id, b.user_id, b.added, u.user_msnm, u.user_yim, u.user_aim, u.user_email, u.user_viewemail, u.user_icq, u.user_website, IF(s.session_user_id <> "","true","false") AS is_online, count(*) AS total FROM phpbb_buddylist b, phpbb_users u LEFT OUTER JOIN phpbb_sessions s ON b.buddy_id = s.session_user_id AND s.session_time >= 1039460483 WHERE b.buddy_id = u.user_id AND b.user_id = 2 ORDER BY b.added LIMIT 0, 50

Line : 225
File : /is/htdocs/board/buddylist.php
Grüße Jason