Pagination im phpBB?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Jason

Pagination im phpBB?

Beitrag 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
Benutzeravatar
Mister_X
Ehemaliges Teammitglied
Beiträge: 7102
Registriert: 24.05.2001 02:00
Wohnort: Augsburg

Beitrag von Mister_X »

ganz unten ist LIMIT erklärt http://www.schattenbaum.net/php/abfrage2.php
Jason

Beitrag 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
Jensemann
Ehemaliges Teammitglied
Beiträge: 2549
Registriert: 25.02.2002 01:00

Beitrag von Jensemann »

Die funktion ruft nen template block auf in dem die seitenzahlen mit links generiert werden.

Mfg
Jens
Jason

Beitrag 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
Jason

Beitrag von Jason »

hmm niemand der mir das a bisserl genauer erklären könnte?

Jason :cry:
Jensemann
Ehemaliges Teammitglied
Beiträge: 2549
Registriert: 25.02.2002 01:00

Beitrag 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
Jason

Beitrag 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..
Jensemann
Ehemaliges Teammitglied
Beiträge: 2549
Registriert: 25.02.2002 01:00

Beitrag 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
Jason

Beitrag 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
Antworten

Zurück zu „Coding & Technik“