Author Topic: Problem mit setvar()  (Read 894 times)

0 Members and 1 Guest are viewing this topic.

Offline Koppo

  • Newbie
  • *
  • Posts: 2
Problem mit setvar()
on: Thu, 18. September 2008 - 15:09:40
Hallo,

langsam bekomme ich graue Haare... Habe folgendes Problem, konnte dazu leider keine passende Lösung finden. Ich hoffe jemand kann mir helfen. Bin gerade dabei eine Website zu erstellen. Finde das Konzept von Templates recht praktisch weil habe zuvor alles in einem echo Mischmasch gecodet. So nun zu meinem Problem:

Ich habe eine index.php welche ein Template auf index.htm erzeugt. Dort habe ich das gesamte Layout der Seite festgellegt - mit Hilfe von Div Containern.
Wenn der User jetzt einen Link anklickt wird in der Index.php geschaut was er gemacht hat und dementsprechend ein anderes PHP File included. In den includeten Files hab ich wiederum neue Template Objekte.
So, wenn nun jemand sich zum Beispiel einloggen will, dann setzt er mir mit setvar die includierte PHP Datei nicht in die festgelegte {tmpl_var} in der index.htm sondern setzt es außerhalb der div Container. Ich dreh durch  :-X

Ich poste mal den Quellcode verständnishalber.

Das ist die index.php welche ein Templateobjekt von der index.htm erzeugt.

Code: [Select]
<?
session_start();
include("includes/functions.php");
require_once("templates/vlib/vlibTemplate.php");

  $tmpl = new vlibTemplate("templates/html/index.htm");

/** Buttons einfügen **/
$tmpl->setvar("news_link", "<a href=index.php?goto=news id=news></a>");

/** Unteres Menu **/
if(group_check($_SESSION["username"]) == "admin")
$tmpl->setvar("footer_menu", "admin");
else
$tmpl->setvar("footer_menu", "unregistered");

/** Verweise auf die Seiten **/
if($_GET["goto"] == "news"){
$tmpl->setvar("content","Currently no news available...<p>Try again later.");
}
if($_GET["goto"] == "login"){
$tmpl->setvar("content", require_once("login.php"));
}
else
$tmpl->setvar("content","Website launched. Currently im coding on the dynamic content so <br>
it will take some more time! <p>Stay tuned folks!");

/** Alles übernehmen **/
$tmpl->pparse();



?>

Das ist die Index.htm

Code: [Select]
<html>
<head>
<title>Welcome to XXXXXXX.org</title>
<link href="../../styles/style_1.css" type="text/css" rel="stylesheet" >
<script type="text/javascript" src="../../includes/skripte.js"></script>
</head>
<body>
<div class="background">
<!-- Menu Box -->
<div class="menubox">
{ tmpl_var name=news_link escape=none}
</div>
<!-- Menu Box Ende -->

<!-- Inhalt Content -->
<div class="content">
{ tmpl_var name=content escape=none}
</div>
<!-- Ende Inhalt Content -->

<!-- Unteres Menu -->
<div class="footer">
<!-- unregistered -->
<tmpl_if name=footer_menu op=== value=unregistered>               
<a href=index.php?goto=login id=footer>login</a>
</tmpl_if>
<!-- admin -->
</div>
<!-- Ende unteres Menu -->

</div>
</body>
</html>

und sobald ich auf login klicke, welches der folgende code darstellt

Code: [Select]
<?
echo "
<form action= method=post>
<input name=login_name />
<input name=login_password />
<input type=submit name=submit value=login />
</form>
";
?>

setzt er mir das login an den Seitenanfang und nicht in den Div Container. Das gleiche Problem hatte ich mit dem login Link, welchen ich unter Frust schließlich direkt in die index.php eingebunden habe.
Ebenfalls wollte ich den Footer in eine eigene Datei coden, damit er eingebunden wird. Aber dann ist wie gesagt, der Login link nicht im Footer Container sondern am Anfang der Seite...  ??? Eigentlich wollte ich separate Files für die Aufrufe erstellen. Was mache ich falsch? Ich danke schonmals für die Mühe sich den Kram durchzulesen :)

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Re: Problem mit setvar()
Reply #1 on: Thu, 18. September 2008 - 16:43:00
Dein Ansatz ist verkehrt.

Code: [Select]
$tmpl->setvar("content", require_once("login.php"));
=> geht zwar, aber sollte auf keinen Fall gemacht werden.

Ich glaube auch, dass Dir die Funktionsweise von "require_once()" nicht klar ist, sonst würdest so etwas wie oben gar nicht programmieren, aber das hier ist kein PHP-Support-Forum, also ist das erstmal Nebensache.

Die Templatevariable "content" darf nur mit einem STRING belegt werden. Dieser String kann aus Zahlen, Texten, Inhalten einer Datenbank/Datei zusammengestellt werden ... sprich Du kannst den String zusammenstellen wie Du willst.

Da Dein Ansatz verkehrt ist, hast Du folgende Möglichkeiten:
- Modulares Programmieren mit TMPL_INCLUDE
- Modulares Programmieren mit REQUIRE_ONCE

Die Anwendungsbeispiele dazu:
- Beispiel 1: Modulares Programmieren mit TMPL_INCLUDE
- Beispiel 2: Modulares Programmieren mit REQUIRE_ONCE

Bitte entscheide Dich für einen der beiden Ansätze und poste dann nur noch das Modul das nicht funktioniert.

Tipp: Ich würde Deine Menü-Box und den Content zu weiteren Modulen machen. Im Moment bestehen die Module nur aus HEAD und BODY (siehe Doku).

Gruß
Claus

Offline Koppo

  • Newbie
  • *
  • Posts: 2
Re: Problem mit setvar()
Reply #2 on: Thu, 18. September 2008 - 19:40:48
Danke Claus für die schnelle Antwort, werde den Ansatz nochmals überarbeiten!
MFG