Annual Stars Schaltjahre

Du hast Probleme beim Einbau oder bei der Benutzung eines Mods? In diesem Forum bist du richtig.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Malte

Annual Stars Schaltjahre

Beitrag von Malte »

Hallo ihr Guten,

ich habe vor langem den Annual Stars MOD installiert und nun fällt mir eine Sache auf:
Ein Mitglied, welches morgen, genau ein Jahr registriert ist, hat bereits heute seinen Stern erhalten...
Das bösartige Wort: Schaltjahre!

Der Befehl zur Berechnung eines Jahres-Sternes ist folgender:

Code: Alles auswählen

// annual stars
	$reg_stars = '';
	if ($reg_years = (int) ((time() - (int) $data['user_regdate']) / 31536000))
	{
		$reg_stars = str_repeat($user->img('icon_annual_star', 'YEARS_OF_MEMBERSHIP'), $reg_years);
	}
31536000 Sekunden sind leider 365 Tage und damit werden Schaltjahre missachtet.

Kann mir jemand eine logische Lösung sagen, die Schaltjahre mit berücksichtigt? Etwa in der Art, dass er nicht 31536000 Sekunden, sondern 1 Jahre berechnet oder der gleichen.

Ich freue mich auf eure Antworten, vielleicht gibts ja jemanden, der das Problem beheben kann. Ich habe dazu bereits gegooglet, es gab viele Anfragen mit dem Anliegen, aber die Sparte der Entwickler hat bisher keine Lösung offenbart. :roll:

Gruß
Malte :D
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Annual Stars Schaltjahre

Beitrag von Miriam »

Probiere es so:

Code: Alles auswählen

// annual stars
    $reg_stars = '';
    if (date("n", time()) < 3)
    {
        if ($reg_years = (int) ((time() - (int) $data['user_regdate']) / 31536000))
        {
            $reg_stars = str_repeat($user->img('icon_annual_star', 'YEARS_OF_MEMBERSHIP'), $reg_years);
        }
    }
    else
    {
        if ($reg_years = (int) (((time() - date("L") * 86400 -(int) $data['user_regdate']))/ 31536000))
        {
            $reg_stars = str_repeat($user->img('icon_annual_star', 'YEARS_OF_MEMBERSHIP'), $reg_years);
        }
    } 
// habe es nicht getestet, aber sollte so passen. Check das mal.
Zuletzt geändert von Miriam am 26.07.2012 20:08, insgesamt 1-mal geändert.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Malte

Re: Annual Stars Schaltjahre

Beitrag von Malte »

Danke für deine Schnelle Antwort Miriam. :D Leider bin ich (noch) nur html und CSS mächtig und bin noch am lernen von php.

Deshalb kann ich
Miriam hat geschrieben:Da mußt Du dann nur noch die Besonderheiten für Januar und Februar einbauen. :)
nicht selbst umsetzen. Ich wüsste jetzt auch nicht direkt, was ich mit dem Januar anfangen soll? Die Besonderheit ist doch nur der Februar?

Gruß
Malte :D
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Annual Stars Schaltjahre

Beitrag von Miriam »

Schau mal oben.. habe es noch etwas angepasst..

Besonderheit Januar und Februar des Schaltjahres: Es gibt keinen zusätzlichen Tag, der wirkt erst ab März des Schaltjahres und für Januar / Februar des darauf folgenden Jahres.
Happy programming. :wink:
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Malte

Re: Annual Stars Schaltjahre

Beitrag von Malte »

Ok, das mit dem Januar war mir nicht ganz klar. Vielen Dank für deine Hilfe, ich werde das ganze gleich mal testen, mal wieder besten Dank für deinen zuverlässigen Support. :D
Benutzeravatar
darkonia
Mitglied
Beiträge: 900
Registriert: 15.11.2008 15:24
Wohnort: München
Kontaktdaten:

Re: Annual Stars Schaltjahre

Beitrag von darkonia »

top lösung miriam!
Community bedeutet Gleichgesinnte finden - MMOG-Heaven ist Deine Community! Von Spielern für Spieler bietet Dir dieses Portal genau das, was ein Spieler braucht. Bleibe ständig informiert, finde die neuesten MMORPGs, oder suche die frischesten News aus der Welt des Online Gamings - dieses und vieles mehr erwartet Dich auf MMOG-Heaven
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Annual Stars Schaltjahre

Beitrag von Miriam »

Noch nicht ganz. 8)
Es fehlt ja noch die Anpassung für Jan / Feb des darauffolgenden Jahres.

Code: Alles auswählen

//annual stars
    $reg_stars = '';
    $lastyear = date("L", time() - 7776000);
    if (date("n", time()) < 3)
    {
        if ($reg_years = (int) ((time() - $lastyear * 86400 - (int) $data['user_regdate']) / 31536000))
        {
            $reg_stars = str_repeat($user->img('icon_annual_star', 'YEARS_OF_MEMBERSHIP'), $reg_years);
        }
    }
    else
    {
        if ($reg_years = (int) ((time() - date("L") * 86400 -(int) $data['user_regdate'])/ 31536000))
        {
            $reg_stars = str_repeat($user->img('icon_annual_star', 'YEARS_OF_MEMBERSHIP'), $reg_years);
        }
    }
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Malte

Re: Annual Stars Schaltjahre

Beitrag von Malte »

