korrekte Nummerierung der Plätze 1-3

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.
Antworten
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

korrekte Nummerierung der Plätze 1-3

Beitrag von Dungeonwatcher »

Hi! 8)

Ich kämpfe seit einiger Zeit mit einem Darstellungsproblem im Formel1 Mod. Es betrifft die Statistik, welche nicht so ganz korrekt nummeriert. Aktuell sieht es so aus:

Code: Alles auswählen

Platz   Top Spieler Punkte
  1      User1        72
  2      User2        71
  3      User3        71
  4      User4        69
  5      User5        69
Es müsste aber so aussehen:

Code: Alles auswählen

Platz   Top Spieler Punkte
  1      User1        72
  2      User2        71
         User3        71
  4      User4        69
         User5        69
Das dies durchaus so funktionieren kann, habe ich schon in einem Forum gesehen, nur leider schweigt sich der Admin zu seiner Lösung bisher aus. :roll:

Daher meine Frage an die vielen genialen PHP Profis hier im Forum, wie müsste der folgende Code entsprechend aussehen?

Code: Alles auswählen

//
// Show users toplist
//
else {
$stat_table_title = $lang['formel_user_stats'];

//
// Get all tipps and fill Top10
//
$sql = "SELECT sum(tipp_points) AS total_points, tipp_user FROM " . FORMEL_TIPPS_TABLE . "
        GROUP BY tipp_user
        ORDER BY total_points DESC";
if (!$result = $db->sql_query($sql))
{
      message_die(GENERAL_ERROR, 'Could not query tipps', '', __LINE__, __FILE__, $sql);
}
$first_rank = $phpbb_root_path . "images/formel/goldpokal.gif";
$secound_rank = $phpbb_root_path . "images/formel/silberpokal.gif";
$third_rank = $phpbb_root_path . "images/formel/bronzepokal.gif";
$rank = 0;
while ($row = $db->sql_fetchrow($result)) {
      $rank++;
	if ($rank === 1)
	{
		$rank_img = '<img src="' . $first_rank . '" alt="1. Platz" title="1. Platz" />';
	}
	elseif ($rank === 2)
	{
		$rank_img = '<img src="' . $secound_rank . '" alt="Platz 2" title="2. Platz" />';
	}
	elseif ($rank === 3)
	{
		$rank_img = '<img src="' . $third_rank . '" alt="Platz 3" title="3. Platz" />';
	}
	else
	{
		$rank_img = $rank;
	}
      $tipp_user_row = get_userdata($row['tipp_user']);
      $tipp_username = $tipp_user_row['username'];

	$tipp_useravatar = '';
      if ( $tipp_user_row['user_avatar_type'] && $tipp_user_row['user_allowavatar'] )
      {
		switch( $tipp_user_row['user_avatar_type'] )
		{
			case USER_AVATAR_UPLOAD:
				$tipp_useravatar = ( $board_config['allow_avatar_upload'] ) ? '<img src="' . $board_config['avatar_path'] . '/' . $tipp_user_row['user_avatar'] . '" alt="" border="0" />' : '';
				break;
			case USER_AVATAR_REMOTE:
				$tipp_useravatar = ( $board_config['allow_avatar_remote'] ) ? '<img src="' . $tipp_user_row['user_avatar'] . '" alt="" border="0" />' : '';
				break;
			case USER_AVATAR_GALLERY:
				$tipp_useravatar = ( $board_config['allow_avatar_local'] ) ? '<img src="' . $board_config['avatar_gallery_path'] . '/' . $tipp_user_row['user_avatar'] . '" alt="" border="0" />' : '';
				break;
		}
	}

      $template->assign_block_vars('top_tippers', array(
		'RANK'		=> $rank_img,
		'TIPPER_NAME'	=> $tipp_username,
		'TIPPER_AVATAR'	=> $tipp_useravatar,
		'TIPPER_POINTS'	=> $row['total_points'])
      );
}
$db->sql_freeresult($result);
}
Bye/2
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

