PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP > Smarty > Include > Variablen übergeben


Werbung

Dharma
21-04-2006, 11:51
Hallo ich hab hier ein kleines Problem

Ich habe ein Template für eine Webseite mit Smarty gebastelt.
In der Index.php steht das drin:

<?php

// load Smarty library
require('d:/smarty/libs/Smarty.class.php');



$smarty = new Smarty;

$smarty->template_dir = 'd:/programme/xampp/htdocs/smarty/templates';
$smarty->config_dir = ' d:/programme/xampp/htdocs/smarty/config';
$smarty->cache_dir = 'd:/smarty/cache';
$smarty->compile_dir = 'd:/smarty/templates_c';


$smarty->display('home/index.tpl');


?>

in meiner index.tpl wird dann mittels include der content eingefügt


{include file='$ordner/index.tpl'}

in der navigation übergebe ich den bereich für den ordner


<a href="index.php?ordner=unternehmen&seite=index.tpl" class="nav2">Unternehmen</a>

ich kenn mich eigentlich ueberhaupt nicht gut aus in php, also bitte nicht gleich lachen wenn ihr das lest..
jedenfalls wie krieg ich die variablen übermittelt? wo muss ich das angeben, damit der sie in der index.tpl ausliest?

Gruss HotChili

can_rebooted
21-04-2006, 12:28
Hallo ich hab hier ein kleines Problem

Ich habe ein Template für eine Webseite mit Smarty gebastelt.
In der Index.php steht das drin:


in meiner index.tpl wird dann mittels include der content eingefügt



in der navigation übergebe ich den bereich für den ordner



ich kenn mich eigentlich ueberhaupt nicht gut aus in php, also bitte nicht gleich lachen wenn ihr das lest..
jedenfalls wie krieg ich die variablen übermittelt? wo muss ich das angeben, damit der sie in der index.tpl ausliest?

Gruss HotChili
du musst du die GET-Variable auswerten
so

$ordner=$_GET['ordner'];
besser aber so (hab lange kein PHP mehr gemacht - evtl. nicht 100% richtig)

{include file=$_GET['ordner'].'/index.tpl'}

ich hätte ubrigens nicht smarty als template-engine genommen. falls du noch am anfang deines projektes stehst, dann empfehle ich dir auf tinybutstrong (http://www.tinybutstrong.com/) umzuschwenken.

ein tipp noch am rande. ändere mal das ...

<a href="index.php?ordner=unternehmen&seite=index.tpl" class="nav2">Unternehmen</a>

auf...


<a href="index.php?ordner=unternehmen&amp;seite=index.tpl" class="nav2">Unternehmen</a>

...dann klappts auch in sachen w3c ;)

Dharma
21-04-2006, 14:06
vielen lieben dank,
aber irgendwie bekomm ich das nicht ausgelesen.
der will die variable einfach nicht uebernehmen und ich verstehe nicht warum
kann ne konfiguration falsch sein?

can_rebooted
21-04-2006, 15:12
also wenn in der URI die Anfrage (?xyz= oder &xyz=) enthalten ist, muss eigtl. auch die superglobale ($_GET['xyz']) den wert enthalten.

http://de2.php.net/manual/de/reserved.variables.php#reserved.variables.get
PHP: Vordefinierte Variablen - Manual

du kannst natürlich auch mal zum probieren in der php.ini die register_global auf on stellen - vielleicht gehts dann ... das wäre dann aber nicht sauber programmiert

http://de2.php.net/manual/de/security.globals.php
PHP: Verwendung von Register Globals - Manual

Dharma
21-04-2006, 15:57
vielen dank ich schau gleich mal am montag. fuer heute hab ich es aufgegeben :D

can_rebooted
21-04-2006, 16:17
ääähm mir fällt grade noch was ein ... kann es sein, dass du die variable nur innerhalb von der index.php verfügbar hast und gar nicht im template? dann müsstest du nämlich die variable noch dahin mit übergeben.

assign(string varName, mixed var)

Diese Funktion wird genutzt, um Variablenwerte in die Liste einzutragen,
welche dann dem Template übergeben werden.

$smarty->assign('myWorld', "Hallo World.");
$smarty->assign('this_site', $_SERVER['PHP_SELF']);

Dharma
24-04-2006, 09:11
irgendwie klappt bei mir garnichts mehr, bin schon fast am verzweifeln...
ich krieg nur noch die fehlermeldung
Fatal error: Cannot redeclare class smarty in d:\smarty\libs\Smarty.class.php on line 65

can_rebooted
24-04-2006, 09:44
http://www.php-faq.de/faq-single.html#fehler-class-redeclare
FAQ der Newsgroups de.comp.lang.php.* - alles in einer einzigen Datei

Dharma
24-04-2006, 10:08
du bist spitze :d:

;)

Dharma
24-04-2006, 10:58
duhu, nochmal ne frage.
ich bin echt panne ich weiss :(

ich bekomm den fehler

Notice: Undefined index: ordner in D:\Programme\xampp\htdocs\index.php on line 7

wie definier ich des denn?

Misel
24-04-2006, 11:33
Ist kein Fehler, sondern nur eine Notiz ;)

Ohne die Datei nun genau zu kennen, vermute ich, dass Du in Zeile 7 $_GET['xyz'] abfragst. Wenn du den Parameter nun in der URI nicht übergibst, dann kann er da auch nix finden.

Ist alles nicht so schlimm, da Du irgendwie deine Programmlogik danach gestalten musst.

Dharma
24-04-2006, 11:51
achso ok... hab ich verstanden, danke :)

Dharma
24-04-2006, 15:16
also bei mir funzt des ned, ich bekomme die variable von der navigation einfach nicht übergeben, egal wie ich es drehe...

woran kann das bloss liegen?

Misel
24-04-2006, 23:03
zeich mal her den Code

Dharma
25-04-2006, 07:41
hallo ich hab hier die etwas kleinere version als test...

der link schaut so aus in der navi:
<a href="index.php?bereich=test">test</a>

meine index.php so:


<?php
// load Smarty library
require("D:/programmierung/smarty/libs/Smarty.class.php");

$bereich = $_REQUEST[bereich];

$smarty = new Smarty;

$smarty->template_dir = "D:/programmierung/xampp/htdocs/smarty/templates/";
$smarty->config_dir = "D:/programmierung/xampp/htdocs/smarty/configs/";
$smarty->cache_dir = "D:/programmierung/smarty/cache/";
$smarty->compile_dir = "D:/programmierung/smarty/templates_c/";


$smarty->assign("meldung","es klappt!");




$smarty->display("index.tpl");
?>

und die ausgabe schaut so aus:


<html>
<body>



<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="150">{include file='navigation.tpl'}</td>
<td width="10"></td>
<td width="400"> Dies ist der Content<br> Hallo, {$meldung}
<br> {include file='$bereich/index.tpl'}



</td>
</tr>
</table>

</body>
</html>


was bitte mach ich falsch?? bin schon am verzweifeln
hilfe dringenst erwünscht

Dharma
25-04-2006, 10:34
es funktioniert jetzt!!!!

die variable wurden nicht uebergeben weil ich das im include mit einfachen anführungsstrichen angegeben habe!!

danke fuer eure bemuehungen, sehr nett!!

Misel
25-04-2006, 23:17
Ich habe trotzdem noch eine Anmerkung zu der Zeile:


$bereich = $_REQUEST[bereich];


Zum einen wundert es Mich, dass du damit den Wert bekommst. Denn eigentlich müsstest Du "bereich" in Hochkommata oder Anführungszeichen setzen.

Zum anderen, finde ich, ist $_REQUEST schlechter Stil, weil man nicht mit Sicherheit sagen kann, über welche Wege man an die Daten gekommen ist.

GET und POST haben im Web verschiedene Bedeutungen, die von vielen nicht berücksichtigt werden. GET gibt Daten aus, daher der Name. POST ändert Daten. Deshalb werden diese auch anders übertragen. Wenn Du Datenänderungen per GET machst, kann das seltsame Auswirkungen haben. Bestes Beispiel, dass ich mal gelesen habe: Eine Art CMS mit der Löschfunktion über GET. Dann lief einmal der Googlebot rüber, ist ALLEN, also auch den Löschlinks gefolgt und die Daten waren wech.

Klar, sollte man solche Funktionen auch noch anderweitig schützen und viel hat das auch nicht mit dem zu tun, was Du da machst. Aber ich möchte Dich wenigstens ein bisschen darauf sensibilisieren. :)

Ich würde diese Zeile so schreiben:


$bereich = $_GET['bereich'];


Und wenn ich ganz paranoid bin, noch einen Sanitycheck durchführen. $bereich <= $max && $bereich >= $min und vorher einen Defaultwert einführen uws. usf.

Denke daran, das Web ist BÖSE. Den Daten, die Du bekommst, kannst Du nicht trauen ;)