Seite 1 von 1

Templateprogrammierung

Verfasst: 03.07.2006 20:10
von Toflar
Hallo Leuts!

Ich versuch euch mal meine Templateprogrammierung zu erklären, damit ihr mir dann auch eine anständige Antwort liefern könnt^^
main.htm

Code: Alles auswählen

<div id="Inhalt"><@inhalt@></div>
base.inc.php

Code: Alles auswählen

$base['inhalt'] = 'texttexttexttext';
$base['template'] = 'templates/main.htm';
index.php

Code: Alles auswählen

$template = str_replace('<@inhalt@>',$base['inhalt'],$template);
So, hoffe das reicht, damit ihr wisst, wie ich das organisiere^^

Nun möchte ich aber beim Inhalt nicht einfach den Text ersetzen lassen, sondern mit Hilfe einer Funktion aus einer MySQL-DB auslesen.
Dabei krieg ich folgendes Bild:

Code: Alles auswählen

$template = str_replace('<@inhalt@>',get_inhalt(),$template);
Die Funktion wird korrekt ausgeführt, aber leider wird das Ganze nicht am richtigen Ort angezeigt, sondern einfach am Anfang der ausgegebenen Datei, d.h. sogar noch vor dem <html>-Tag.

Ich habe so die leise Vermutung, dass man die Platzhalter gar nicht durch Funktionen ersetzen kann.

Wenn doch: Was hab ich falsch gemacht?
Wenn nicht: Was ist die Lösung für meinen Wunsch?

Re: Templateprogrammierung

Verfasst: 03.07.2006 20:26
von Banger
Toflar hat geschrieben:Ich habe so die leise Vermutung, dass man die Platzhalter gar nicht durch Funktionen ersetzen kann.
Ich habe die leise Vermutung, dass Du in get_inhalt() ein echo ausführst :)

Verfasst: 03.07.2006 23:33
von Toflar
Da hast du so ziemlich Recht, aber ich hab kA wie ichs lösen kann^^

Los raus damit^^
/* Navigation laden */
function get_navigation() {
include('inc/database.inc.php');
$tmprslt = '';
$connection = mysql_connect($db['host'],$db['uid'],$db['pwd']);
if($connection)
{
mysql_select_db($db['db']);
$sql = "SELECT id, name FROM `imhp_content_und_menu`";
$result = mysql_query($sql);
if($result) {
while ($daten=mysql_fetch_row($result)){
echo "<li><a href=\"index.php?id=".$daten[0]."\">".$daten[1]."</a></li>";
}
}
mysql_close();
}
return $tmprslt;
}

Verfasst: 04.07.2006 00:45
von fanrpg

Code: Alles auswählen

/* Navigation laden */ 
function get_navigation() { 
include('inc/database.inc.php'); 
$tmprslt = ''; 
$connection = mysql_connect($db['host'],$db['uid'],$db['pwd']); 
if($connection) 
{ 
mysql_select_db($db['db']); 
$sql = "SELECT id, name FROM `imhp_content_und_menu`"; 
$result = mysql_query($sql); 
if($result) { 
while ($daten=mysql_fetch_row($result)){ 
$tmprslt = "<li><a href=\"index.php?id=".$daten[0]."\">".$daten[1]."</a></li>"; 
} 
} 
mysql_close(); 
} 
return $tmprslt; 
}

Verfasst: 04.07.2006 08:00
von Toflar
*phaaaaaf* :grin: :grin:

Soooo doof echt^^

Danke dir, ich gucks heut Abend mal an, aber scheint jetzt zumindest viel logischer^^

Verfasst: 04.07.2006 10:25
von Banger
So, und jetzt das ganze auch noch sauber: :)

Code: Alles auswählen

/* Navigation laden */ 
function get_navigation() { 
  include('inc/database.inc.php'); 
  $tmprslt = ''; 
  $connection = mysql_connect($db['host'],$db['uid'],$db['pwd']) or trigger_error(mysql_error(), E_USER_ERROR); 
  mysql_select_db($db['db'], $connection) or trigger_error(mysql_error($connection), E_USER_ERROR); 
  $sql = 'SELECT id, name FROM `imhp_content_und_menu`'; 
  $result = mysql_query($sql, $connection) or trigger_error(mysql_error($connection), E_USER_ERROR); 
  while ($daten=mysql_fetch_row($result, MYSQL_ASSOC)) 
    $tmprslt .= '<li><a href="index.php?id='.$daten['id'].'">'.htmlentities($daten['name']).'</a></li>'; 
 
  mysql_close($connection); 
  return $tmprslt; 
}
BTW: man sollte schon "$tmprslt .= '<li>.." schreiben und nicht jedes mal den Variablenwert neu zuweisen :)

Re: Templateprogrammierung

Verfasst: 04.07.2006 10:42
von Fundus
Toflar hat geschrieben:...

Code: Alles auswählen

$template = str_replace('<@inhalt@>',get_inhalt(),$template);

...
Ich habe so die leise Vermutung, dass man die Platzhalter gar nicht durch Funktionen ersetzen kann.
wieso nicht preg_replace mit modifikator "e"

Code: Alles auswählen

$template = preg_replace('#\<@inhalt@\>#e', 'get_inhalt()',$template);
anders kann man IMO eine funktion nicht in einer ersetzung ausführen

Re: Templateprogrammierung

Verfasst: 04.07.2006 12:23
von Banger
Fundus hat geschrieben:wieso nicht preg_replace mit modifikator "e"
Weil's in diesem Fall überflüssig wäre. Sinn ergäbe es erst dann, wenn man ein Teilergebnis des Suchmusters an die Funktion übergeben wollte, hier geht es aber nur darum, einen String durch einen anderen String (=dem Return-Value der Function) zu ersetzen.
Fundus hat geschrieben:anders kann man IMO eine funktion nicht in einer ersetzung ausführen

Code: Alles auswählen

<?php

function tst() {#{{{
    return 'bla';
}#}}}

$str = 'blubb bla bla';

echo str_replace('blubb', tst(), $str);

?>
Output: bla bla bla, q.e.d.

Re: Templateprogrammierung

Verfasst: 04.07.2006 13:17
von Patrik
Toflar hat geschrieben:main.htm

Code: Alles auswählen

<div id="Inhalt"><@inhalt@></div>
base.inc.php

Code: Alles auswählen

$base['inhalt'] = 'texttexttexttext';
$base['template'] = 'templates/main.htm';
index.php

Code: Alles auswählen

$template = str_replace('<@inhalt@>',$base['inhalt'],$template);
Wieso steht in der index.php bei der zu ersetztenden stelle $template? Müsste da nicht $base['template'] stehen?