php als Templatesystem und Template einbinden

forum-user

Mitglied
Hallo Leute, ich nutze PHP wie gesagt als Template System ;-) Dabei habe ich bestimmt mal wieder nur einen Denkfehler.

Dabei gehe ich wie folgt vor:

index.php

PHP:
<?php
error_reporting(E_ALL);

// configuration.php prüfen, keine gefunden installation laden
if (!file_exists( 'configuration.php' )) {
	 $self = rtrim( dirname( $_SERVER['PHP_SELF'] ), '/\\' ) . '/';
	header("Location: http://" . $_SERVER['HTTP_HOST'] . $self . "install/index.php" );
  exit();
}
 else {
   // falls doch vorhanden...dann einbinden
   require_once('configuration.php');
 }

try{
	if(check_install_dir()){
		throw new Exception ('Bitte l&ouml;schen Sie das Installationsverzeichnis');
	}
}
// falls Fehler auftauchen, schmeißen wir ne Fehlermeldung
catch (Exception $e)  {
	 $fehlermeldung =  return_error($e->getMessage());
} 

// 3. Template einbinden

// Prüfen ob die gewünschte Template Datei vorhanden ist, wenn nicht Fehler******
$template_file = 'index';
 //richtige Variable zusammensetzen 
  $template_file = TEMPLATE_DIR.'tpl/'.$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 
	  		include_once ($template_file);	
 		}
?>


Soweit so gut, funktioniert auch alles *puh* :D Wenn ich aber das Template über eine Funktion einbinden will, dann erhalte ich die Fehlermeldung, dass die Template Datei nicht vorhanden wäre, was aber mit der oben genannten index.php jedoch eingebunden werden kann.

PHP:
// 3. Template einbinden

// Prüfen ob die gewünschte Template Datei vorhanden ist, wenn nicht Fehler******
$template_file = 'index';
 //richtige Variable zusammensetzen 
  $template_file = TEMPLATE_DIR.'tpl/'.$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 
	  		include_once ($template_file);	
 		}


Nun stellt sich mir grad die Frage, warum das nicht so will, wie es soll :-(


index.tpl

Code:
<?=html_head()?>
   <p>TEST TEXT</p>
     <?=$fehlermeldung?>
<?=html_footer()?>
 
Ich dachte das die Frage kommt, warum soll man nicht PHP selber nutzen******** Ist es nicht dafür gedacht?
smarty ist PHP. Du kannst es schon direkt nutzen. Spricht nix dagegen. Ich hatte auch mal ein Templatesystem gemacht - und es dann verworfen da mit smarty vie mehr möglichketen bietet (oder vLib etc)

Zu deinem Problem. Debuge (ggf mittesl var_dump()) mal $template_file bevor die den file_exist() furchführst. Dann sihst du wo PHP deine Datei sucht.

Du musst mit relativen Pfaden aufpassen. Je nachdem wenn ien Script includiert wurde hat es einen anderen Pfad. Nämlich derjenige des Parentscriptes.
PHP verschachtelte include
 
oder Google mal PHP template Class. Das ist dann nicht ganz so umfangreich und keine neue "template Syntax" wie bei smarty
 
@saftmeister
DieFunktion binde ich wie folgt ein:
PHP:
<?php 
include_once('asset/functions.php');

check_template('index');
?>


Die functions.php sieht wie folgt aus
PHP:
function check_template($template_file){
         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 
              include_once ($template_file);    
         }  
}
 
Sollte die Funktion check_template() nicht eher so aussehen:

PHP:
function check_template($template_file){
         // Aus dem Beispiel von index.php oben geklaut
         $template_file = TEMPLATE_DIR.'tpl/'.$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 
              include_once ($template_file);    
         }  
}
 
Zurück