Ankündigung

Einklappen
Keine Ankündigung bisher.

Alternativen zur include Technik

Einklappen

Neue Werbung 2019

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

  • Alternativen zur include Technik

    Hallo,

    zur Zeit arbeite ich, um unterschiedliche Inhalte auf einer Internetseite darzustellen, mit einem "include System". Bei mir sieht das zur Zeit so aus, das ich in der Browserzeile halt die gewünschte Seite übergebe (z.B. index.php?page=pics), und dann die gewünschte Seite eingebunden wird.

    PHP-Code:
    <?php
    if(isset($_GET['page']) && $_GET['page'] != ''){
        
    $file 'include/'.$_GET['page'].'.php';
        if(
    file_exists($file)){
            
    $page $file;
        }else{
            
    $page 'include/404.php';
        }
    }else{
        
    $page 'include/start.php';
    }
    ?>
    Jetzt habe ich zwei Möglichkeiten, einmal wenn ich nur den Inhalt ändern will, dann baue ich den PHP Code an der Stelle ein wo der Text eingebaut werden soll:

    Code:
    <html>
      <head>
      </head>
      <body>
        <div>
        <?php [PHP CODE] ?>
        </div>
      </body>
    </html>
    Wenn sich aber auch auch Titel, Keywords usw. ändern sollen dann kommt der PHP Code an den Anfang der Index Datei und die eingebundene Datei baue ich so auf:

    PHP-Code:
    $titel 'Titel';
    $content 'HTML TEXT'
    Und die Hauptdatei:

    Code:
    <html>
      <head>
        <title><?=$titel?></title>
      </head>
      <body>
        <div>
          <?=$content?>
        </div>
      </body>
    </html>
    Jetzt ist für mich die Frage, wie Ihr so etwas löst, bzw. welche anderen Möglichkeiten es gibt.

  • #2
    PHP-Code:
    <html> 
    <head> 
    </head> 
    <body> 
    <div> <?php [PHP CODE?> </div> 
    </body> 
    </html>
    Wenn du das so machst, dann kannst du mit PHP weder header setzen, noch Cookies lesen oder mit Sessions arbeiten. PHP-Code, soweit er keine Daten ausgibt, gehört an den Anfang.
    [PHP]if ($var != 0) {
    $var = 0;
    }[/PHP]

    Kommentar


    • #3
      prinzipiell gibt es zwei Grundmöglichkeiten. a) im HTML code PHP-Aufrufe zu schreiben, oder b) Templates zu laden, in denen dann spezielle Sachen (z.B. Keywords) ersetzt werden.

      ich persönlich mache das auf relativ komplizierte Weise nach Variante a), halte Variante b) aber für effizienter.

      Kommentar


      • #4
        @Wolla:

        Deswegen habe ich auch in der zweiten Möglichkeit geschrieben:
        dann kommt der PHP Code an den Anfang

        Ich bin am überlegen ob ich auf ob_start umsteige, aber ich sehe keinen Vorteil im Gegensatz zur der zweiten ausgeführten Option.

        Kommentar


        • #5
          Mach dich doch mal mit MVC vertraut.
          "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

          Kommentar


          • #6
            Hm, ich weiß nicht ob ich das Prinzip ganz verstanden habe.

            Ich habe mal versucht ein Template System zu schreiben (Trennung von Programmierung, HTML/CSS und Inhalt) Zusätzlich zu den Codebeispielen hier habe ich Dateien mal angehängt.

            Zur Erklärung:
            Bei dem Projekt sollen später alle Seiten nach dem Muster: "index.php?page=start" aufgerufen werden (wird noch durch htaccess und rewrite optimiert).

            Ablauf
            In der index.php wird überprüft ob eine bestimmte Seite angefordert wird, ansonsten Aufruf der Startseite. Wenn eine Seite angefordert wurde, wird überprüft ob diese Seite existiert, ansonsten Aufruf der Startseite.

            In diesem Beispiel rufen wir nun die Startseite auf, in der start.php wird der Titel und die Überschrift definiert und welche Dateien den Inhalt für welche Bereich stellen. Ausserdem wird die zu benutzende Template Datei festgelegt:

            PHP-Code:
            <?php
            $page
            ->content->title 'AvaIMG - Startseite';
            $page->content->header 'Wilkommen bei AvaIMG';
            $page->files->left 'content/menue.html';
            $page->files->content 'content/start.html';
            $page->files->right login_form();
            $page->files->template 'template/template.html';
            ?>
            Für den rechten Bereich, wo ein Login hin soll, wird eine Funktion aufgerufen, welche überprüft ob der Nutzer eingeloggt ist oder nicht und je nach Ergebnis eine andere Datei zum Einbinden auswählt (bei einem eingeloggten User wird "$_SESSION['login'] = 1" gesetzt).

            Anschließend wird mit einer Funktion überprüft ob alle Dateien auf die in der start.php verwiesen wird auch exestieren, wenn nicht wird das Script gestoppt und gemeldet welche Datei fehlt.

            Zum Schluss kommt nun dei Funtion, die die Seite erstellt. Zuerst wird die Template Datei in einen String geladen. Der Inhalt der Template Datei sieht so aus:

            Code:
            <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
                    "http://www.w3.org/TR/html4/strict.dtd">
            <html>
                <head>
                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                    <link rel="stylesheet" type="text/css" href="css/style.css">
                    <title>#TITLE#</title>
                </head>
                <body>
                    <div id="main">
                        <div id="header">
                            <h1>#HEADER#</h1>
                        </div>
                        <div id="left">
                            #LEFT#
                        </div>
                        <div id="content">
                            #CONTENT#
                        </div>
                        <div id="right">
                            #RIGHT#
                        </div>
                    </div>
                </body>
            </html>
            dann wird im String die #TEXTE# durch die jeweiligen Inhalte ersetzt und der String ausgegeben:

            PHP-Code:
            function page_build($page){
                
            $html file_get_contents($page->files->template);
                foreach(
            $page->files as $key => $value){
                    
            $search[] = '#'.strtoupper($key).'#';
                    
            $replace[] = file_get_contents($value);
                }
                foreach(
            $page->content as $key => $value){
                    
            $search[] = '#'.strtoupper($key).'#';
                    
            $replace[] = $value;
                }
                
            $html str_replace($search$replace$html);
                return 
            $html;

            Dieses wird dann per echo ausgegeben.


            Für Kritik und Vorschläge bin ich dankbar. Ich melde mich Sonntag abend wieder, falls jemand sich dazu bereit erklärt das ganze mal zu prüfen und seine Meinung äußert.

            Gruß
            Markus
            Angehängte Dateien

            Kommentar


            • #7
              abgesehen davon, daß ich Inhalte von $page->files und $page->content als arrays definieren würde, sieht das ganz gut aus.

              Kommentar


              • #8
                Wie als Array definieren?

                Kommentar


                • #9
                  PHP-Code:
                  $page->content = array(
                      
                  "title" => 'AvaIMG - Startseite',
                      
                  "content" => 'Wilkommen bei AvaIMG'
                  ); 

                  Kommentar


                  • #10
                    Achso, war gestern Nacht nicht mehr ganz wachi

                    Kommentar

                    Lädt...
                    X