I.Curtis: Datumsabhängige URL veränderung

Hey,
da ich im Internet dies bezüglich nichts konkretes gefunden habe und mein wissen über javascript gleich gegen Null geht hier meine Frage:

Ich bin derzeit eine Website am Aufbauen. Eine tolle Idee war es einen Tip des Monats zu implementieren... so weit so gut..aber jeden Monat die Verlinkung auf vier unterschiedlichen Seiten erneuern... eher nicht...

An was ich gedacht habe, war ein Javascript, das die URL teilweise abändert, und zwar mit dem Monat und dem Angegebenen Jahr (das aktuelle versteht sich).
Ich würde dann in dem Fall im voraus Seiten mit z.B dem Namen 0113.html also Januar 2013 anlegen und durch das Javascript würde er jeweils die richtige Verlinkung für den jetzigen Monat finden.
Ein Buttonklickereignis sollte dann diesen Vorgang auslösen
Könntet ihr mir vielleicht weiterhelfen? Ich schätze mal das sind nicht mehr als 10 Zeilen Programmtext.
Das falls Java ausgeschaltet ist, das bei meinen Kunden nicht funktioniert ist mir bewusst. Meine Frage eher was passiert wenn Kunden ohne jave auf den Button klicken?
Mit freundlichen Grüßen I.Curtis

  1. Hey,

    Hey

    An was ich gedacht habe, war ein Javascript, das die URL teilweise abändert, und zwar mit dem Monat und dem Angegebenen Jahr (das aktuelle versteht sich).
    Ich würde dann in dem Fall im voraus Seiten mit z.B dem Namen 0113.html also Januar 2013 anlegen und durch das Javascript würde er jeweils die richtige Verlinkung für den jetzigen Monat finden.

    Das geht sicher mit javascript, aber wegen deiner bedenken wegen besuchern ohne JS...
    Ich für meinen teil würde das serverseitig lösen. Kannst du keine serverseitigen sprachen benutzen?

    Ein Buttonklickereignis sollte dann diesen Vorgang auslösen
    Könntet ihr mir vielleicht weiterhelfen? Ich schätze mal das sind nicht mehr als 10 Zeilen Programmtext.
    Das falls Java ausgeschaltet ist, das bei meinen Kunden nicht funktioniert ist mir bewusst. Meine Frage eher was passiert wenn Kunden ohne jave auf den Button klicken?

    Wenn du es nur mit JavaSCRIPT machst, passiert exakt gar nichts wenn der benutzer auf den button klickt.

    Mfg entropie

    --
    Whenever people agree with me I always feel I must be wrong.
      -- Oscar Wilde
    1. Du Meinst per PHP?
      Also ich würde in kauf nehmen, das einige wenige nicht auf diese Seite kommen...Danke für deine Antwort:)

      1. Du Meinst per PHP?

        Ja, zb. Das ist sehr einfach. Unter der adresse /tipdesmonats brauchst du nur einen kleinen redirect. Du besorgst dir mittels PHP das aktuelle jahr und den monat, und leitest dann weiter. Das sind 2 zeilen code, und du schliesst auch leute ohne JS nicht aus.

        Vielleicht ginge sowas auch mit .htaccess, weiss ich aber gerade nicht.

        Mfg entropie

        --
        Whenever people agree with me I always feel I must be wrong.
          -- Oscar Wilde
        1. Ja, zb. Das ist sehr einfach. Unter der adresse /tipdesmonats brauchst du nur einen kleinen redirect. Du besorgst dir mittels PHP das aktuelle jahr und den monat, und leitest dann weiter. Das sind 2 zeilen code, und du schliesst auch leute ohne JS nicht aus.
          Mfg entropie

          Ist das auch mit PHP einzubinden, wenn man generell seine Website nur mit HTML JAVASCRIPT und CSS aufgebaut habe?
          in PHP kenn ich mich genausowenig aus...
          MfG I.Curtis

          1. Ja, zb. Das ist sehr einfach. Unter der adresse /tipdesmonats brauchst du nur einen kleinen redirect. Du besorgst dir mittels PHP das aktuelle jahr und den monat, und leitest dann weiter. Das sind 2 zeilen code, und du schliesst auch leute ohne JS nicht aus.
            Mfg entropie

            Ist das auch mit PHP einzubinden, wenn man generell seine Website nur mit HTML JAVASCRIPT und CSS aufgebaut habe?
            in PHP kenn ich mich genausowenig aus...

            Das kann ich dir nicht beantworten. Normalerweise kann fast jeder webserver php. Ob deiner das kann weiss ich nicht :)

            Mfg entropie

            --
            Whenever people agree with me I always feel I must be wrong.
              -- Oscar Wilde
            1. lege eine datei an, mit folgendem inhalt:

              <?php
              phpinfo();
              ?>

              Abspeichern unter info.php, hochladen ins document root und via browser aufrufen. Wenn du eine nette tabelle bekommst geht PHP. Datei danach wieder vom server löschen (!!!).

              Whenever people agree with me I always feel I must be wrong.
                -- Oscar Wilde

              1. Ich glaube meine Frage ist so grundlegend und irreführend..das ich das garnicht meine...
                Nochmal:D ich habe meine Website mit HTML JAVA CSS JQuery aufgebaut,
                Kann ich jetzt nur diese Buttonverlinkung, bzw. das Script dazu, mit PHP Schreiben damit es seinen Zweck erfüllt?

                1. Kann ich jetzt nur diese Buttonverlinkung, bzw. das Script dazu, mit PHP Schreiben damit es seinen Zweck erfüllt?

                  Prinzipiell: Ja! Das Script würde den Aufruf der Seite tipp_des_monats.php entgegennehmen und entsprechend des Datums entweder eine passende Seite zusammenschreiben (Vorteil: falls entsprechende Tipps nicht vorliegen könnte es eine alternative Standardseite "Sorry, kein Tipp in diesem Monat" leicht bereit stellen) oder auf eine fertige Seite umleiten.

                  1. Wie Aufwändig wäre das Schreiben eines solchen Scripts?
                    LG I.Curtis

                    1. Wie Aufwändig wäre das Schreiben eines solchen Scripts?
                      LG I.Curtis

                      Wenn Du uns sagen kannst, ob das Skript von entropie auf Deinem Server funktionierte, dann können wir Dir sagen, ob es ein "Vierzeiler" wird oder ob weiteres notwendig ist. Es ist in jedem Fall sogar einfacher und man kann es besser gegen Fehler absichern machen als mit Javascript.

                      Allerdings kann die Funktion "phpinfo" vom Betreiber des Servers (Deinem Hoster) deaktiviert sein. Wir müssen aber wissen, ob PHP auf dem Server überhaupt läuft, denn wir wollen keine ungelegten Eier suchen.

                      Also lege JETZT das Skript an:

                      <?php
                      echo "<html><h1>PHP funktioniert, wenn nur diese Überschrift lesbar ist.</h1></html>";
                      ?>

                      speichere unter test.php im Wurzelordner Deines Webauftritts und teile uns vollständig mit, was Du bei einem Aufruf von http://[DeineDomain]/test.php gesehen hast.

                      wenn Du schon diesen Schritt nicht gehst erübrigt sich jeder weitere Versuch Dir zu helfen.

                      Jörg Reinholz

                      1. Jörg Reinholz

                        versuch ich Sofort
                        Nur Falls das nicht klappen sollte habe ich doch tatzechlich hier noch was aus dem Netzt kramen können das möglicher weise funktioniert...allerdings arbeitet es mit JAVASCRIPT
                        JAVASCRIPT
                        LG I.Curtis

                      2. Jörg Reinholz
                        Test hat Funktioniert:
                        "PHP funktioniert, wenn nur diese Überschrift lesbar ist."

                        Was wäre der nächste Schritt, bei dem ich behilflich sein kann.
                        LG I.Curtis

                        1. @@I.Curtis:

                          nuqneH

                          Was wäre der nächste Schritt, bei dem ich behilflich sein kann.

                          Dir ansehen, wie man in PHP

                          1. den aktuellen Zeitpunkt ermittelt

                          2. daraus einen formatierten String wie "0113" bekommt

                          3. wie man ".html" anhängt (falls das nötig sein sollte; bei Apaches MultiViews ist es das nicht)

                          4. wie man weiterleitet, ggfs. mit HTTP-Statuscode (302 Moved Temporarily ist Default \o/)

                          Qapla'

                          --
                          „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                          1. @@I.Curtis:

                            1. den aktuellen Zeitpunkt ermittelt

                            $y=date('Y-m'); # liefert für März 2013 etwas wie '2013-03', das verwenden wir aber nicht so.

                            1. daraus einen formatierten String wie "0113" bekommt

                            Ich würde das etwas anders machen. Und zwar prüfen, ob die Datei existiert und lesbar ist und ggf. eine frühere Version ausliefern.

                            Zunächst die Konfiguration. Wenn der Variablenname geändert wird muss dieses beim Aufruf der Funktion getTDMFilename($tdtPath) mit geändert werden:

                            $tdmPath="/tip_des_monats/"; #relativer Pfad ab Document Root Verzeichnis auf dem Server!

                            1. wie man ".html" anhängt (falls das nötig sein sollte; bei Apaches MultiViews ist es das nicht)

                            implizit erledigt

                            1. wie man weiterleitet, ggfs. mit HTTP-Statuscode (302 Moved Temporarily ist Default \o/)

                            Wir brauchen das Protokoll:
                            $_SERVER['SERVER_PROTOCOL'] liefert sowas wie 'HTTP/1.1' oder HTTPS/1.1, das nutzen wir mit strpos aus, dass ein false zurück liefert, wenn der Suchstring nicht im Haystack enthalten ist:

                            if(false !== strpos('HTTPS', $_SERVER['SERVER_PROTOCOL'])) {  
                                $p='HTTPS://';  
                            } else {  
                               $p='HTTP://';  
                            }
                            

                            Es folgt der
                            Das ist der Zusammenbau der neuen URL aus
                            dem Protokoll: HTTP://
                            dem Servername 'www.example.com'
                            dem Dateiname '/foo/2013-03.html' (wird in der eigenen Funktion getTdmUrl($tdtPath) ermittelt.Und der Anweisung als 'Begründung' für die Umleitung ein '307 Temporary Redirect' zu liefern.
                            '302 Found' kann auch sinnvoll sein. Das ist diskutierbar.

                            header('Location: '.$p.$_SERVER['HTTP_HOST'].getTdmUrl($tdmPath), TRUE, 307);

                            Fertig! Das ist natürlich schon eine Luxusversion, ohne die Nachsuche nach den Vormonaten für den Fall, dass noch keine Datei angelegt wurde gänge es sehr viel kürzer. Vorteile: Suchmaschinen können sich die alte Versionen der Tipps unter dem "richtigen" URL merken. Die alten Tipps kannst Du behalten und verlinken.

                            Ich würde die Dateien tatsächlich in einem Unterordner /Tipp_des_Monats/ speichern und unten stehendes Beispiel darin als index.php ablegen, die anderen nach folgendem Schema:

                            2013-03.html für März 2013.
                            2013-12.html für Dezember 2013

                            Hier die angesprochene Funktion, kommentiert:

                            function getTdmUrl($tdmPath) {

                            # wie oben besprochen: das Protokoll

                            if(false !== strpos('HTTPS', $_SERVER['SERVER_PROTOCOL'])) {
                                   $p='HTTPS://';
                                } else {
                                   $p='HTTP://';
                                }

                            # Ermitteln von Monat (ohne führende Null) und Jahr

                            $m=date('n');
                                $y=date('Y');

                            # Da wir oben den relativen Pfad angeben müssen wir den vollständigen Pfad haben:

                            $DateiSystemPfad=$_SERVER['DOCUMENT_ROOT'].$tdmPath;

                            # Wir wollen nachschauen, ob es die Datei '2013-03.html' gibt. Falls nicht:
                                # Vormonat - maximal zurück bis zum Januar 2013.

                            while ($y > 2012) {

                            # sprintf('%02d',$m) liefert den zweistelligen Monat (2013-03) statt 2013-3
                                    $f=$DateiSystemPfad.$y.'-'.sprintf('%02d',$m).'.html';
                                    # Nur für das Testen
                                    # print "teste $f\n";
                                    if ( is_file($f) && is_readable($f) ) {
                                        #Wenn die Datei gefunden wird und lesbar ist liefern wir
                                        # Protokoll, Servername und Ressource zurück
                                        return $p.$_SERVER['HTTP_HOST'].$tdmPath.$y.'-'.sprintf('%02d',$m).'.html';

                            }  else {
                                        #sonst: einen Monat zurück
                                        $m=$m-1;

                            # eventuell ein Jahr zurück und Monat auf 12:
                                        if (0==$m) {
                                           $m=12;
                                           $y=$y-1;
                                        }
                                    #Hier geht es zur Prüfung
                                    #aber nur wenn das Jahr noch > 2012 (siehe while($y > 2012)) ist
                                    }

                            }
                                # Falls bis hier gar nichts gefunden wurde:
                                return $p.$_SERVER['HTTP_HOST'].$tdmPath.'no_tip.html';
                            }

                            Und alles zusammen mit Tests, zu speichern als '/Tipp_des_Monats/index.php'
                            Aufruf mit http://www.example.com/Tipp_des_Monats/
                            (die index.php ist meist als Verzeichnis-Index konfiguriert)

                            <?php  
                              
                            # Konfiguration:  
                            $tdmPath='/Tipp_des_Monats/';  
                            error_reporting(E_ALL);  
                              
                            #Um lokal am Prompt zu testen ein Raute (#) vor den Slash in der Folgezeile setzen, sieht dann so aus: #/*  
                            /*  
                            $_SERVER['SERVER_PROTOCOL']='HTTP/1.1';  
                            $_SERVER['HTTP_HOST']='www.example.com';  
                            $_SERVER['DOCUMENT_ROOT']='/var/www';  
                              
                            print 'Location: '.getTdmUrl($tdmPath)."\n";  
                            exit;  
                            #*/  
                              
                            #Um auf einem Server zu testen ein Raute (#) vor den Slash in der Folgezeile setzen  
                            /*  
                            print 'Location: '.getTdmUrl($tdmPath);  
                            exit;  
                            #*/  
                              
                            header('Location: '. getTdmUrl($tdmPath), TRUE, 307);  
                              
                            function getTdmUrl($tdmPath) {  
                                if(false !== strpos('HTTPS', $_SERVER['SERVER_PROTOCOL'])) {  
                                   $p='HTTPS://';  
                                } else {  
                                   $p='HTTP://';  
                                }  
                                $m=date('n');  
                                $y=date('Y');  
                                $DateiSystemPfad=$_SERVER['DOCUMENT_ROOT'].$tdmPath;  
                                while ($y>2012) {  
                                    $f=$DateiSystemPfad.$y.'-'.sprintf('%02d',$m).'.html';  
                                    #print "teste $f\n";  
                                    if ( is_file($f) && is_readable($f) ) {  
                                        return $p.$_SERVER['HTTP_HOST'].$tdmPath.$y.'-'.sprintf('%02d',$m).'.html';  
                                    }  else {  
                                        $m=$m-1;  
                                        if (0==$m) {  
                                           $m=12;  
                                           $y=$y-1;  
                                        }  
                                    }  
                                }  
                                return $p.$_SERVER['HTTP_HOST'].$tdmPath.'no_tipp.html';  
                            }  
                            ?>  
                              
                            
                            

                            Dieser Code ist getestet.

                            Die Datei 'no_tipp.html' sollte natürlich mit in dem Verzeichnis liegen, in dem die Tipps dann angelegt werden.

                            Nächste Ausbaustufe:

                            Dem Admin oder "Webmaster" ein Mail senden, wenn der Tipp des Monats nicht gefunden wurde... Das müsste einmalig nach dem } else {  und vor dem $m=$m-1; geschehen. Tipp dazu:

                            Checken, ob eine Datei 'warnung_gesendet' gefunden wurde,
                              wenn nicht: Datei anlegen mit Funktion touch()
                              Mails senden  mit Funktion mail()
                              wenn gefunden: kein mail senden und natürlich auch keine Datei.

                            Der Admin oder "Webmaster" muss dann natürlich wissen, dass er die Datei 'warnung_gesendet' löschen muss, wenn er den Tipp des Monats erstellt hat. Das kann man aber mit in das Mail schreiben...

                            Jörg Reinholz

                            1. @Jörg Reinholz

                              Wow! Hab vielen Dank!
                              ich werde in den Kommenden zwei Tagen dies einmal einbinden. Die zusätzliche Konfiguration mit der E-mail wird nicht nötig sein....dafür wird die Seite zu gut gepflegt.

                              Jetzt beim schnellen lesen habe ich noch nicht jeder Einzelheit verstanden, und falls ich noch Fragen zur Implementation habe würde ich gerne nochmal auf dich zurückkommen!
                              Allerdings würde ich mich auch gerne für deine Mühen erkentlich zeigen.

                              Fals dies in deinem Interesse ist, meld dich doch kurz einmal unter meine E-Mail adresse ivocurtius@live.de

                              Mit freundlichen Grüßen I.Curtis

                              1. @Jörg Reinholz

                                @I.Curtis

                                Sehr geehrter Herr Curtis,

                                leider ist die von Ihnen angegebene Mailadresse scheinbar falsch geschrieben.

                                Selbstverständlich würde ich mich sehr freuen, wenn Sie sich an mich
                                wenden - nicht nur wenn Sie Probleme damit haben, meine Lösung zu
                                implementieren.

                                Meine Maildresse finden Sie auf meiner Webseite, oder auch ein Kontaktformular.

                                Mit freundlichen Grüßen

                                Jörg Reinholz
                                fastix WebDesign & Consult
                                Hafenstr. 67
                                34125 Kassel

                                Tel: +49 (0) 561 317 22 77

                                http://www.fastix.org

                                1. @Jörg Reinholz
                                  Die nächsten zwei Tage ist gut, habe ersteinmal alle anderen Wichtigen Funktionen der Seite implementiert und schreibe jetzt ersteinmal mein Abi.

                                  Danach komme ich auf sie zurück.
                                  MfG I.Curtis

  2. Hello,

    grundsätzlich ist ja gegen JavaScript nichts einzuwenden, aber bedenke das Verhalten von Suchmaschinen und manchen Benutzern. Die ignorieren JaveScript einfach.

    Es gilt ja vielleicht auch bei Dir die Regel: never delete an activated url..., es sei denn, der dargestellte Inhalt soll tatsächlich nicht mehr zur Verfügung stehen.

    Wenn einmal gezeigte Nachrichten also auch noch später zur Verfügung stehen sollen, dann ist eine Umleitung auf dem Server das Mittel Deiner Wahl. Eine mitgesandter HTTP-Status 307 wäe da wohl angemessen. Die eigentliche URL bleibt aber immer http://example.org/tipp_des_monats/

    So musst Du dann nur auf dem Server ein kleines Scriptlein bereitlegen, dass zur aktuellen URL des Monats umleitet. Die kann sich die Suchmaschine dann auch merken. Der Benutzer muss aber in seinem Browser nur /tipp_des_monats/ bookmarken, wenn ihm Deine Tipps gefallen. Den Rest macht dann sein Browser für ihn.

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://restaurant-zur-kleinen-kapelle.de
    1. Hey Tom
      Danke für deine Umfassende Antwort.
      Mein Problem Ich kenn mich lediglich mit HTML und CSS sehr gut aus und habe keine Vorstellung wonach ich suchen müsste um eine Lösung zu finden. Auch könnte ich dieses kleine Skript nicht selber schreiben.

      Also wer über Ostern ein wenig langweile hat mit dem Würde ich mich gerne privat in Verbindung setzen. Den Aufwand für das Script ob Java oder (PHP falls möglich) würde ich natürlich Vergüten! Da ich mich einfach gar nicht mit PHP auskenne und nur ein wenig mit Java.

      Aber nach deiner Einschätzung und deinem Rat würde ja Java wegfallen, nach deiner Einschätzung würde ich auch anstatt Java deine Lösung präferieren.

      Mit freundlichem Gruß I.Curtis

      1. Om nah hoo pez nyeetz, I.Curtis!

        Aber nach deiner Einschätzung und deinem Rat würde ja Java wegfallen, nach deiner Einschätzung würde ich auch anstatt Java deine Lösung präferieren.

        Der Unterschied zwischen Java und JavaScript ist größer als der zwischen

        und .

        Matthias

        --
        1/z ist kein Blatt Papier.

        1. Der Unterschied zwischen Java und JavaScript ist [...] [groß]
          Matthias

          Da ich das in einem Fluss geschrieben habe, hab ichs nichtmehr so genau genommen;)
          LG I.Curtis