Tim: Schriftgröße verändern mit PHP

hi,

es gibt ja die möglichkeit, per javascript, die größe der schrift einer webseite zuändern. so das die schrift je nach button klick. den text des contents kleiner oder größer darstellen kann. per javascript hab ich dies hinbekommen, in dem man einfach drei verschiedene css-dateien anlegt, welche verschiedene größen von text, links, etc. beinhalted. per javascript wird die seite einfach neu geladen und nimmt dann eine andere css-datei, je nachdem welchen button angeklickt wurde. das funzt auch prima. die seite soll aber ohne javascript auskommen in standardversion, daher die frage kann man dies auch mit php umsetzen. so ist diese extrem kompatibel, weil nur in html/php und css programmiert wurde. ich habe es mit php versucht aber nicht hinbekommen.

ich bin für jede hilfe dankbar.

Tim

  1. moin :)

    Klar kannste sowas auch mit php umsetzen, allerdings muß dabei die
    Seite stets neu geladen werden, da php nur serverseitig herumfuhrwerkt.

    Wenn Du mal den relevanten Teil deines php-Ansatzes postest,
    schaun wir mal, wo denn der Fehler liegt.

    Schönen Gruß!
    Semaphor

    1. leider fehlt mir jeglicher ansatz, das hab ich auch geschrieben, weil ich mich mit php nicht so gut auskenne. das seite neu geladen wird ist klar das man das javascript ja auch mit einem a href=#.

      nur ich weiss leider gar nicht wie ich dies in php programmiere, und ich habe auch tutorial diesbezüglich gefunden. das ist mein problem.

      THX Tim

      1. leider fehlt mir jeglicher ansatz, das hab ich auch geschrieben, weil ich mich mit php nicht so gut auskenne. das seite neu geladen wird ist klar das man das javascript ja auch mit einem a href=#.

        nur ich weiss leider gar nicht wie ich dies in php programmiere, und ich habe auch tutorial diesbezüglich gefunden. das ist mein problem.

        THX Tim

        Wenn es Dir tatsächlich nur um die Ansicht geht, so muß ich den anderen recht geben.
        Jeder Benutzer kann die Schriftgröße schnell für sich selbst einstellen.

        Meine Einschätzung ist aber eher, daß es hier um eine Übung geht - zum besseren Verständnis für die Materie. ;)

        Im Grunde gibt es 3 Möglichkeiten.
        1> statische html-Seiten, die sich gegenseitig verlinken. *grusel*
        2> eine php-Seite mit Schriftgröße als Übergabeparameter.
        3> javascript. Wobei Du keineswegs die Seite extra neuladen mußt, um die veränderte Schriftgröße zu sehen.

        Ich kritzel mal die Variante 2 und 3 hier hin, damit Du Dir ein besseres Bild davon machen kannst:

        Die PHP-Lösung:

        <?php
        $schrift=$_GET[schrift];
        if(!isset($schrift)){
            $schrift=1;
        }
        $datei=$_SERVER[PHP_SELF];
        $groesser=$datei."?schrift=".$schrift*1.5;
        $kleiner=$datei."?schrift=".$schrift/1.5;
        ?>

        <html>
        <body style='font-size: <?php echo $schrift ?>em'>
        <p>Beispieltext. Bla bla ...</p>
        <a href='<?php echo $groesser ?>'>groesser</a><br/>
        <a href='<?php echo $kleiner ?>'>kleiner</a>
        </body>
        </html>

        Die Javascript-Lösung:

        <html>
        <head>
        <script type='text/javascript'>
        var groesse=1;
        function schrift(wie){
            if(wie=='groesser'){
                groesse*=1.5;
            }
            else{
                groesse/=1.5;
            }
            document.body.style.fontSize=groesse+"em";
        }
        </script>
        </head>
        <body>
            <p>Beispieltext. Bla bla ...</p>

        <a href="javascript: schrift('groesser')">groesser</a><br/>
            <a href="javascript: schrift('kleiner')">kleiner</a>

        </body>
        </html>

        Hoffe, Du übernimmst es nicht einfach 1 : 1,
        sondern versuchst die Funktionsweise zu verstehen.

        Schönen Gruß!
        Semaphor

        1. Hi,

          Die PHP-Lösung:

          <?php
          $schrift=$_GET[schrift];

          da fehlen Quotes.

          if(!isset($schrift)){
              $schrift=1;
          }
          $datei=$_SERVER[PHP_SELF];

          hier auch - außerdem sollte man sicherheitshalber 'SCRIPT_NAME' verwenden.

          $groesser=$datei."?schrift=".$schrift*1.5;
          $kleiner=$datei."?schrift=".$schrift/1.5;

          Aua! Ungeprüft ... Der Link auf die Seite mit ?siehst_mich_nicht kommt bestimmt irgendwann. ;-)

          <body style='font-size: <?php echo $schrift ?>em'>

          warum inline-Style und kein style-Element?

          <p>Beispieltext. Bla bla ...</p>
          <a href='<?php echo $groesser ?>'>groesser</a><br/>
          <a href='<?php echo $kleiner ?>'>kleiner</a>

          Auch hier sollte eine Begrenzung rein sowie ein Link zur Standardschriftgröße.

          </body>

          Ferner sollte die Einstellung gespeichert werden (am besten in einem Cookie), damit sie auch auf den Folgeseiten zur Verfügung steht.

          <a href="javascript: schrift('groesser')">groesser</a><br/>
              <a href="javascript: schrift('kleiner')">kleiner</a>

          Funktionslos - ohne Javascript sollten die Links nicht präsentiert werden.

          freundliche Grüße
          Ingo

          1. Hi,

            Die PHP-Lösung:

            <?php
            $schrift=$_GET[schrift];
            da fehlen Quotes.

            Stimmt, funktioniert aber auch so.

            if(!isset($schrift)){
                $schrift=1;
            }
            $datei=$_SERVER[PHP_SELF];
            hier auch - außerdem sollte man sicherheitshalber 'SCRIPT_NAME' verwenden.

            SCRIPT_NAME war mir bisher nicht bekannt. Ich lern aber gern dazu. :)
            Was ist an SCRIPT_NAME sicherer als an PHP_SELF ?

            $groesser=$datei."?schrift=".$schrift*1.5;
            $kleiner=$datei."?schrift=".$schrift/1.5;
            Aua! Ungeprüft ... Der Link auf die Seite mit ?siehst_mich_nicht kommt bestimmt irgendwann. ;-)

            Ja sicher - hier ging's aber um das Prinzip.
            Lies, was Tim bei der Thread-Eröffnung geschrieben hat.
            Meinetwegen packen wir halt noch if(is_numeric($schrift)){...}  hinein,
            und wenn wir das ganze schön ausbauen, kommt der Text in eine
            mysql-Datenbank, damit Du sagst: "was, wenn magic_quotes=off steht
            und Du Deinen Query-String nicht richtig escaped hast?".
            Schließlich bringt ein bißchen sql-injektion die größte Gaudi, usw.

            <body style='font-size: <?php echo $schrift ?>em'>
            warum inline-Style und kein style-Element?

            auch hier: um nur das Prinzip zu erklären.

            <p>Beispieltext. Bla bla ...</p>
            <a href='<?php echo $groesser ?>'>groesser</a><br/>
            <a href='<?php echo $kleiner ?>'>kleiner</a>
            Auch hier sollte eine Begrenzung rein sowie ein Link zur Standardschriftgröße.

            Sicher, wenn Du ihm die gesamte Anwendung für eine
            Produktiv-Umgebung schreiben willst, kannste es gern machen.

            </body>
            Ferner sollte die Einstellung gespeichert werden (am besten in einem Cookie), damit sie auch auf den Folgeseiten zur Verfügung steht.

            (Gleiche Antwort meinerseits, wie 3 Zeilen höher)

            <a href="javascript: schrift('groesser')">groesser</a><br/>
                <a href="javascript: schrift('kleiner')">kleiner</a>
            Funktionslos - ohne Javascript sollten die Links nicht präsentiert werden.

            ...

            freundliche Grüße
            Ingo

            Um nicht nur zwischen Deinen Zeilen zu schreiben:
            Sicher hast Du recht.

            All das sollte beachtet werden, wenn man eine Anwendung schreibt,
            die nicht nur "Tach, ich teste mal, ob's geht" auf'n Bildschirm
            bringen soll und würde ich das als ein Tool (*hüstel*) ins Netz
            packen, dann würd ich mich bei so einer Korrektur auch in Grund
            und Boden schämen.

            Deswegen: bitte achte auf den Kontext.

            Willst Du Tim die Struktur von dynamischen Webseiten erklären,
            indem Du ihm ne Din A4-Seite voll Code präsentierst?

            Gruß,
            Semaphor

            1. Hallo Semaphor.

              $schrift=$_GET[schrift];
              da fehlen Quotes.

              Stimmt, funktioniert aber auch so.

              Dann setze einmal ein define('schrift', 'husseldiguggeldu'); davor …

              Verlasse dich besser nicht auf automatische Fehlerkorrekturen und mache es gleich richtig.

              Einen schönen Mittwoch noch.

              Gruß, Mathias

              --
              ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
              debian/rules
            2. Hi,

              $schrift=$_GET[schrift];
              da fehlen Quotes.

              Stimmt, funktioniert aber auch so.

              Nein - jedenfalls nicht auf einem sinnvoll konfigurierten Server.

              SCRIPT_NAME war mir bisher nicht bekannt. Ich lern aber gern dazu. :)
              Was ist an SCRIPT_NAME sicherer als an PHP_SELF ?

              PHP_SELF ist durch den User manipulierbar, SCRIPT_NAME nicht.

              Aua! Ungeprüft ... Der Link auf die Seite mit ?siehst_mich_nicht kommt bestimmt irgendwann. ;-)

              Ja sicher - hier ging's aber um das Prinzip.

              Wenn du Beispielcode an zudem unerfahrene User weitergibst, dann sollte dieser weder Fehler noch Sicherheitslücken enthalten. Und da dieser Thread über Jahre hinaus im Archiv auffindbar ist, sollte man sowas nicht posten bzw. unkommentiert lassen.

              Meinetwegen packen wir halt noch if(is_numeric($schrift)){...}  hinein,

              Blödsinn - font-size:0 lässt die Seite genauso verkümmern.

              <body style='font-size: <?php echo $schrift ?>em'>
              warum inline-Style und kein style-Element?

              auch hier: um nur das Prinzip zu erklären.

              Das geht genauso mit einem Script-Element als Einzeiler.

              Auch hier sollte eine Begrenzung rein sowie ein Link zur Standardschriftgröße.

              Sicher, wenn Du ihm die gesamte Anwendung für eine
              Produktiv-Umgebung schreiben willst, kannste es gern machen.

              Die Leute, die hier mitlesen, suchen meist Lösungen für Produktiv-Umgebungen. Wer ihnen eine bietet, sollte das auch berücksichtigen oder dazu schreiben, dass die gebotene Lösung so nicht produktiv einsetzbar ist - aber wozu dann überhaupt Code posten?

              freundliche Grüße
              Ingo

  2. Hallo Tim,

    per javascript hab ich dies hinbekommen, in dem man einfach drei verschiedene css-dateien anlegt, welche verschiedene größen von text, links, etc. beinhalted. per javascript wird die seite einfach neu geladen und nimmt dann eine andere css-datei, je nachdem welchen button angeklickt wurde. das funzt auch prima. die seite soll aber ohne javascript auskommen in standardversion, daher die frage kann man dies auch mit php umsetzen. so ist diese extrem kompatibel, weil nur in html/php und css programmiert wurde. ich habe es mit php versucht aber nicht hinbekommen.

    Lösungsansatz: Übergebe einen Parameter per GET (http://www.example.org/index.php?stylesheet=1) und mach davon deine Entscheidung abhängig, welches Stylesheet du mit PHP in den HTML-Code einfügst. Mit PHP brauchst du lediglich die URLs der verschiedenen Stylesheets auszugeben, der Rest des link-Elements, mit dem du dein Stylesheet einbindest kann statisch bleiben.

    Allerdings halte ich eine solche Funktion nicht für besonders wichtig, die Schriftgröße kann man auch im Browser ändern. So lange also jemand ohne JavaScript nicht einen wirkungslosen Link/Button in der Seite hat, spricht meiner Meinung nach nichts dagegen, dies ausschließlich in JavaScript zu realisieren.

    Schöne Grüße,

    Johannes

  3. Hi,

    ich habe es mit php versucht aber nicht hinbekommen.

    Dein Lösungsansatz ist falsch. Eine Website, deren Grössenangaben in em angelegt sind, kann problemlos skaliert werden - einfach mit Strg+*. Dafür brauchts keine Buttons oder verschiedenen Stylesheets.

    *) ok, im IE muss man übers Menue den Schriftgrad verstellen.

    Btw: man kann die Schriftgrösse bzw. das verwendete Stylesheet mit JS auch ohne Neuladen der Seite ändern...

    Gruesse, Joachim

    --
    Am Ende wird alles gut.