jo: PHP Funktion gesucht, um HTML Code dynamisch zu optimieren

Hallo zusammen,

Ich benutzt einen WYSIWYG Editor um HTML zu generieren.
Dieser wird anschließen in einer MySQL Datenbank gespeichert.

Beim späteren bearbeiten des Quellcodes verliert man leicht die übersicht.

Gibt es eine PHP funktion die html Code dynamisch optimiert so wie es dreamveaver mit "HTML optimieren..." macht.

gruß

Jo

  1. Hallo,

    Gibt es eine PHP funktion die html Code dynamisch optimiert so wie es dreamveaver mit "HTML optimieren..." macht.

    Schau dir mal http://se.php.net/manual/de/ref.tidy.php an, vielleicht ist es schon das was du suchst?

    Grüße
    Jeena Paradies

    1. hallo,

      Schau dir mal http://se.php.net/manual/de/ref.tidy.php an, vielleicht ist es schon das was du suchst?

      auf dem sever wurder die lib für tidy leider nicht installiert, gibts da keine andere möglichkeit ?

      1. Hi jo,

        auf dem sever wurder die lib für tidy leider nicht installiert, gibts da keine andere möglichkeit ?

        Klar, du könntest die Funktionalität natürlich selber nachbauen - das wird aber arg kompliziert, ich rate dir also das lieber nicht zu versuchen.

        Warum erzeugst du denn deine Seiten mit Dreamweaver? Meiner Meinung nach lässt sich mit dem Programm sowieso kein vernüftiges Erbenis erzielen...

        MfG, Dennis.

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
        Die FlatBox 0.3 mit Dokumentation ist da!
        "Funktioniert nicht" hat exakt den selben Aussagewert wie "husseldiguggeldu" (Cheatah)
        1. Hallo,

          Warum erzeugst du denn deine Seiten mit Dreamweaver? Meiner Meinung nach lässt sich mit dem Programm sowieso kein vernüftiges Erbenis erzielen...

          Findest du? Also ich habe ein paar Stunden daran gearbeitet und fand es nach einer Weile sogar fast angenehm. Der nimmt einem viel Tipparbeit ab aber vor allem überwacht der die ganzen Dateinamen und die dazugehörigen Links usw. Am Ende hat mein Quellcode dennoch so ausgesehen wie sonst (also ohne DW) auch immer.

          Grüße
          Jeena Paradies

          --
          Open- vs. Closed Source Software - Verdienstmöglichkeiten | Jlog | Gourmetica Mentiri
          1. Hi Jeena,

            Warum erzeugst du denn deine Seiten mit Dreamweaver? Meiner Meinung nach lässt sich mit dem Programm sowieso kein vernüftiges Erbenis erzielen...
            Findest du? Also ich habe ein paar Stunden daran gearbeitet und fand es nach einer Weile sogar fast angenehm. Der nimmt einem viel Tipparbeit ab aber vor allem überwacht der die ganzen Dateinamen und die dazugehörigen Links usw. Am Ende hat mein Quellcode dennoch so ausgesehen wie sonst (also ohne DW) auch immer.

            Ok, du hast also Dreamweaver ohne die integrierte WYSIWYG Funktionen benutzt, richtig? Sonst würde der erzeugte Code wohl nicht so aussehen wie immer ;-)
            Gut - da muss ich zustimmen, die Verwaltungs-Tools von Dreamweaver sind recht gut bzw. sollen recht gut sein, ich habe noch kein größeres Projekt damit realisiert. Aber eine Projektverwaltung bringen auch andere Programme mit.

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
            Die FlatBox 0.3 mit Dokumentation ist da!
            Die Definition des SelfCodes ist hier zu finden, es gibt auch einen Encoder.
            1. Hi,

              Ok, du hast also Dreamweaver ohne die integrierte WYSIWYG Funktionen benutzt, richtig? Sonst würde der erzeugte Code wohl nicht so aussehen wie immer ;-)

              Dem aktuellen DW kannst du recht gut beibringen, wie er den Code zu behandeln hat. Dann halten sich die Nacharbeiten im Grenzen.
              DW hat auch seine Vorteile, wenn man am liebsten mit nem Texteditor arbeitet. Ist halt für mich gestorben, seit ich auf Linux umgestellt hab ;)

              1. Hi Manuel,

                Ist halt für mich gestorben, seit ich auf Linux umgestellt hab ;)

                Für mich hat er gar nicht erst richtig gelebt :-> Und seit HomeSite mich mal so gnadenlos enttäuscht hat, ist PS Pad mein klarer Favorit.

                MfG, Dennis.

                --
                Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                Die FlatBox 0.3 mit Dokumentation ist da!
                Krieg ist Gottes Art, den Amerikanern Geographie beizubringen. (Häfft)
                1. Hi Dennis,

                  PS Pad mein klarer Favorit.

                  Sehr gute Entscheidung :)
                  Was mir bvei Quanta+ immer noch fehlt, ist die Möglichkeit, per Script direkt in den Editor einzugreifen. Bei PS-PAD hab ich mir ein Script geschrieben, das mir vorm Speichern im Kommentar das "Build" um eins erhöht hat, und mit dieser laufenden Nummer wurden Backups angelegt, unabhängig vom "Original"

                  Ich hoffe, das der Editor irgendwann nach Linux portiert wird :D

                  1. Hi Manuel,

                    Bei PS-PAD hab ich mir ein Script geschrieben, das mir vorm Speichern im Kommentar das "Build" um eins erhöht hat, und mit dieser laufenden Nummer wurden Backups angelegt, unabhängig vom "Original"

                    Hört sich interessant an - hast du nicht Lust, dieses Script zu veröffentlichen?

                    MfG, Dennis.

                    --
                    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                    Die FlatBox 0.3 mit Dokumentation ist da!
                    "Funktioniert nicht" hat exakt den selben Aussagewert wie "husseldiguggeldu" (Cheatah)
                    1. Hi Dennis,

                      Hört sich interessant an - hast du nicht Lust, dieses Script zu veröffentlichen?

                      na sicher doch ;)
                      -----------------

                        
                      modle_name = "Inkrementales speichern";  
                      module_ver = "0.1.0"; // Diese Versionsnummer wird ins Script geschrieben  
                      backup_path = "C:\\Backup\\";  
                        
                      function inc_save() {  
                      // Aktualisieren des Builds. Beispiel:  
                      // Version:   0.0.1 Build 1  
                              var obj1 = newEditor();  
                        
                              obj1.assignActiveEditor();  
                              var filename = obj1.fileName();  
                              var file = filename.split(".");  
                              var new_filename = filename.substring(0, filename.length - file[file.length - 1].length - 1);  
                              var pure_filename = new_filename.split("\\"); // Bei Unix-Systemen anpassen auf "/"  
                              var pure_file = pure_filename[pure_filename.length - 1];  
                              var act_line = obj1.caretX();  
                              var act_char = obj1.caretY();  
                        
                              if(file[file.length - 1] == "php"){  
                                      obj1.setCaretPos(0,7); // Hier Zeile 7, bei Bedarf anpassen  
                        
                                      var obj_text = obj1.lineText();  
                                      var text = obj_text.split(" ");  
                                      var build = text[text.length - 1];  
                        
                                      build++;  
                                      obj1.lineText(obj_text.substr(0, obj_text.length - text[text.length - 1].length - 1) + " " + build);  
                        
                      //              echo(" " + act_line + " - " + act_char);  
                        
                      // Aktualisieren des Änderungsdatums. Beispiel:  
                      // Letze Änderung: 15.08.2005 14:56:12  
                                      obj1.setCaretPos(0,12); // Hier Zeile 12, bei Bedarf anpassen  
                        
                                      var obj_text = obj1.lineText();  
                                      var text = obj_text.split(" ");  
                                      var act_date = new Date();  
                        
                                      obj1.lineText(text[0] + " " + text[1] + " " + text[2] + " " + act_date.toLocaleString());  
                                      obj1.saveFileAs(backup_path + pure_file + "_" + build + "." + file[file.length - 1]);  
                              }  
                              obj1.saveFileAs(filename);  
                              obj1.setCaretPos(act_line, act_char);  
                      }  
                        
                      function Init(){  
                              addMenuItem("Speichern", "Inkremental speichern", "inc_save", "Ctrl+S");  
                      }  
                      
                      

                      Ich hab das Ding allerdings nicht kommentiert. wenn du Fragen hast, kannst du mir auch ne Mail schreiben :)

                      Gruss
                      manuel

                      1. Hi Manuel,

                        na sicher doch ;)

                        Vielen Dank, werde das morgen oder so mal ausprobieren - wenn ich das richtig verstanden habe, so sorgt dieses Plugin dafür, dass beim Speichern nicht nur die Datei selber gespeichert wird, sondern auch noch mal zum Backup eine Version der Datei in definiertem Ordner abgelegt wird.

                        Eigentlich ganz gut - jedoch: Was wenn man (weil Arbeit an verschiedenen Projekten) die gleiche Datei (Dateiname) mehrfach hat? Dann würde es vermutlich Probleme geben. Ich fände es ganz gut, wenn die Backup-Dateien im Format <Jahr><Monat><Tag>_<Filename>_<Build>_<Extension> abgelegt würden ... mal schauen:

                        obj1.saveFileAs(backup_path + pure_file + "_" + build + "." + file[file.length - 1]);

                        Wenn die Syntax Javascript entspricht, müsste das hier funktionieren:

                        obj1.saveFileAs(backup_path + act_date.getFullYear() + act_date.getMonth() + act_date.getDate() + pure_file + "_" + build + "." + file[file.lenght - 1]);

                        Na ja, da scheint sich jedenfalls eine Menge mit Plugins machen zu lassen - ich muss mir das mal genauer anschauen... Was für eine Sprache genau ist denn das da oben jetzt?

                        MfG, Dennis.

                        --
                        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                        Die FlatBox 0.3 mit Dokumentation ist da!
                        Wenn Sie einen Schweizer Bankier aus dem Fenster springen sehen, springen Sie hinterher. Es gibt bestimmt etwas zu verdienen. (Voltaire)
                        1. Hi Dennis,

                          Vielen Dank, werde das morgen oder so mal ausprobieren - wenn ich das richtig verstanden habe, so sorgt dieses Plugin dafür, dass beim Speichern nicht nur die Datei selber gespeichert wird, sondern auch noch mal zum Backup eine Version der Datei in definiertem Ordner abgelegt wird.

                          So sollte es sein ;)

                          obj1.saveFileAs(backup_path + act_date.getFullYear() + act_date.getMonth() + act_date.getDate() + pure_file + "_" + build + "." + file[file.lenght - 1]);

                          Müsste gehen, da PS-PAD Javascript interpretiert. Probiert hab ichs aber  nicht. Es muss auch möglich sein, für jedes Projekt einen eigene Ordner fürs Backup zu benutzen, diesen, fals nicht vorhanden, anlegen zu lassen und vieles mehr. Da ist PS-Pad echt tierisch geil.

                          Na ja, da scheint sich jedenfalls eine Menge mit Plugins machen zu lassen - ich muss mir das mal genauer anschauen... Was für eine Sprache genau ist denn das da oben jetzt?

                          Das ist JavaScript (oder JScript, müsste aber im Manual genau stehen), das um einige Objekte erweitert wurde, die den Editor steuern können.

                          Gruss
                          Manuel

                          1. Hi Manuel,

                            So sollte es sein ;)

                            Ich probiers aus, wenn ich Zeit dazu hab - bis jetzt weiß ich noch gar nicht genau, wie ich das Plugin einbaue ;-)

                            Müsste gehen, da PS-PAD Javascript interpretiert. Probiert hab ichs aber  nicht. Es muss auch möglich sein, für jedes Projekt einen eigene Ordner fürs Backup zu benutzen, diesen, fals nicht vorhanden, anlegen zu lassen und vieles mehr. Da ist PS-Pad echt tierisch geil.

                            Hm, ich arbeite eigentlich gar nicht mit „Projekten”, falls du damit das Projekt-Management von PSPad meinst - ich gehöre zu den Leuten, die die Dateien, die sie bearbeiten wollen einfach öffnen, Änderungen vornehmen und dann wieder schließen ;-)

                            Hat dieses Projekt-Management irgendwelche klaren Vorteile? Wenn ich die entsprechenden Seiten auf der PSPad-Seite dazu richtig verstanden habe, hilft das nur bei der Dateiverwaltung - Änderungen z.B. in HTML Links beim Ändern des Namens einer Datei, nimmt das Zeug nicht vor.

                            So ein Plugin bräuchte ich dann eigentlich auch gar nicht mal zum Verwalten von Versionen, das dürfte eh etwas schwierig sein, sodass ich das lieber einer richtigen Versionsverwaltung wie SVN überlassen würde ;-)
                            Praktisch finde ich so eine Funktion, damit man an „Zwischenstände” der Arbeit wieder drankommt, falls man sich mal total verrant hat. Auch schön wäre natürlich, ein automatisches Speichern, z.B. alle 5 Minuten - einfach nur für den Fall, dass mal der PC abstürtzt.

                            Na ja, es gibt sicherlich viele Sachen, die man da machen kann - aber wie so oft muss man auch hier mal wieder unterscheiden zwischen dem was sinnvoll und dem was nur zusätzlicher Ballaststoff ist.

                            MfG, Dennis.

                            --
                            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                            Die FlatBox 0.3 mit Dokumentation ist da!
                            Mit Gesetzen ist es wie mit Würstchen - es ist besser, wenn man nicht weiß, wie sie gemacht werden. (Otto v. Bismarck)
                            1. Hi Dennis,

                              Ich probiers aus, wenn ich Zeit dazu hab - bis jetzt weiß ich noch gar nicht genau, wie ich das Plugin einbaue ;-)

                              Einfach in der Ordner "scripts" kopieren und evtl. die Scripte neu kompilieren.

                              Hm, ich arbeite eigentlich gar nicht mit „Projekten”, falls du damit das Projekt-Management von PSPad meinst - ich gehöre zu den Leuten, die die Dateien, die sie bearbeiten wollen einfach öffnen, Änderungen vornehmen und dann wieder schließen ;-)

                              Ich meinte auch nicht die Projektveraltung von PS-Pad, sondern wenn du an mehreren Projekten arbeitest, kann man das Script so umbauen, das es dafür eigene Unterordner anlegt.

                              So ein Plugin bräuchte ich dann eigentlich auch gar nicht mal zum Verwalten von Versionen, das dürfte eh etwas schwierig sein, sodass ich das lieber einer richtigen Versionsverwaltung wie SVN überlassen würde ;-)

                              Das verwaltet auch keine Versionen, das schreibt nur ne Versionsnummer in den Quelltext ;)

                              Praktisch finde ich so eine Funktion, damit man an „Zwischenstände” der Arbeit wieder drankommt, falls man sich mal total verrant hat. Auch schön wäre natürlich, ein automatisches Speichern, z.B. alle 5 Minuten - einfach nur für den Fall, dass mal der PC abstürtzt.

                              Das kann man doch einstellen? Mein Script ersetzt normalerweise die Speichern-Funktion.

                              Na ja, es gibt sicherlich viele Sachen, die man da machen kann - aber wie so oft muss man auch hier mal wieder unterscheiden zwischen dem was sinnvoll und dem was nur zusätzlicher Ballaststoff ist.

                              Da hast du natürlich recht, das muss jeder für sich selbst entscheiden ;)

                              Gruss
                              Manuel

                              1. Hi Manuel,

                                Mittlerweile habe ich mein Plugin fertig und möchte es dir hier noch einmal vorstellen, vielleicht kannst du es ja auch gebrauchen ;-)

                                // = Module Info =  
                                // $createdby: driehle <http://tutorial.riehle-web.com>  
                                // $lastedit: Sun, 25 Dec 2005 15:31:05 UTC, driehle  
                                module_name = "Letztes Update anpassen";  
                                module_ver  = "0.1";  
                                  
                                // = Description =  
                                // Replaces the first line starting containig "// $lastedit:"  
                                // with "// $lastedit: <date/time>, <user>"  
                                  
                                // = User Configuration =  
                                user_name = "driehle"; // Feel free to choose  
                                search_in_lines = 20;  // Search in first x lines  
                                date_format = "GMT";   // "GMT", "Locale" or "default"  
                                  
                                // = Main Function =  
                                function update_save() {  
                                  var obj1 = newEditor();  
                                  obj1.assignActiveEditor();  
                                  
                                  var act_date = new Date();  
                                  var act_line = obj1.caretX();  
                                  var act_char = obj1.caretY();  
                                  
                                  for(var i = 1; i < search_in_lines; i ++)  
                                  {  
                                    obj1.setCaretPos(0,i);  
                                    var obj_text = obj1.lineText();  
                                    var ausdruck = /([^\$]*)\$last(e)dit: /;  
                                    if(ausdruck.exec(obj_text))  
                                    {  
                                      var new_obj_text = RegExp.$1 + "$" + "last" + "edit: "  
                                      if(date_format.toLowerCase() == "locale")  
                                      {  
                                        new_obj_text += act_date.toLocaleString();  
                                      }  
                                      else if(date_format.toLowerCase() == "gmt")  
                                      {  
                                        new_obj_text += act_date.toGMTString();  
                                      }  
                                      else  
                                      {  
                                        new_obj_text += act_date.getYear() + "-" + act_date.getFullYear() + "-"  
                                                     +  act_date.getDate() + " " + act_date.getHours() + ":"  
                                                     +  act_date.getMinutes() + ":" + act_date.getSeconds();  
                                      }  
                                      new_obj_text += ", " + user_name;  
                                      obj1.lineText("");  
                                      obj1.lineText(new_obj_text);  
                                      i = search_in_lines;  
                                    }  
                                  }  
                                  
                                  obj1.setCaretPos(act_line, act_char);  
                                  obj1.saveFile()  
                                }  
                                  
                                // = Initialisation =  
                                function Init() {  
                                  addMenuItem("Speichern", "Letztes Update anpassen", "update_save", "Ctrl+S")  
                                }
                                

                                Als Anmerkung möchte ich noch hinzufügen: Man muss in den Einstellungen von PSPad die Tastaturkombination Strg+S für Speichern entfernen, wenn man über Strg+S das eigene Script aurufen möchte.

                                Allerdings gibt es noch zwei "Bugs":

                                • Beginnt eine Zeile mit "  $lastupdate: usw.", so wird diese ersetzt durch "    $lastupdate: usw." - das ist nicht so, wenn die Zeile mit einem anderen Zeichen als einem Leerzeichen beginnt... Kannst du dir das erklären?
                                • Durch das setCaretPos ändert sich der Scrollbereich im Fenster, ich kann zwar die Courser Position am Ende wiederherstellen, nicht jedoch die Scrollposition. Ich vermute, dass geht nicht, oder?

                                MfG, Dennis.

                                --
                                Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                                Die FlatBox 0.3 mit Dokumentation ist da!
                                Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet! (Anita Berres)
                                1. Hi Dennis,

                                  Allerdings gibt es noch zwei "Bugs":

                                  • Beginnt eine Zeile mit "  $lastupdate: usw.", so wird diese ersetzt durch "    $lastupdate: usw." - das ist nicht so, wenn die Zeile mit einem anderen Zeichen als einem Leerzeichen beginnt... Kannst du dir das erklären?

                                  Sorry, hatte nie das problem, da ich die Kommentare imer ohne Leerzeichen am Anfang hatte.

                                  • Durch das setCaretPos ändert sich der Scrollbereich im Fenster, ich kann zwar die Courser Position am Ende wiederherstellen, nicht jedoch die Scrollposition. Ich vermute, dass geht nicht, oder?

                                  Scrollen geht nicht, soweit ich weiss. Der Springt zawr in die entsprechende Zeile, das Bild bleibt aber "stehen".
                                  Was du versuchen könntest, ist, den Cursor per Script zu bewegen, da ein druck auf eine Taste (z.B. Cursortaste) den Bildschirm in die passende zeile scrollt.

                                  Ich werd heute mal probieren, ob ich PS-Pad unter Wine zum laufen kriege, dann werd ich vielleicht wieder umsteigen.

                                  Gruss
                                  Manuel

                                  1. Ich werd heute mal probieren, ob ich PS-Pad unter Wine zum laufen kriege, dann werd ich vielleicht wieder umsteigen.

                                    Sieht wohl schlecht aus. PSpad läuft zwar mit Wine, hängt sich aber auf, sobald ich irgendwelche Dateioperationen mache. Werd wohl doch weiter mit Quanta arbeiten müssen

                                    1. Hi Manuel,

                                      Sieht wohl schlecht aus. PSpad läuft zwar mit Wine, hängt sich aber auf, sobald ich irgendwelche Dateioperationen mache. Werd wohl doch weiter mit Quanta arbeiten müssen

                                      Hm, schade eigentlich - das Ding ist an sich nämlich eigentlich echt genial, nur bei der Platformabhängikeit haperts eben etwas...

                                      MfG, Dennis.

                                      --
                                      Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
                                      Die FlatBox 0.3 mit Dokumentation ist da!
                                      Das ist eine Ehrlichkeit, die an Blödheit grenzt. (Thomas Gottschalk)
                                      1. Hi Dennis,

                                        Hm, schade eigentlich - das Ding ist an sich nämlich eigentlich echt genial, nur bei der Platformabhängikeit haperts eben etwas...

                                        Und das wird sich nach Angaben des Authors auch so schnell nicht ändern. Auf die Frage, ob er plant, PS-Pad auf Linux zu portieren meinte er nur "Why?"

                                        Somit muss ich mit Quanta+ leben und hoffe, das Wine irgendwann mal mit PS-Pad zurechtkommt ;)