Die Anpassung habe ich vorgenommen. :D
3 Dinge hätte ich aber noch:
1. Die Lösung funktioniert perfekt, der Stern wird nun erst brav nach einem Jahr angezeigt. :D
2. Wenn man über den Stern herüber fährt, wird nun aber statt "1 Jahr Mitgliedschaft", "%d Jahre Mitgliedschaft" angezeigt.
3. Die MOD verlangt 2 Anpassungen, fiel mir gerade auf. Die, die nun funktioniert, ist die für die memberlist. Viewtopic verlangt leider auch noch eine Anpassung. Der Text bei beiden Dateien ist sehr verschieden, weswegen man die erste nicht auch für Viewtopic nutzen kann.

Diese hier ist die für die Beitragsansicht:

Code: Alles auswählen

// annual stars
			$user_cache[$poster_id]['reg_stars'] = '';
			if ($reg_years = (int) ((time() - (int) $row['user_regdate']) / 31536000))
			{
				$reg_output = sprintf($user->lang['YEAR_OF_MEMBERSHIP'], $reg_years);
				if($reg_years > 1)
				{
					$reg_output = sprintf($user->lang['YEARS_OF_MEMBERSHIP'], $reg_years);
				}
				$user_cache[$poster_id]['reg_stars'] = str_repeat($user->img('icon_annual_star', $reg_output), $reg_years);
			}
Gruß
Malte :D
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: Annual Stars Schaltjahre

Beitrag von Miriam »

1. Die Lösung funktioniert perfekt, der Stern wird nun erst brav nach einem Jahr angezeigt. :D
Das ist schön
2. Wenn man über den Stern herüber fährt, wird nun aber statt "1 Jahr Mitgliedschaft", "%d Jahre Mitgliedschaft" angezeigt.
Was soll ich sagen? Der Code, den Du gepostet hast und der, der in der memberlist.php benutzt wird haben nur bedingt etwas miteinander zu tun.
Dein Code (von oben):
  • Code: Alles auswählen

        // annual stars
        $reg_stars = '';
        if ($reg_years = (int) ((time() - (int) $data['user_regdate']) / 31536000))
        {
          $reg_stars = str_repeat($user->img('icon_annual_star', 'YEARS_OF_MEMBERSHIP'), $reg_years);
        }
Memberlist.php Code:
  • Code: Alles auswählen

        // annual stars
        $reg_stars = '';
        if ($reg_years = (int) ((time() - (int) $data['user_regdate']) / 31536000))
        {
            $reg_output = sprintf($user->lang['YEAR_OF_MEMBERSHIP'], $reg_years);
            if($reg_years > 1)
            {
                $reg_output = sprintf($user->lang['YEARS_OF_MEMBERSHIP'], $reg_years);
            }
            $reg_stars = str_repeat($user->img('icon_annual_star', $reg_output), $reg_years);
        }
Die Sprachvariablenzuordnung für den Platzhalter %d passiert hier:
  • Code: Alles auswählen

    $reg_output = sprintf($user->lang['YEARS_OF_MEMBERSHIP'], $reg_years);
Und nun nochmal für die memberlist.php (diesmal mit Sprachvariablenanpassung):
  • Code: Alles auswählen

    //annual stars
        $reg_stars = '';
        $leapyear = (date("n", time()) < 3) ? date("L", time() - 7776000) : date("L", time());
        $reg_years = (int) ((time() - $leapyear * 86400 - (int) $data['user_regdate']) / 31536000);
        $reg_output = ($reg_years > 1) ? sprintf($user->lang['YEARS_OF_MEMBERSHIP'], $reg_years) : sprintf($user->lang['YEAR_OF_MEMBERSHIP'], $reg_years);
        $reg_stars = str_repeat($user->img('icon_annual_star', $reg_output), $reg_years);
3. Die MOD verlangt 2 Anpassungen, fiel mir gerade auf. Die, die nun funktioniert, ist die für die memberlist. Viewtopic verlangt leider auch noch eine Anpassung. Der Text bei beiden Dateien ist sehr verschieden, weswegen man die erste nicht auch für Viewtopic nutzen kann.
Ist doch nicht so schlimm: Die prinizipielle Vorgehensweise hast Du ja nun. Passe das ein bißchen an und fertig ist die Laube... wie man so sagt.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Malte

Re: Annual Stars Schaltjahre

Beitrag von Malte »

Hallo Miriam,

nach kurzer Abstinenz melde ich mal wieder zurück.
1. Ich darf erfreulich berichten, dass der neue Code für die Memberlist ein Erfolg ist und seinen soll erfüllt haben müsste. :D
Einen großen Dank an dich, für diese tolle Arbeit.

2.
Ist doch nicht so schlimm: Die prinizipielle Vorgehensweise hast Du ja nun. Passe das ein bißchen an und fertig ist die Laube... wie man so sagt.
Entschuldige, dass ich nochmal nach Hilfe schreien muss. In den Jahren meiner Webentwicklung habe ich mich komplett auf HTML und CSS spezialisiert und habe keinen blassen Schimmer von php, abgesehen von den üblichen Grundkenntnissen, die man für ein phpBB-Forum braucht natürlich.
Deshalb frage ich hier ab und zu mal nach und meine Fragen, die sich leider ein wenig gehäuft haben, wurden bisher meist freundlichst beantwortet. :D
Ich habe mich nun schon ein wenig mit der Anpassung des Codes beschäftigt, aber bei jeder Anpassung kamen minimal 5 Debug Error bei raus. :lol:
Währst du so freundlich, mir bei diesem Schritt auch nochmal unter die Arme greifen zu können? Ich bin nun dabei, php zu erlernen, aber aktuell reichen meine Kenntnisse nicht dafür aus. :oops:

Danke im Voraus.

Gruß
Malte :D
Antworten

Zurück zu „[3.0.x] Mod Support“