Hier mal ein Beispiel: Ersetze dings

Code: Alles auswählen

$rank = 0; 
while ($row = $db->sql_fetchrow($result)) { 
      $rank++; 
durch bums

Code: Alles auswählen

	if($row = $db->sql_fetchrow($result))
	{
		$i = 1;
		do
		{
			$rank = ($last_points != $row['total_points']) ? $i : ' ';
und dann noch

Code: Alles auswählen

} 
$db->sql_freeresult($result); 
durch

Code: Alles auswählen

			$i++;
			$last_points = $row['total_points'];
		}
		while($row = $db->sql_fetchrow($result));
		$db->sql_freeresult($result);
und wenn ich mich nicht verzählt hab, müsste das so stimmen. easy
Zuletzt geändert von easygo am 14.06.2007 12:20, insgesamt 1-mal geändert.
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

Ersetze:

Code: Alles auswählen

$rank = 0;
while ($row = $db->sql_fetchrow($result)) {
      $rank++;
Mit:

Code: Alles auswählen

$rank = $real_rank = 0;
$previous_points = false;
while ($row = $db->sql_fetchrow($result)) {
      $real_rank++;
      if($row['total_points'] != $previous_points)
      {
            $rank = $real_rank;
            $previous_points = $row['total_points'];
      }
(ungetestet)
KB:knigge
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

Beitrag von Dungeonwatcher »

Hi! 8)

Der Tip von @Pyramide funktioniert fast genauso wie gewünscht. Super [ externes Bild ]

Das ganze sieht jetzt so aus:

Code: Alles auswählen

Platz   Top Spieler Punkte
  1      User1        72
  2      User2        71
  2      User3        71
  4      User4        69
  4      User5        69
Wenn du es jetzt noch hinbekommst das es so aus aussieht:

Code: Alles auswählen

Platz   Top Spieler Punkte
  1      User1        72
  2      User2        71
         User3        71
  4      User4        69
         User5        69
Das währe das genialste überhaupt. :)
Zuletzt geändert von Dungeonwatcher am 14.06.2007 12:25, insgesamt 1-mal geändert.
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

So jetzt aber.. (siehe edit)
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

Beitrag von Dungeonwatcher »

Hi! 8)
easygo hat geschrieben:So jetzt aber.. (siehe edit)
Jupp, korrekt. Großes Dankeschön euch beiden. [ externes Bild ]
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

Ok und btw.. die Variante von Pyramide sollte man auf jeden Fall bevorzugen,
wenn die Platzierungen genau so im User Profil erscheinen sollen.

Sprich.. in der usercp_viewprofile.php / easy
Benutzeravatar
Dungeonwatcher
Mitglied
Beiträge: 635
Registriert: 11.07.2004 10:04
Wohnort: Berlin

Beitrag von Dungeonwatcher »

easygo hat geschrieben:Ok und btw.. die Variante von Pyramide sollte man auf jeden Fall bevorzugen, wenn die Platzierungen genau so im User Profil erscheinen sollen.
Ähm, wo du natürlich recht hast. Daran hatte ich nun garnicht gedacht. :roll:
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

Beitrag von easygo »

Kein Grund zur Panik @ Dungeonwatcher

Das Problem betrifft wie gesagt nur Profile bzw. die usercp_viewprofile :/ easy
Benutzeravatar
Dr.Death
Moderator
Moderator
Beiträge: 17401
Registriert: 23.04.2003 08:22
Wohnort: Xanten
Kontaktdaten:

Beitrag von Dr.Death »

~applaus !

Klasse!

Vielen Dank an alle Mitwirkenden und an denjenigen der die Idee dazu hatten.

Ich werde Pyramides Vorschlag in die nächste Version von meinem F1 WebTipp MOD für phpbb3 einbauen.
Antworten

Zurück zu „Coding & Technik“