Templates und kein HTML in PHP

A

andyK

Hallo,


Bis jetzt habe ich es bei meiner Seite so, dass PHP und HTML
komplett voneinander getrennt sind.
Alles wird bisher an Platzhalter übergeben.

Nun möchte ich (mal abgesehen vom Menü, wo ich das gleiche
Problem habe) in meine Seite ein Voting in Tabellenform einbauen.

Wie muss die Funktionen und das entsprechende Template aussehen,
um x-Mal <td>...</td> darzustellen?
Ich will das nicht in den Code schreiben (müssen).

die Templates meiner anderen Boxen haben folgenden HTML Code:

HTML:
<table border="0" cellpadding="5" cellspacing="0" width="140">
	<tr>
	   <td class="linkheader">{titel}</td>
	</tr>

	<tr>
	   {inhalt}
	</tr>

	<tr>
	   <td style="HEIGHT: 10px; BACKGROUND-COLOR: #ffffff"></td>
	</tr>
</table>


Titel und Inhalt stammen dabei aus einer Textdatei, die folgendermaßen
Aufgebaut ist:


<? /*
ID,BOXNAME,POSITION,ANONYM,LOGGEDIN,TPL,SOURCE,
0,Statistik,r,1,0,stat.tpl.html,<td style="BORDER-BOTTOM: #027 1px solid" class="boxbground" align="left">{datum}<br>{uhrzeit}<br>{online}<br>{heute}<br>{gestern}<br>{gesamt}</td>,
*/ ?>


Bisher hab ich nur Boxen (und zwangsweise auch das Menü), deren Inhalt
statisch, bzw.ebenfalls wieder mit Platzhaltern gefüllt ist.
Nur das Ergebnis IST DANN HALT SO und das ist mein Problem.

Bei dem Voting zum Beispiel können ja als Vote-Möglichkeit mal zwei oder
mal fünf mögliche Antworten zur Auswahl stehen. Und halt jede Auswahl soll
sein eigenes <td>...</td> bekommen.

Ich dachte so vielleicht an ein zweites Template, welches dann in etwa
so aufgebaut ist:

HTML:
<td><input type="radio" name="answer" value={vzaehler}>{option}</td>

Also, dass er eben sooft, wie Möglichkeiten da sind, dieses Template
mit einbaut und mit entsprechenden Inhalt füllt.

Dieses "zweite" Template wäre dann praktisch x-Mal mein {inhalt} aus
dem ersten Template.
Woraus sich meine zweite Frage stellt:

Wie schreibe ich das als Source in meine Textdatei?
In dem Beispiel oben für die
Statistik war das ja einfach. Aber hier muss ich ja ein weiteres Template laden.


Geht das so irgendwie zu machen?

Hier nochmal als Beispiel der komplette Code, um z.B. meine Statistiken
in einer Box anzuzeigen:

PHP:
  function tplload($file)
  {
     // öffnet Datei und weißt den Inhalt später einer Datei zu
    global $conf;
    if($fp = @fopen("themes/standard/tpl/".$file, "r"))
    {
      $tpl = fread($fp, filesize("themes/standard/tpl/".$file));
      fclose ($fp);
    }
    else $tpl = "Template konnte nicht geöffnet werden (themes/standard/tpl/$file)";
    return $tpl;
  }

//Funktion, um Tamplates anzuzeigen
  function tplprint($tpl, $repla)
  {
    foreach($repla as $key=>$elem)
    {
      $tpl = str_replace("{".$key."}", $elem, $tpl);

    }
    return $tpl;
  }

//-----------------------------------------------

//Mit dieser Funktion durchsuche ich die Datenbank, in der die Boxen definiert sind
//und zeige die Boxen dann entweder links oder rechts an (weiter unten)
function boxes($seite)
{
	global $conf, $boxen_db, $menu_db,$seiten_menu;


	if($boxen_db->seek(array("POSITION"=>$seite)) >= 0)
    {
       for($i=0;$i<$boxen_db->zeilen;$i++)
       {
         if($boxen_db->zeile[$i]["POSITION"] == $seite)
         {

     		$tpl = tplload("boxes/".$boxen_db->zeile[$i]["TPL"]);
     		$boxes .= tplprint($tpl, array("titel" => $boxen_db->zeile[$i]["BOXNAME"],
     							           "inhalt" => HTML_CODE($boxen_db->zeile[$i]["SOURCE"])) );
         }
       }
    }


    return $boxes;


}

//-------------------------------------------------


