Templateprogrammierung

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Toflar
Mitglied
Beiträge: 95
Registriert: 25.07.2005 16:06
Wohnort: Lyss (CH)
Kontaktdaten:

Templateprogrammierung

Beitrag 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?
Benutzeravatar
Banger
Ehemaliges Teammitglied
Beiträge: 375
Registriert: 03.05.2005 21:53
Wohnort: Düsseldorf
Kontaktdaten:

Re: Templateprogrammierung

Beitrag 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 :)
Benutzeravatar
Toflar
Mitglied
Beiträge: 95
Registriert: 25.07.2005 16:06
Wohnort: Lyss (CH)
Kontaktdaten:

Beitrag 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;
}
fanrpg
Mitglied
Beiträge: 2909
Registriert: 13.12.2004 22:41

Beitrag 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; 
}
Benutzeravatar
Toflar
Mitglied
Beiträge: 95
Registriert: 25.07.2005 16:06
Wohnort: Lyss (CH)
Kontaktdaten:

Beitrag von Toflar »

*phaaaaaf* :grin: :grin:

Soooo doof echt^^

Danke dir, ich gucks heut Abend mal an, aber scheint jetzt zumindest viel logischer^^
Benutzeravatar
Banger
Ehemaliges Teammitglied
Beiträge: 375
Registriert: 03.05.2005 21:53
Wohnort: Düsseldorf
Kontaktdaten:

Beitrag 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 :)
Fundus
Mitglied
Beiträge: 488
Registriert: 29.03.2004 21:22

Re: Templateprogrammierung

Beitrag 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
Benutzeravatar
Banger
Ehemaliges Teammitglied
Beiträge: 375
Registriert: 03.05.2005 21:53
Wohnort: Düsseldorf
Kontaktdaten:

Re: Templateprogrammierung

Beitrag 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.
Patrik
Mitglied
Beiträge: 208
Registriert: 23.04.2005 13:30
Wohnort: Hallein

Re: Templateprogrammierung

Beitrag 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?
Die 3 größten Feinde eines Programmierers: Sonnenlicht, Frischluft und das unerträgliche Gebrüll der Vögel...
Jede Beseitigung eines Programmfehlers ruft Zwei neue hervor.
Antworten

Zurück zu „Coding & Technik“