"TemplateEngine" Seiten über GET

Crav3X

Erfahrenes Mitglied
Hallo,

habe hier ne datei mit der ich die seiten über "GET" aufrufe. Leider habe ich das problem das ich kein Javascript nutzen kann. Die Funktionen stehen im Quelltext quasi garnicht mehr nach dem aufruf (im sourcecode stehen sie natürlich)^^

Hier erstmal die template.php:
PHP:
<?php
function templateengine_getcontents($file) {

  ob_start();
    include($file);
    $content = ob_get_contents();
  ob_end_clean();
  
  return $content;
  
}

function templateengine_placeholders($content) {

   $content_str = implode("",$content);
   $content_str = str_replace("{","",$content_str);
   $content_str = str_replace("}","",$content_str);
   $place = explode(":", $content_str);
   
   if(isset($place['2']))
   {
   	$file =  'system/'. $place[0] .'/'. $place[2] .'.php';
   }
   else
   {
   	$file =  'system/'. $content[1] .'/'. $content[1] .'.php';
   }
 
  if(file_exists($file)) {
    return templateengine_getcontents($file);
  }
}

$temp_url = 'templates/index.html';
$file = empty($_GET['module']) ? 'home' : $_GET['module'];
$module = empty($_GET['site']) ? 'index' : $_GET['site'];
$temp_cont = 'system/'. $file .'/'.$module.'.php';
$temp = templateengine_getcontents($temp_url);
$temp = str_replace('{show:content}',templateengine_getcontents($temp_cont),$temp);
$temp = preg_replace_callback("={(.*?)}=si",'templateengine_placeholders',$temp);

echo $temp;

?>

im verzeichnis "template" liegt die index.html für das Design.
Die einzelnen Seiten werden aus dem Ordner "system" ausgelesen.

index.php?module=news als beispiel.

hier index.php

PHP:
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
    session_start();
require ("config.php");
require ("core/template.php");
$module = ( !empty($_GET['module']) ? htmlspecialchars($_GET['module']) : false );  
?>

woran liegt es?
Kann mir da jemand helfen!?... komm da überhaupt nicht mehr weiter....

wenn ich Javascript auserhalb einbinde funktioniert es...

PHP:
<script src="script.js" type="text/javascript"> </script>
 
Zuletzt bearbeitet:
Hallo,

um ehrlich zu sein, habe ich nicht verstanden, was denn nun genau das Problem ist. Was funktioniert nicht, wie erwartet?

Schon deine Fehler-Behandlung aktiviert (display_errors, error_reporting)?
 
So,
ich habe mal alles wichtige in eine .zip datei gepackt damit ihr das einfach testen könnt und selber sehen könnt was ich meine.

Mein Problem ist, ich möchte gerne zb. in der Index.html (Mein Template) ein paar Javascript Funktionen einbauen die ich direkt in die Datei schreibe. Das Funktioniert aber nicht. Erst wenn ich sie auslager in eine "script.js" Datei funktionieren die Funktionen. Das soll aber nicht so. Liegt wohl irgendwo an "ob_end_clean();" da der Quellcode aus dem Browser dann so aussieht:

HTML:
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="templates/index.css" rel="stylesheet" type="text/css">
<script>

function hello()

</script>
</head>

wie man sieht ist Funktion "hello" zwar zu sehen, dennoch ohne irgendein inhalt.

Hoffe das ihr nun versteht was ich genau meine^^

Im anhang die .zip Datei mit allen Datein.
 

Anhänge

Ehrlich gesagt finde ich dieses ungewollte Verhalten deines Template-Systems sogar gut. JS sollte meiner Meinung nach immer schön extern sein um Traffic und Zeit zu sparen.
 
hmm okay, es sollte es aber trotzdem können^^ hehe...

najha... gibts sonst verbesserungs vorschläge oder sonstiges!?
 
Liegt wohl irgendwo an "ob_end_clean();"
Der Funktion ist reichlich egal, was sie da ausgibt.

Das Problem ist, dass die geschweiften Klammern die Platzhalter definieren.
Du müsstest den Parser so umschreiben, dass er z.b. nur die geschweiften Klammern ersetzt, auf welche unmittelbar ein String folgt - ohne Umbrüche o. ä. dazwischen.
Somit könntest du ohne Probleme JavaScript in deinen Templates benutzten.

Allerdings - wie Zod schon gesagt hat - ist das Auslagern von JavaScript sehr viel performanter.
Warum soll das bei dir denn nicht funktionieren? :)
 
Zurück