//Mit dieser Funktion wird all das ausgegeben, was in den Funktionen vorher 
//ermittelt wurde
  function finalize()
  {
    global $conf, $datum, $uhrzeit, $online, $heute, $gestern, $gesamt, $copyright, $pagename;

    $tpl = tplload($this->stpl."/index.tpl.html");

    echo tplprint($tpl, array_merge(array(
    "copyright" => $copyright,
    "pagename" => $pagename,
    "left_boxes" => $this->boxes("l"),
    "right_boxes" => $this->boxes("r"),
    "datum" => "Datum: $datum",
    "uhrzeit" => "Zeit: $uhrzeit",
    "online" => "Online: $online",
    "heute" => "Heute: $heute",
    "gestern" => "Gestern: $gestern",
    "gesamt" => "Gesamt: $gesamt";
    exit;
  }
}

Wär wirklich toll, wenn ihr mir da weiterhelfen könntet.

PS: Die Codes sind alle irgendwoher kopiert und solange verändert worden, bis sie
funktioniert haben. So nach dem Motto: Learning By Doing
 
Hat niemand eine Idee?


Da ich das Problem auch mit dem Menü habe, hab ich mal
versucht, eine Lösung zu basteln.

Hier mal die Funktion:

PHP:
function getmenu($id)
{
	for($i=0;$i<$menu_db->zeilen;$i++)
	{
	    $mp = tplload("boxes/menuinhalt.tpl.html");

	    $menuinhalt = tplprint($mp, array("menuname" => $menu_db->zeile[$i]["MENUNAME"],
								      "link" => $menu_db->zeile[$i]["DATEI"]) );
	}
   return $menuinhalt;
}

In der function boxes ($seite) habe ich folgende Zeile eingebaut:

PHP:
if($boxen_db->zeile[$i]["MENUID"])$boxen_db->zeile[$i]["SOURCE"] = $this->getmenu($boxen_db->zeile[$i]["MENUID"]);

In meiner Datenbank hab ich noch MENUID, welche den Wert 0 oder 1 haben kann, mit reingeschrieben.

Jetzt sollte doch eigentlich beim Erstellen der Boxen überprüft werden, ob sich
eine Box um ein Menü handelt.
Wenn ja, dann soll die Funktion getmenu($id) ausgeführt werden und {inhalt} mit deren Ergebnis gefüllt werden.

Nur da passiert nix. Aber warum?

Habt ihr ne Idee oder die Lösung?

Die neue boxes-Funktion:

PHP:
function boxes($seite)
{
	global $conf, $boxen_db, $menu_db,$seiten_menu;


	if($boxen_db->seek(array("POSITION"=>$seite)) >= 0)
    {
       for($i=0;$i<$boxen_db->zeilen;$i++)
       {
         if($boxen_db->zeile[$i]["POSITION"] == $seite)
         {

     		$tpl = tplload("boxes/".$boxen_db->zeile[$i]["TPL"]);


     		if($boxen_db->zeile[$i]["MENUID"])$boxen_db->zeile[$i]["SOURCE"] = $this->getmenu($boxen_db->zeile[$i]["MENUID"]);

     		$boxes .= tplprint($tpl, array("titel" => $boxen_db->zeile[$i]["BOXNAME"],
     							           "inhalt" => HTML_CODE($boxen_db->zeile[$i]["SOURCE"])) );
         }
       }
    }


    return $boxes;


}
 
Ich bin über jedes Feedback dankbar.
Egal, ob es mir hilft oder nicht.
Nur Antworten. BITTE
 
Wenn jemand eine Lösung für dein Problem hat, dann wird er dir schon helfen, also hör bitte auf den Thread permanent wieder nach oben zu pushen, sonst muss ich den mal zu machen.
 
gute frage ob ich dein problem genau verstehe aber da ich net viel zeit hab´veruch ich mal n denkansatz zu geben , die Platzhalter lässt du repleacen mit einer Var , in dieser var müsste praktisch nur der htmlcode des templates 2 stehn den d4 w5derr40 repleacen kannst etc

zb.
PHP:
$var ="";

$var.=" etc irgendwas wideranfügen";

praktisch also einfach immer wider zur repleacevar den html code hinzufügen , hoffe mal das wolltest du wissen k cu
 
Vielen Dank für deine Antwort.

Weil ich nicht weiterkam, hatte ich mich erstmal um andere Dinge gekümmert.

Mein zweites Hobby: Remixen und Hitmixe produzieren :)

Heute hab ich mich nochmal dran gesetzt, selber eine Lösung zu finden.
Und: ICH HAB SIE... :)

Es lag an dieser Zeile:

PHP:
global $conf, $menu_db;

Die hab ich in meine getmenu Funktion geschrieben und es hat auf einmal
funktioniert.

Nun wird mein Menü aus einer Datenbank geladen, sodass ich Punkte
einfach über den Adminbereich hinzufügen, löschen, bearbeiten kann.

Ebenso das mit dem Voting. Easy neue Frage und Antworten schreiben
und fertig. :)

Ich glaub, ich muss mich nochmal in ruhe mit dem "global-Problem"
auseinandersetzen. Denn die Lösung war mehr oder weniger nur ein
verzweifelter Versuch.

Glück. (Hätt heut vielleicht mal Lotto spielen sollen...)

Also dann, bis zur nächsten Frage...

Andy
 
Zurück