Ankündigung

Einklappen
Keine Ankündigung bisher.

Frames ersetzen

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Frames ersetzen

    Heyho zusammen,

    ich arbeitet seit kurzem in einem Unternehmen, in dem noch in Teilen auf Frames gesetzt wird. Sprich in einem Frame die Navigation, in dem anderen der Content.
    Der Plan ist nun die Frames zu beseitigen, aber da Content wie auch Navigation von der Struktur komplette HTML-Seiten sind und relativ viel, hinsichtlich Javascript und CSS, hardcoded, also nicht dynamisch eingebunden, in den Seiten steht, ist die ein wenig problematisch.

    Habt ihr eine Idee, wie ich die Struktur nicht großartig anpassen muss und dennoch die Frame los werden kann?
    Btw. IFrames habe ich schon ausgeschlossen, da dies nicht wirklich sauberer ist als das bestehende Konzept...

    Vielen Dank schon einmal für eure Hilfe

    Viele Grüße
    NecroniX


  • #2
    Man kann ein 2-Spalten Layout relativ leicht mit CSS machen und dann die (Body-)Inhalte der einzelnen Seiten mit PHP in die beiden DIVs reinladen.
    Die Links in der Navigation müsste man dann ersetzen, dass diese über das "Proxy-Script" geladen werden.
    Hier ist ein kleines Beispiel zum rumspielen:

    PHP-Code:
    <?php
    $navigation 
    'left.php';
    $startseite 'start.php';

    function 
    base_url(){
      
    $currentPath $_SERVER['PHP_SELF']; 
      
    $pathInfo pathinfo($currentPath); 
      
    $hostName $_SERVER['HTTP_HOST']; 
      
    $protocol strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https://'?'https://':'http://';

      return 
    $protocol.$hostName.$pathInfo['dirname']."/";
    }

    function 
    load($url) {
      
    $d = new DOMDocument;
      
    $mock = new DOMDocument;
      
    libxml_use_internal_errors(true);

      
    $url_parts parse_url($url);

      if ( !isset(
    $url_parts['host']) || ($url_parts['host'] == '') ) {
        
    $url base_url() . $url;
      }

      
    $d->loadHTML(file_get_contents($url));

      
    // Links umschreiben
      
    global $navigation;
      if (
    $url == base_url() . $navigation) {
        foreach (
    $d->getElementsByTagName('a') as $link) {
            
    $href $link->getAttribute('href');
            
    $url_parts parse_url($href);

            if ( !isset(
    $url_parts['host']) || ($url_parts['host'] == '') ) {
              
    $href base_url() . $href;
            }

            
    $link->setAttribute('href'basename(__FILE__) . '?page=' $href);
            
    $link->setAttribute('target''');
        }
      }

      
    // Body-Content holen
      
    $body $d->getElementsByTagName('body')->item(0);
      foreach (
    $body->childNodes as $child){
          
    $mock->appendChild($mock->importNode($childtrue));
      }

      return 
    $mock->saveHTML();
    }
    ?>
    <html>
    <head>
    <style type="text/css">
      .row {
          display: flex;
      }
      .column1 {
         flex-basis: 15%;
      }
    </style>
    </head>

    <body>

    <div class="row">
      <div class="column1"><?= load($navigation); ?></div>
      <div class="column2"><?= isset($_GET['page']) ? load($_GET['page']) : load($startseite); ?></div>
    </div> 

    </body>

    </html>

    Kommentar


    • #3
      Ob das die anxgesprochenen CSS bzw. JS Probleme lösst, wage ich zu bezweifeln.
      trotzdem nettes Script....

      Kommentar


      • #4
        Meister1900
        Vielen Dank für den Hinweis die Inhalte per DOM zu laden, dass hilft mir wirklich sehr.
        Wirklich vielen Dank dafür! Mir schwebte eine sehr umständliche Lösung mit Javascript vor, aber das hier ist wesentlich sauberer

        Kommentar

        Lädt...
        X