Layout (header) wird nicht angezeigt.

aheimburg

Mitglied
Hi Leute,
ich versuche meine erste WS zu erstellen, habe natürlich einige Probleme.
Die folgende Struktur des Verzeichnisses habe ich aus dem Buch Webseiten Programmieren un gestalten von M. Lubkowitz :
Projekt
|__ index.php
|__Bilder (alle Bilder, Grafiken)
|__www
|__inc (base.inc.php, functions.inc.php)
|__Inhalt (links, Darstellung einer Person, ..)
|__styles (screen.css, main.html, javascript.js)

Die index.php- Ausgabe sieht so aus:
----------------------------------------
Seite_Name
Startseite Links

Begrüßungstext:
=============

Hier ist die Datei "A0.txt"

Impressum
-------------------------------------
Der Header und Fuss fehlen (das gesamte layout).
Ich vermute, es liegt an den Pfadangaben. Denn ich tippe alle Pfade per Hand. Wie kann ich dieses Problem lösen? Soll ich einen anderen Skript mit allen Pfadangaben erstellen?

Die Tests laufen auf einen lokalen Webserver und Firefox als Browser.

Danke für jede Hilfe!
 
Hallo!

Kannst du viell. einen Code-Auszug hier posten? So kann ich dir nicht ganz folgen was du meinst.

Geht deine PHP-Include() Funktion nicht so wie du es dir wünscht? Oder hast du Probleme im HTML-Code?

Schöne Grüße!
 
Hallo GeneSys386
> Kannst du viell. einen Code-Auszug hier posten? So kann ich dir
> nicht ganz folgen was du meinst.

das Skript index.php:
Code:
<?php
/* Variablen auslesen */

if(isset($_GET['cmd'])) {
            $cmd = $_GET['cmd'];
    }
    else {
            $cmd  = ''; //bzw. ein anderer Default-Wert
    }

/* Konfigurationsdateien laden */
include('www/inc/base.inc.php');

/* Template einlesen */
$template = get_file_as_string($base['template'],"");
//echo "Parameter <b>$base[template] </b><br>";


$template = str_replace($base['tag_start'].'title'.$base['tag_end'],
                        $base['title'],$template);


$template =
str_replace($base['tag_start'].'navigation'.$base['tag_end'],
                        $base['navigation'],$template);


/* Beispiel: Inhalt der Seite "$base['A0']" einlesen, Trennzeichen ist hier "<br>" ! */
$inhalt = get_file_as_string($base['A0'],"<br>");

$template = str_replace($base['tag_start'].'inhalt'.$base['tag_end'],
                        $inhalt,$template);

//Layout
$template = str_replace('$_SERVER[PHP_SELF]',$_SERVER['PHP_SELF'],$template);

//Template ausgeben
echo stripcslashes($template);

?>

-----
Das Skript base.inc.php:
Code:
<?php

global $base;

 /* Konfigurationsvariablen */
  $base['title'] = 'project_name';

  $base['navigation'] = 
'<a href="$_SERVER[PHP_SELF]">Startseite</a>
<a href="$_SERVER[PHP_SELF]?cmd=projekt">Projekt</a>
<a href="$_SERVER[PHP_SELF]?cmd=Kontakt">Kontakt</a>
<a href="$_SERVER[PHP_SELF]?cmd=links">Links</a>;

  $base['content'] = '';
  $base['template'] = 'd:/www/styles/main.html';

  $base['tag_start'] = '<@';
  $base['tag_end'] = '@>';

  // Verzeichnisse und Dateinamen zu Content-Seiten:
  $base['A0'] = 'd:/www/Inhalt/womendesc/A0.txt';  // Beispielseite

  /* Hilfsfunktionen */

  /* Datei als String einlesen */
  /* die Variable "$delimiter" habe ich eingeführt, um den Zeilenumbruch in Textfiles zu ermöglichen */
  function get_file_as_string($filename,$delimiter)
  {
    $tmpresult_array = file($filename);  // liest Datei in Array ein
                                // implode besorgt die Umwandlung des Array  
                                   in Zeichenkette
    $tmpresult =implode($delimiter, $tmpresult_array);
    return $tmpresult;

  }
?>
 
Hallo!

... so durch's schnelle drüberfliegen wär' mir jetzt kein einfacher Fehler aufgefallen - bekommst du irgendwelche PHP-Fehler angezeigt das er include-Dateien nicht findet o.ä.?

Bzw.: Wo befindet sich dein Header/Footer? Auch in der d:/www/styles/main.html ?


Generell würde ich aber empfehlen, alle include()'s in einer eigenen Datei anzulegen .. du kannst die Pfadangaben relativ machen .. in deinem beispiel könntest du z.B. in der index.php sagen

PHP:
 include './inc/base.inc.php'; 
 include 'inc/base.inc.php'; // alternative Angabe

So musst du nicht immer die ganzen absoluten Pfade eintragen!
 
Hallo!

... so durch's schnelle drüberfliegen wär' mir jetzt kein einfacher Fehler aufgefallen - bekommst du irgendwelche PHP-Fehler angezeigt das er include-Dateien nicht findet o.ä.?

Bzw.: Wo befindet sich dein Header/Footer? Auch in der d:/www/styles/main.html ?

Header/Footer sind dort.

Generell würde ich aber empfehlen, alle include()'s in einer eigenen Datei anzulegen .. du kannst die Pfadangaben relativ machen .. in deinem beispiel könntest du z.B. in der index.php sagen

Danke für den Tips!
Ich versuche es.
 
Wenn sich auch dein Footer/Header in der Datei befindet (main.html) und danach nicht angezeigt wird, würd ich mal spontan drauf tippen das du irgendwo mit einem str_replace() zu viel austauscht ;)

Bzw. kannst du am Anfang der index.php noch folgendes setzen

PHP:
error_reporting(E_ALL);

damit bekommst du dann garantiert ALLE Fehler gelistet .. sollte aufschluss darüber geben ob evtl. Include-Dateien oder Variablen nicht gefunden werden. Fehler könnte auch ein ganz ordinärer Tippfehler sein o.ä. -- ist mir auch schon zig-fach passiert, deswegen kenn ich das :-D
 
wieso baust du dir keine kleine templatefunktion?

PHP:
function template ($file, $var=array())
{
   // Datei öffnen und einlesen selber machen ;)
   foreach ($var as $search => $replace)
  {
     str_replace('<@'.$search.'@>', $replace, $file); // $file ist das template file in dem ja ersetzt werden soll
  }

return $file;
}

Aufgerufen wird das ganze so:
PHP:
// blablabla code
$assign['title'] = 'Titel der Page';
$assign['123'] = '456';

echo template('main.tpl', $assign);
Main.tpl
HTML:
// html hier und da
<head>
   <title><@title@></title>
</head>
 
Zurück