php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.12.2009, 21:40  
Erfahrener Benutzer
 
Registriert seit: 02.12.2009
Beiträge: 104
PHP-Kenntnisse:
Anfänger
abdullah befindet sich auf einem aufstrebenden Ast
abdullah eine Nachricht über Skype™ schicken
Standard [Erledigt] Inhalt einer Template Datei in eine andere Template - Datei includieren

hallo leute,
ich habe angefangen mit dem Template Engine Smarty meine ersten Versuche zu machen.

Leider verstehe ich nicht weshalb meine Ausgabe beim includieren eines Inhaltes von der *.tpl - Datei in eine andere *.tpl - Datei nicht die gewünschten ausgaben anzeigt:

Hier der Quellcode des Browsers als Ausgabe:
PHP-Code:
&copy2009<div></div><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<
title>Ein erster Test mit Smarty</title>
</
head>
<
body>
    
Ich wohne in Köln.
    
    <
div></div></body>
</
html
wie kann ich den Inhalt vor dem code <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" .... usw. zwischen den beiden div tags im body hinzufügen? was mache ich beim includieren falsch?

ich habe die ursprüngliche Smarty - klasse erweitert:
PHP-Code:
<?php
    date_default_timezone_set
("Europe/Berlin");
    
define("SMARTY_DIR""../libs/");
    require_once 
SMARTY_DIR "Smarty.class.php";
    
    class 
MeinSmarty extends Smarty
    
{
        public function 
__construct()
        {
            
parent::__construct();
            
$this->template_dir "templates/";
            
$this->compile_dir "templates_c/";
            
$this->config_dir "config/";
            
$this->cache_dir "cache/";
            
$this->caching false;
        }
    }
?>
und folgenden code geschrieben, die mir MeinSmarty - Klasse erweitert und somit auch den Copyright zurück gibt.

PHP-Code:
<?php
    
require_once "meinsmarty.php";
    
    class 
MyFooter extends MeinSmarty
    
{
        public 
$copyright "&copy; ";
        public function 
__construct()
        {
            echo 
$this->copyright date("Y");
        }
    }
    
    
$footer = new MyFooter();
    
$footer->display("footer.tpl");
?>
Der Inhalt meines footer.tpl sieht wie folgt aus:
PHP-Code:
<div>{$copyright}</div
An die Stelle des Ankers {$copyright} soll der Copyright stehen.

ich includiere diesen footer.tpl in meiner index.tpl - Datei wie folgt:
PHP-Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"
>
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<
title>{$neuertitel}</title>
</
head>
<
body>
    
