PHP als Template Engine

forum-user

Mitglied
Halle Leute, seit paar Tagen befasse ich mich mit PHP als Template Engine.
Ich habe zu Übungszwecken mir ein kleines Projekt erstellt. Dabei habe ich in einer Datei den Code und in einer weiteren dass Template.
Ich will eine Variable an das Template übergeben, welche im Template einen Fehler oder ähnliches ausegeben soll. Leider erhalte ich dabei die Fehlermeldung "Notice: Undefined variable:" Was diese bedeutet ist mir klar. Jedoch weiß ich nicht, wo mein Denkfehler liegt.

Code File
Code:
<?php
// @var bool
define('CONSTANT', true);

// configuration.php prüfen,
if (!file_exists( './configuration.php' )) {
  // keine configuration.php gefunden
  echo'<h1>Fehler:</h1>';
  echo 'Die Datei configuration.php wurde nicht gefunden!';
  die;  
}
 else {
   // falls doch vorhanden...dann einbinden
   require_once('./configuration.php');   
 }
 
// prüfen ob angemeldet
check_login_status();

 
 */
 if (isset($_GET['cmd'])){
 
  try {
	
  }
 catch (Exception $e)  {
	   $error_msg = $e->getMessage();
	  echo $error_msg;
 }
} 
 //Template einbinden 
init_template('index2'); 
?>

und hier die Template File
Code:
<!-- Let's with all -->

<!--Aufruf des HTML Kopfes-->
   <?=html_head()?>

<!--Aufruf der Hauptnavigation-->
   <?=main_navigation()?>
   
<!--Aufruf der Mitglieder Menüs-->
   <?=member_navigation()?>  

<!--Text-->
    <?=$error_msg?>

<!--Aufruf des HTML Fußes-->
<?=html_footer()?>

<!--Thats all folks-->

Über Eure Hilfe würde ich mich freuen, da ich nicht weiter weis, warum der Fehler auftrifft.
 
und für welche Variable gibts die Fehlermeldung?
ist die Schreibweise mit <?=...?> in deinem php.ini aktiviert (ich weiss grad nicht mehr wie die Einstellung heisst)
 
@Yaslaw
die Fehlermeldung gilt für <?=$error_msg?>
Die php.ini's habe ich alle geprüft und Short Tags und alles was damit zu tun hat, ist aktiviert.
 
Nun, schauen wir mal dein Code genauer an.
PHP:
  try {
    
  }
 catch (Exception $e)  {
       $error_msg = $e->getMessage();
      echo $error_msg;
 }
Da du da im try{} kein Code hast, kann er dort auch nicht auf ein Fehler laufen und $error_msg wird nie abgefüllt (also auch nicht initilaisiert). Ergo ist $error_msg nicht bekannt.
Du könntest $error_msg initilaisieren
PHP:
  $error_msg = '';
  try {
    
  }
 catch (Exception $e)  {
       $error_msg = $e->getMessage();
 }
 
Nun, schauen wir mal dein Code genauer an.
PHP:
  try {
    
  }
 catch (Exception $e)  {
       $error_msg = $e->getMessage();
      echo $error_msg;
 }
Da du da im try{} kein Code hast, kann er dort auch nicht auf ein Fehler laufen und $error_msg wird nie abgefüllt (also auch nicht initilaisiert). Ergo ist $error_msg nicht bekannt.
Du könntest $error_msg initilaisieren
PHP:
  $error_msg = '';
  try {
    
  }
 catch (Exception $e)  {
       $error_msg = $e->getMessage();
 }



Im try{} Block soll zum Beispiel geprüft werden ob Fomrularfelder ausgefüllt wurden.
z.B.
PHP:
 try{
      if(!isset($_POST['irgendwas'])) {
                        throw new Exception ('Feld ist leer');
      }
 }
}

Auch wenn ich das nach deiner Variante schreibe, tauch der gleiche Fehler auf
 
Wie wird die Variable denn an deine Funktion init_template() übergeben?

Diese Funktion prüft nur ob die Template Datei vorhanden ist.

PHP:
function init_template($template_file){
// Prüfen ob die gewünschte Template Datei vorhanden ist, wenn nicht Fehler******

  $template_file = DIR_TEMPLATE.$template_file.'.tpl';
 if (!file_exists( $template_file)) {
   // keine $template_file gefunden
    echo'<h1>Fehler:</h1>';
    echo 'Die Datei '.$template_file.' wurde nicht gefunden!';
   die;
  }
 //doch eine vorhanden...
 else{
	  //Template einbinden 
	  require_once ($template_file);	
 } 
}
 
Diese Funktion prüft nur ob die Template Datei vorhanden ist.

PHP:
function init_template($template_file){
// Prüfen ob die gewünschte Template Datei vorhanden ist, wenn nicht Fehler******

  $template_file = DIR_TEMPLATE.$template_file.'.tpl';
 if (!file_exists( $template_file)) {
   // keine $template_file gefunden
    echo'<h1>Fehler:</h1>';
    echo 'Die Datei '.$template_file.' wurde nicht gefunden!';
   die;
  }
 //doch eine vorhanden...
 else{
	  //Template einbinden 
	  require_once ($template_file);	
 } 
}

Die ganzen if() Conditions machen das ganze doch nur unübersichtlich und unnötig lang.
Keep it stupid and simple :)


PHP:
function init_template($template_file){
  // Prüfen ob die gewünschte Template Datei vorhanden ist, wenn nicht Fehler******
  $template_file = DIR_TEMPLATE.$template_file.'.tpl';
  (include $template_file) 
   or die('<h1>Fehler:</h1><p>Die Datei '.$template_file.' wurde nicht gefunden!</p>');
}
 
Habe mal weiter an dem Problem gesucht. Ich habe jetzt in der PHP Datei direkt die Template Datei aufgerufen und da wird die Variable ordentlich übergeben.
PHP:
 //Template einbinden 
include(DIR_TEMPLATE.'index2.tpl');


Sobald ich das aber mit genannter Funktion init_template($template_file) aufrufe, taucht der Fehler wieder auf, auch wenn sich die Funktion gleich in der PHP Datei befindet.
 

Neue Beiträge

Zurück