Seite 1 von 1

korrekte Nummerierung der Plätze 1-3

Verfasst: 14.06.2007 11:34
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

Verfasst: 14.06.2007 12:11
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

Verfasst: 14.06.2007 12:14
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)

Verfasst: 14.06.2007 12:17
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. :)

Verfasst: 14.06.2007 12:20
von easygo
So jetzt aber.. (siehe edit)

Verfasst: 14.06.2007 12:33
von Dungeonwatcher
Hi! 8)
easygo hat geschrieben:So jetzt aber.. (siehe edit)
Jupp, korrekt. Großes Dankeschön euch beiden. [ externes Bild ]

Verfasst: 14.06.2007 12:39
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

Verfasst: 14.06.2007 12:52
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:

Verfasst: 14.06.2007 12:57
von easygo
Kein Grund zur Panik @ Dungeonwatcher

Das Problem betrifft wie gesagt nur Profile bzw. die usercp_viewprofile :/ easy

Verfasst: 14.06.2007 13:40
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.