Ich wohne in {$stadt}.
    
    {include 
file="footer.tpl"}
</
body>
</
html
Die anderen Anker wie {$neuertitel} und {$stadt} werden durch einen Instanz der Klasse MeinSmarty wie folgt angezeigt:
PHP-Code:
$smarty->assign("neuertitel"$meintitel);
$smarty->assign("stadt"$meinestadt);
$smarty->display("index.tpl"); 
gibt es eine Möglichkeit den Anker für das copyright anzusprechen wie die anderen beiden anker laut vorhandener Code?
lg abdullah
abdullah ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 14.12.2009, 13:42  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Du musst immer alle Variablen auch mitgeben. Sprich: Dir fehlt das $smarty->assign("copyright", ....

Dein Code um den Footer komplett zu kompilieren ist vollständig überflüssig.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 14.12.2009, 16:19  
Erfahrener Benutzer
 
Registriert seit: 02.12.2009
Beiträge: 104
PHP-Kenntnisse:
Anfänger
abdullah befindet sich auf einem aufstrebenden Ast
abdullah eine Nachricht über Skype™ schicken
Standard

hallo erstmals,

Zitat:
Zitat von mepeisen Beitrag anzeigen
Du musst immer alle Variablen auch mitgeben. Sprich: Dir fehlt das $smarty->assign("copyright", ....
du hast recht ich kann auch durch $smarty->assign("copyright",...); ausgeben lassen, was ich aber eher haben möchte ist, dass die Inhalte mehrere template Dateien includiert werden, genau so wie bei einem normalen include...


Zitat:
Zitat von mepeisen Beitrag anzeigen
Dein Code um den Footer komplett zu kompilieren ist vollständig überflüssig.
später möchte ich vielleicht mehrere objekte anderer Klassen in eine einzige Template - Datei einbinden, daher war meine Frage, wie ich es mache mit dem includieren...

lg abdullah
abdullah ist offline   Mit Zitat antworten
Alt 14.12.2009, 16:31  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Du hast eine Smarty-Instanz. Diese eine Smarty-Instanz kompiliert dann sowohl die index.tpl als auch nach Anweisung des Includes die footer.tpl. Aus Sicht von Smarty ist das ein Template mit Subtemplate. Das sind keine zwei unabhängigen Templates oder zwei unabhängigen Klassen.

Du hast zwei mögliche Lösungen aus dieser Misere:
1. Du baust es so, dass allgemeine Variablen immer per "->assign" gesetzt werden, unabhängig davon, ob das Include benutzt wird oder nicht
2. Du erweiterst Smarty und baust eine Funktion, die bei Bedar bei einem Include weitere Variablen einbindet. Schaue ins Smarty-Handbuch, wie man Smarty-Plugins schreiben kann.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 14.12.2009, 20:27  
Erfahrener Benutzer
 
Registriert seit: 02.12.2009
Beiträge: 104
PHP-Kenntnisse:
Anfänger
abdullah befindet sich auf einem aufstrebenden Ast
abdullah eine Nachricht über Skype™ schicken
Standard

hi,
danke für die Hilfe, jetzt klappt es

lg abdullah
abdullah ist offline   Mit Zitat antworten
Alt 01.02.2011, 23:27  
Neuer Benutzer
 
Registriert seit: 26.01.2011
Beiträge: 25
PHP-Kenntnisse:
Anfänger
panica befindet sich auf einem aufstrebenden Ast
Standard

hallo,

Ich glaube ich habe ein ähnliches Problem. Schade dass der abdullah seine Lösung nicht geposted hat. Könnte mir wahrscheinlich helfen. Nun ja also hier sind meine Kopfschmerzen.

Habe mich über PHP und Smarty eine Woche lang belesen und sehe langsam den Wald vor lauter Bäumen nicht mehr. Es gibt zu viel Information. Aber das Schlimme ist ja, dass jedes Mal was anderes geschrieben wird. Deswegen möchte folgendes fragen.

Ich möchte in meine intex.tpl die blog.tpl includen, aber der zeigt mir dann nur den Inhalt meiner blog.tpl ohne den dazugehörigen code(blog.php). Und wenn ich meine URL mit /blog.php aufrufe dann zeigt er mir die Blogs.

Habe Smarty 3 installiert und mit dem Code von Smarty die Pfade überprüft. Die Ausgabe zeigte das alle ok sind

Smarty Installation test...
Testing template directory...
/users/zerg/www/temp/ is OK.
Testing compile directory...
/users/zerg/www/smarty/temp_c/ is OK.
Testing plugins directory...
/users/zerg/www/smarty/plugins/ is OK.
Testing cache directory...
/users/zerg/www/smarty/cache/ is OK.
Testing configs directory...
/users/zerg/www/smarty/configs/ is OK.
Tests complete.

Sorry wenn etwas unverständlich oder falsch ist. Ist mein erster Post.


meine index.php
Code:
<?php
require('smarty/Smarty.class.php');

$smarty = new Smarty;

$smarty->testInstall();

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

?>
meine index.tpl
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title></title>
</head>
<body>    
    {include file="blog/blog.tpl"}
</body>
</html>
meine blog.php
Code:
<?php
require('smarty/Smarty.class.php');
$smarty = new Smarty;


$db = @new mysqli('localhost', '******', '******', '******');
if (mysqli_connect_errno()) {
    die ('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
}

$sql = 'SELECT
      title,
      story,
      user.id,
      story.id,
      date_posted,
      username,
      userid
   FROM
      blog_story
   INNER JOIN
      user
   ON
      userid = user.id
   ORDER BY osdate_blog_story.id DESC LIMIT 8';

$result = $db->query($sql);
if (!$result) {
    die ('Etwas stimmte mit dem Query nicht: '.$db->error);
}

$blogliste = array();

while ($row = $result->fetch_assoc()) {  // NULL ist äquivalent zu false
    // $row ist nun das Array mit den Werten

   $blogliste[] = $row;

}

$result->close();
unset($result); // und referenz zum objekt löschen, brauchen wir ja nicht mehr...

$smarty->assign('blogliste',$blogliste);

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

?>
meine blog.tpl
Code:
{strip}

<link href="{$css_path}startseite/werbeanzeigen/default.css" rel="stylesheet" type="text/css" />

<table width="623" border="0" cellpadding="0" cellspacing="0">



<tr>
	<td height="3">
	</td>
</tr>


{foreach from=$blogliste item=row}
<tr>
	<td height="7">
	</td>
</tr>
	<tr>
		<td height="46">
			<table border="0" cellpadding="0" cellspacing="0">
				<tr>
					<td width="10">
					</td>
					<td width="48">
						<a href="http://zerg.bplaced.net/showprofile.php?id={$row.userid}"><img border="0" src="getsnap.php?id={$row.userid}&typ=tn" width="48" height="38"></a>
					</td>
					<td width="9">
					</td>
					<td width="379" height="46" valign="middle">

						<a class="blog_titel" href="http://zerg.bplaced.net/viewblog.php?id={$row.id}" target="_top">{$row.title|truncate:115:"...":true}</a>

					</td>
					<td width="170" align="right" valign="middle">
						<font style="font-family:Arial; font-size:11px; color:#979797;">am {$row.date_posted|date_format:$lang.DATE_FORMAT}<br></font>

						<a class="blog_username" href="http://zerg.bplaced.net/showprofile.php?id={$row.userid}">{$row.username}</a>
					</td>
					<td width="11">
					</td>
				</tr>
			</table>
		</td>
	</tr>
<tr>
	<td height="7">
	</td>
</tr>
	<tr>
		<td>
			<table border="0" cellpadding="0" cellspacing="0">
				<tr>
					<td width="10">
					</td>
					<td height="1" width="602" bgcolor="#DBDBDB" style="background-image:url({$image_dir}blog_trennlinie.jpg); background-repeat:repeat-x; background-position:bottom;">
					</td>
					<td width="11">
					</td>
				</tr>
			</table>
		</td>
	</tr>
{/foreach}

</table>
      		



{/strip}
panica ist offline   Mit Zitat antworten
Alt 02.02.2011, 09:44  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

Insofern du Smarty 3 benutzt solltest du nicht Includen sondern extenden.

Deine blog.tpl ist die Datei die den eigentlichen Content in das von index.tpl vorgegebene "Layout" reindrücken möchte. Du kannst dort Felder ( Blöcke ) vorgeben und diese dann füllen. Das geht einfacher als einen "Wald" aus Includes zu erstellen:

index.tpl
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>{block name="title"}{/block}</title>
{block name="css"}{/block}
</head>
<body>    
    {block name="content"}Ups, hier hat wer die Falsche Datei ge-displayed :({/block}
</body>
</html>

blog.tpl
Code:
{extends file="index.tpl"}
{block name="title"}Tolle Seite - {$page.title}{/block}
{block name="css"}
<link href="{$css_path}startseite/werbeanzeigen/default.css" rel="stylesheet" type="text/css" />
{/block}
{block name="content"}

<table width="623" border="0" cellpadding="0" cellspacing="0">



<tr>
	<td height="3">
	</td>
</tr>


{foreach from=$blogliste item=row}
<tr>
	<td height="7">
	</td>
</tr>
	<tr>
		<td height="46">
			<table border="0" cellpadding="0" cellspacing="0">
				<tr>
					<td width="10">
					</td>
					<td width="48">
						<a href="http://zerg.bplaced.net/showprofile.php?id={$row.userid}"><img border="0" src="getsnap.php?id={$row.userid}&typ=tn" width="48" height="38"></a>
					</td>
					<td width="9">
					</td>
					<td width="379" height="46" valign="middle">

						<a class="blog_titel" href="http://zerg.bplaced.net/viewblog.php?id={$row.id}" target="_top">{$row.title|truncate:115:"...":true}</a>

					</td>
					<td width="170" align="right" valign="middle">
						<font style="font-family:Arial; font-size:11px; color:#979797;">am {$row.date_posted|date_format:$lang.DATE_FORMAT}<br></font>

						<a class="blog_username" href="http://zerg.bplaced.net/showprofile.php?id={$row.userid}">{$row.username}</a>
					</td>
					<td width="11">
					</td>
				</tr>
			</table>
		</td>
	</tr>
<tr>
	<td height="7">
	</td>
</tr>
	<tr>
		<td>
			<table border="0" cellpadding="0" cellspacing="0">
				<tr>
					<td width="10">
					</td>
					<td height="1" width="602" bgcolor="#DBDBDB" style="background-image:url({$image_dir}blog_trennlinie.jpg); background-repeat:repeat-x; background-position:bottom;">
					</td>
					<td width="11">
					</td>
				</tr>
			</table>
		</td>
	</tr>
{/foreach}

</table>
{/block}
du kannst dir dann das $smartyvar->display('index.tpl') sparen und schickst die fertige seite mit $smartyvar->display('blog.tpl') zum browser.

Es reicht übrigens aus wenn du die variable per unset löscht, die datenbank wird dann automatisch ge-closed.
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 03.02.2011, 12:19  
Neuer Benutzer
 
Registriert seit: 26.01.2011
Beiträge: 25
PHP-Kenntnisse:
Anfänger
panica befindet sich auf einem aufstrebenden Ast
Standard

hallo tr0y,

danke das du mir hilfst.

Also dein Vorschlag mit Blocks sieht gut und logisch aus. Habe nur ein Problem mit $smartyvar. Ich weiss nicht was du damit meinst. Smarty gibt mir einen Fehler aus, wenn ich es in die PHP-Datei anstatt $smarty->display('blog.tpl'); schreibe ( Fatal error: Call to a member function display() on a non-object in /users/zerg/www/neue_blogs.php on line 50 ). So wie ich das verstanden habe gibt es die Function nicht. Könntest du mir das bitte etwas mehr erklären oder wenigstens einen Verweis geben.

Letzte frage noch. Was meinst du mit unset. Meine Datenbankabfrage habe ich doch in der neue_blogs.php damit geschloßen.

SOrry für die Fragerei aber ich würde gerne alles verstehen.

Gruß panica
panica ist offline   Mit Zitat antworten
Alt 03.02.2011, 12:44  
Erfahrener Benutzer
 
Benutzerbild von tr0y
 
Registriert seit: 26.07.2010
Beiträge: 4.874
PHP-Kenntnisse:
Fortgeschritten
tr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblicktr0y ist ein wunderbarer Anblick
tr0y eine Nachricht über MSN schicken
Standard

$smartyvar ist dein $smarty ...

Du machst:
PHP-Code:
$result->close();
unset(
$result); 
Es genügt:
PHP-Code:
unset($result); 
__________________
Lasse mir ohne Anwendung von Gewalt Dinge schenken, Amazon weiß darüber bald mehr.
tr0y ist offline   Mit Zitat antworten
Alt 03.02.2011, 12:56  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Tut aber auch nicht weh.. (und es zeugt von gutem Stil, hinter sich immer brav aufzuräumen)
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Formularfeld -> per POST-Methode Ergebnis in andere Datei speichern? Tomchen PHP Tipps 2009 9 19.04.2009 16:43
[Erledigt] Datei lesen in andere Verzeichnis nymus7 PHP Tipps 2009 10 17.02.2009 16:21
[Erledigt] inhalt einer Datei in Variable Speichern mupilz PHP Tipps 2008 6 31.05.2008 13:28
Text aus Datei in JS includieren Plague HTML, Usability und Barrierefreiheit 1 26.10.2005 12:07
Variable mit an andere datei übergeben nicobischof PHP Tipps 2005-2 6 17.09.2005 19:23
ZIP Datei auf Server kopieren, entpacken und Inhalt in DB PHP-Fortgeschrittene 40 06.06.2005 23:33
wie kann ich den Inhalt einer Datei sortieren? PHP Tipps 2005 4 16.05.2005 14:18
<texarea> inhalt aus einer exteren datei PHP Tipps 2004-2 3 06.12.2004 20:28
Kann man ein Formular an die eine oder andere Datei weiterge d-81 PHP Tipps 2004-2 7 03.12.2004 17:06
[HILFE] Datenbank Inhalt fuer andere Webseiten !?! PHP Tipps 2004-2 3 05.11.2004 17:34
[Erledigt] Inhalt der PHP Datei verschwindet PHP Tipps 2004 11 18.10.2004 23:59
Ausgabe einer Datei in andere schreiben? Unbekanntes_Pferd PHP Tipps 2004 1 07.10.2004 12:16
variable an andere php datei übergeben PHP Tipps 2004 18 19.09.2004 10:09
Inhalt einer Datei einbinden ohne Inhalt anzuzeigen Corvin PHP Tipps 2004 4 22.07.2004 09:24
Inhalt einer datei Sortieren ???? PHP Tipps 2004 12 21.06.2004 22:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php zend includieren, http://www.php.de/php-fortgeschrittene/62249-erledigt-inhalt-einer-template-datei-eine-andere-template-datei-includieren.html, smarty extends file w3c, smarty subtemplates caching 2011, smarty variable an andere template übergeben, mehrere templates in einer datei, smarty mehrere templates, smarty include in variable, php zip datei hinzufügen anderen ort speichern, smarty display nicht ausgeben, smarty zwei template dateien, vbulletin template datei, display zwei dateien php, template in zwei dateien, templatedateien aufbauen mit hilfe einer datenbank, smarty ausgabe nur einsen angezeigt, php mehrere templates, php code in einer tpl datei einbetten per smarty, smarty variable aus anderem template anzeigen, php inhalte aus anderer datei in html

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:20 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum