Smarty Forum Index Smarty
The discussions here are for Smarty, a template engine for the PHP programming language.

Wie mehrere Einträge z.b. Gästebuch ausgeben?
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Smarty Forum Index -> Language: German
View previous topic :: View next topic  
Author Message
gh0stkillah
Smarty Rookie


Joined: 09 Jul 2006
Posts: 8

PostPosted: Sun Jul 09, 2006 12:31 pm    Post subject: Wie mehrere Einträge z.b. Gästebuch ausgeben? Reply with quote

Hi Leute,
ich bin schonmal froh, Smarty installiert und zum laufen gebracht zu haben!
Hier nun mein Fehler...
Als Beispiel:
Ich habe eine news.tpl mit einem Platzhalter {$NEWS}
Dann habe ich einen impressum.tpl mit dem Platzhalter {$IMPRESSUM}


Code:


//Impressum-Anzeige
$impressum = implode("",File("../design/impressum/impressum.tpl"));
$smarty->assign('IMPRESSUM',$impressum);

//NEWS-Anzeige
$news = implode("",File("../design/news/news.tpl"));
$smarty->assign('NEWS',$news);


So habe ich den Platzhaltern zugewiesen, was sie zu machen haben.
Nur funktioniert dies nicht.
Ich habe für jede Sektion eine index.php.
Also news/index.php und impressum/index.php
Da hab ich die beiden Codes jeweil reingesetzt. (News in news und Imp. in Imp.)
Wenn ich jetzt meine Homepage aufrufe, dann zeigt der mir wunderschön den inhalt der news.tpl an.
Gehe ich dann auf impressum, dann zeigt er mir nen leeren Teil an, wo jetzt der Platzhalter {$IMPRESSUM} die impressum.tpl anzeigen sollte. Ich habe festgestellt, dass im template_c-Ordner eine Datei abgespeichert wird, die diese Funktion enthält.
Lösche ich die Datei, dann zeigt der mir den Impressum-Inhalt an. Gehe ich aber auf News, dann sehe ich nicht den News-Inhalt aus der news.tpl sondern auch wieder nur alles leer. Dies scheint der im template_c Ordner abzuspeichern. Nur was kann ich am besten immer dagegen tun?

Ich hoffe, ihr versteht was ich meine Embarassed und könnt mir eventuell bei meiner Situation helfen.

Gruß gh0sty

Edit: Die Seiten werden alle in einer extra index.php aufgerufen. Also es gibt für News und Impressum eine index.php!


Last edited by gh0stkillah on Wed Jul 12, 2006 9:41 am; edited 2 times in total
Back to top
View user's profile Send private message
kills
Smarty Elite


Joined: 28 May 2004
Posts: 493

PostPosted: Sun Jul 09, 2006 1:09 pm    Post subject: Reply with quote

Hi,

evtl caching aktiviert?

Gruß,
Markus
Back to top
View user's profile Send private message
gh0stkillah
Smarty Rookie


Joined: 09 Jul 2006
Posts: 8

PostPosted: Sun Jul 09, 2006 1:13 pm    Post subject: Reply with quote

kills wrote:
Hi,

evtl caching aktiviert?

Gruß,
Markus


Wenn ich es abstellen bzw. aktivieren soll....wie mach ich das?

Der Cache-Ordner ist immer leer..da ist nichts drin!
In dem Ordner template_c speichert sich genau 1. Datei ab mit dem namen "%%45^45E^45E480CD%%index.tpl.php".

Gruß Danny
Back to top
View user's profile Send private message
kills
Smarty Elite


Joined: 28 May 2004
Posts: 493

PostPosted: Mon Jul 10, 2006 8:39 am    Post subject: Reply with quote

Hi Danny,

du solltest es zum entwickeln deaktivieren.. aber das ist wohl bei dir schon der fall, wenn der Ordner leer bleibt...

siehe dazu
http://smarty.php.net/manual/en/caching.php

Rufst du immer die gleiche index.php auf?

Gruß,
Markus
Back to top
View user's profile Send private message
gh0stkillah
Smarty Rookie


Joined: 09 Jul 2006
Posts: 8

PostPosted: Mon Jul 10, 2006 6:56 pm    Post subject: Platzhaler-Erkennung! Reply with quote

kills wrote:
Hi Danny,

du solltest es zum entwickeln deaktivieren.. aber das ist wohl bei dir schon der fall, wenn der Ordner leer bleibt...

siehe dazu
http://smarty.php.net/manual/en/caching.php

Rufst du immer die gleiche index.php auf?

Gruß,
Markus


Das hat sich jetzt erledigt, da ich das Haupt-Template für jede sektion index.tpl genannt habe. Ich hab die umbenannt und jetzt funktioniert alles.

Ich hab jetzt aber ein neues Problem...
und zwar, werden die Platzhalter in den Main-Templates der verschiedenen Sektionen erkannt.
Aber wenn ich jetzt in dieses Template mit php ein weiteres Template (Content um z.b. News anzeigen zu lassen)anzeigen lasse, dann erkennt er diese Platzhalter nicht.
Ich habe die sozusagen verschachtelt.
Was kann ich dagegen tun, damit er alle Platzhalter erkennt?

So sieht mein erst kleiner Code in der index.php für die News aus:
Code:

<?php
session_start();
include("../mysql.inc.php");



//Smarty-Instanz--------------

include("../smarty.php");            

$smarty->template_dir
= '/usr/export/www/vhosts/funnetwork/hosting/gh0stkillah/design/news/';

$smarty->compile_dir
= '/usr/export/www/vhosts/funnetwork/hosting/gh0stkillah/smarty/templates_c/';

$smarty->config_dir = '/usr/export/www/vhosts/funnetwork/hosting/gh0stkillah/smarty/configs/';

$smarty->cache_dir      = '/usr/export/www/vhosts/funnetwork/hosting/gh0stkillah/smarty/cache/';            //-


//NEWS-Anzeige
$news = implode("",File("../design/news/news-c.tpl"));
$smarty->assign('NEWS',$news);


include("../code.inc.php");


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

?>


Gruß gh0sty
Back to top
View user's profile Send private message
shannera
Administrator


Joined: 13 Feb 2006
Posts: 802
Location: Edertal, Germany

PostPosted: Tue Jul 11, 2006 7:26 am    Post subject: Re: Platzhaler-Erkennung! Reply with quote

gh0stkillah wrote:

Ich hab jetzt aber ein neues Problem...
und zwar, werden die Platzhalter in den Main-Templates der verschiedenen Sektionen erkannt.
Aber wenn ich jetzt in dieses Template mit php ein weiteres Template (Content um z.b. News anzeigen zu lassen)anzeigen lasse, dann erkennt er diese Platzhalter nicht.
Ich habe die sozusagen verschachtelt.
Was kann ich dagegen tun, damit er alle Platzhalter erkennt?


Könntest Du das mal detailliert ausführen, z.B. mit Quellcodeauszügen? Im Template mit PHP ein weiteres Template inkludiert? Jetzt sag nicht, dass Du im Template mit {php} einen Block hast, wo Du mit $smarty->display() ein weiteres Template lädst... wenn die Antwort trotz aller Hoffnungen "ja" ist, schau Dir bitte mal im Handbuch von Smarty den Abschnitt über {include} an.
Back to top
View user's profile Send private message
gh0stkillah
Smarty Rookie


Joined: 09 Jul 2006
Posts: 8

PostPosted: Tue Jul 11, 2006 7:44 am    Post subject: Re: Platzhaler-Erkennung! Reply with quote

shannera wrote:
gh0stkillah wrote:

Ich hab jetzt aber ein neues Problem...
und zwar, werden die Platzhalter in den Main-Templates der verschiedenen Sektionen erkannt.
Aber wenn ich jetzt in dieses Template mit php ein weiteres Template (Content um z.b. News anzeigen zu lassen)anzeigen lasse, dann erkennt er diese Platzhalter nicht.
Ich habe die sozusagen verschachtelt.
Was kann ich dagegen tun, damit er alle Platzhalter erkennt?


Könntest Du das mal detailliert ausführen, z.B. mit Quellcodeauszügen? Im Template mit PHP ein weiteres Template inkludiert? Jetzt sag nicht, dass Du im Template mit {php} einen Block hast, wo Du mit $smarty->display() ein weiteres Template lädst... wenn die Antwort trotz aller Hoffnungen "ja" ist, schau Dir bitte mal im Handbuch von Smarty den Abschnitt über {include} an.



Also...Ich habe ein "Main"-Template, womit das Grundgerüst der Homepage aufgebaut wird.
Der Code sieht so aus:
Code:

<html>
<head>
<title>{$PAGETITLE}</title>
</head>
<body >
<table border="1" width="100%" height="100%">
<tr><td colspan="2" width="100%" height="200" background="../design/images/turtle-header.gif"></td></tr>
<tr>
<td width="10%"></td>
<td valign="top">{$TAG_NAME} der {$TAG}.{$MONAT}.{$JAHR}, {$ZEIT} - Herzlich Willkommen {$NICK}!{$LOGIN}</td>
</tr>
<tr>
<td width="10%" height="100%" valign="top">{$MENUE}</td>
<td height="100%" valign="top">{$NEWS}</td>
</tr>
</table>
</body>
</html>


Diese lasse ich dann in der index.php von News mit "smarty->display('news.tpl');" anzeigen.

siehe hier

[php:1:14ca12eca3]
<?php
session_start();
include("../mysql.inc.php");



//Smarty-Instanz-----------------------------------------------------------------------------------------
include("../smarty.php"); //-
$smarty->template_dir = '/usr/export/www/vhosts/funnetwork/hosting/gh0stkillah/design/news/'; //-
$smarty->compile_dir = '/usr/export/www/vhosts/funnetwork/hosting/gh0stkillah/smarty/templates_c/'; //-
$smarty->config_dir = '/usr/export/www/vhosts/funnetwork/hosting/gh0stkillah/smarty/configs/'; //-
$smarty->cache_dir = '/usr/export/www/vhosts/funnetwork/hosting/gh0stkillah/smarty/cache/'; //-
//-------------------------------------------------------------------------------------------------------


//--NEWS-CONTENT
$news = implode("",File("../design/news/news-c.tpl"));
$smarty->assign('NEWS',$news);


include("../code.inc.php");

//-------------------------------------
$smarty->display('news.tpl'); //-
//-------------------------------------
?>
[/php:1:14ca12eca3]

Die anderen Platzhalter sind in der code.inc.php bestimmt und werden per include-Befehl eingebunden (include("../code.inc.php")Wink!

Jetzt lade ich in der index.php die "Newsbox" mit dem Befehl:
[php:1:14ca12eca3]
//--NEWS-CONTENT
$news = implode("",File("../design/news/news-c.tpl"));
$smarty->assign('NEWS',$news);
[/php:1:14ca12eca3]
damit der Platzhalter {$NEWS} , in der MAIN-Template, diese Newsbox-Template zugewiesen bekommt. Die Newsbox-Template sieht so aus:
Code:

<table>
<tr><td colspan="3">{$TITEL}Testnews</td></tr>
<tr>
<td valign="top">{$KATBILD}Bild</td>
<td valign="top">
   <b>Date:</b><br>
   <b>Author:</b><br>
   <b>Links:</b>
</td>
<td valign="top">
         {$DATUM}9.Juli.2006<br>
   {$AUTOR}ghOsty<br>
   {$LINKS}google.de
</td>
</tr>
<tr><td colspan="3">{$NEWS}Das ist eine Testnews!{$MEHR}Hier gibt es zur Zeit noch nicht viel zu sagen...</td></tr>
<tr><td colspan="3">{$KOMMENTAR}Und hier kommen dann die zahlreichen Kommentare der User hin.</td></tr>
</table>


Da sind weitere Platzhalter definiert. Diese werden aber von Smarty nicht erkannt. Das heißt, html gibt die Platzhalter z.b.: {$DATUM} als Text aus. Wenn Smarty die erkennen würde, dann müssten sie doch ausgeblendet werden oder?

Gruß gh0sty
Back to top
View user's profile Send private message
kills
Smarty Elite


Joined: 28 May 2004
Posts: 493

PostPosted: Tue Jul 11, 2006 8:18 am    Post subject: Reply with quote

Hi,

[php:1:b74108555a]$news = implode("",File("../design/news/news-c.tpl"));
$smarty->assign('NEWS',$news); [/php:1:b74108555a]

nicht die Templates direkt einbinden!

Benutze fetch()
http://smarty.php.net/manual/en/api.fetch.php

bzw direkt im Template {fetch}
http://smarty.php.net/manual/en/language.function.fetch.php

Gruß,
Markus
Back to top
View user's profile Send private message
gh0stkillah
Smarty Rookie


Joined: 09 Jul 2006
Posts: 8

PostPosted: Tue Jul 11, 2006 8:24 am    Post subject: Reply with quote

kills wrote:
Hi,

[php:1:eefe4006ba]$news = implode("",File("../design/news/news-c.tpl"));
$smarty->assign('NEWS',$news); [/php:1:eefe4006ba]

nicht die Templates direkt einbinden!

Benutze fetch()
http://smarty.php.net/manual/en/api.fetch.php

bzw direkt im Template {fetch}
http://smarty.php.net/manual/en/language.function.fetch.php

Gruß,
Markus


Danke für die Antwort... Aber wie kann ich es gestalten, wenn ich jetzt zum Beispiel ein Gästebuch habe, und für ein und den selben Platzhalter 2 Templates habe. Also dass er sagen wir mal als erstes ein show-template anzeigen soll und wenn man dann auf eintragen geht, dass er dann ein eintragen-template anzeigen soll.


Edit:
Danke!So funktioniert es:

[php:1:eefe4006ba]
$news = $smarty->fetch('news-c.tpl');
$smarty->assign('NEWS',$news);
[/php:1:eefe4006ba]

Smile
Back to top
View user's profile Send private message
gh0stkillah
Smarty Rookie


Joined: 09 Jul 2006
Posts: 8

PostPosted: Tue Jul 11, 2006 10:32 pm    Post subject: Reply with quote

Hi Leute,
ich hab ein weiteres Problem Embarassed

Und zwar will ich in meinem Gästebuch mehrere Einträge anzeigen lassen.

Aber irgendwie zeigt Smarty nur ein GB-Eintrag an.

Was kann ich machen, damit mehrere Einträge angezeigt werden?

Zur Zeit zeigt er immer den letzten Eintrag einer while-schleife von PHP an.

Gruß gh0sty

Edit:

Hier noch ein bisschen Code:
[php:1:498d89b23c]
while($row = mysql_fetch_object($gbergebnis))
{
//--EINBINDEN-DER-DATEN-AUS-DER-DATENBANK
$gbname = $row->name;
$smarty->assign('NAME',$gbname);

$gbdatum = $row->datum;
$smarty->assign('DATUM',$gbdatum);

$gbanzahleintraege = mysql_num_rows($gbergebnis);
$smarty->assign('EINTRAEGE',$gbanzahleintraege);

$gbemail = $row->email;
$smarty->assign('EMAIL',$gbemail);

$gbhomepage = $row->homepage;
$smarty->assign('HP',$gbhomepage);

$gbip = $row->ip;
$smarty->assign('IP',$gbip);

$gbicq = $row->icq;
$smarty->assign('ICQ',$gbicq);

$gbinhalt = $row->inhalt;
$smarty->assign('MESSAGE',$gbinhalt);
//-EINBINDEN-DER-EINTRAGSANZEIGE
$showpart = $smarty->fetch("guestbook-showpart-c.tpl");
$smarty->assign('INHALT',$showpart);
}
[/php:1:498d89b23c]
Das ist die While-Schleife, wo die Daten aus der Datenbank abgerufen werden und den Platzhaltern zugewiesen wird.
Ich habe 2Templates dafür. Einmal ein Grundgerüst wo NEUER EINTRAG und INHALT rein kommt. Und für INHALT hab ich ein 2.Template gemacht, wo dann die Daten wie DATUM,NAME,MESSAGE usw. angezeigt werden.
Irgendwie muss ich dem Platzhalter INHALT sagen, dass er die Daten nicht bis zum letzten überschreiben soll, sonst zeigt der mir immer nur einmal einen Datensatz an. Ich muss dem Platzhalter verklickern, dass er diesen Datensatz mehrmals ausgeben soll.
Mit welcher Funtkion kann ich das in Smarty machen?

Gruß gh0sty
Back to top
View user's profile Send private message
shannera
Administrator


Joined: 13 Feb 2006
Posts: 802
Location: Edertal, Germany

PostPosted: Wed Jul 12, 2006 7:36 am    Post subject: Reply with quote

Das ist einfach, Du schreibst bei jedem Schleifendurchlauf in die Smarty-Variable INHALT rein, überschreibst jeweils den vorher generierten Inhalt. Schreib den Inhalt innerhalb der Schleife einfach in eine temporäre Variable rein bzw. hänge den aktuell generierten Templateinhalt an die Variable an (näheres zu Variablenzuweisung und Werteanhängen in PHP findeste im PHP-Handbuch), und hinter der While-Schleife erst an Smarty zuweisen.

Allerdings ist dein Ansatz doch recht eigenwillig, wo man doch auch mit {section} (http://smarty.php.net/manual/de/language.function.section.php) oder {foreach} (http://smarty.php.net/manual/de/language.function.foreach.php) - je nach Array, dass die DB-Abfrage zurückliefert - die Schleife bequem im Template bauen kann.
Back to top
View user's profile Send private message
gh0stkillah
Smarty Rookie


Joined: 09 Jul 2006
Posts: 8

PostPosted: Wed Jul 12, 2006 8:08 am    Post subject: Reply with quote

Sicher kann man es bequem im Template einbauen. Das Problem ist aber, dass ich die Templates dann nicht selber gestalten werde, sondern meine Freundin. Ich bin nur dazu da, die Funktionen zu setzen Wink

Aber ich denke, wenn ich das hinbekomme, dann ginge auch dies!
Ich komme nur gerade nicht damit zurecht.
Back to top
View user's profile Send private message
shannera
Administrator


Joined: 13 Feb 2006
Posts: 802
Location: Edertal, Germany

PostPosted: Wed Jul 12, 2006 12:03 pm    Post subject: Reply with quote

Es ist eigentlich unerheblich, ob der Gästebucheintrag selber nun im Haupttemplate ist, oder nachträglich eingebunden wird, weil er in einer eigenen Datei steht. Es geht ja eher darum, wie Du es gelöst hast. Mach Deiner Freundin eine Datei mit funktionierender Section fertig, und mit ein wenig geistiger Transferleistung kann sie das dann bei neuen Templates übernehmen. Oder noch besser: sie soll nicht nur Vorhandenes ummurksen, sondern sich die Anleitung durchlesen, insbesondere http://smarty.php.net/manual/de/smarty.for.designers.php... und das dann auch verstehen. Bei unseren beiden Pixelschubserinnen hier hat das sehr gut geklappt.
Back to top
View user's profile Send private message
gh0stkillah
Smarty Rookie


Joined: 09 Jul 2006
Posts: 8

PostPosted: Wed Jul 12, 2006 6:38 pm    Post subject: Reply with quote

Ich hab es geschafft, mit der Methode, wie ihr gesagt habt...
Wie kann ich jetzt am besten eine Blätterfunktion einbastelt?
geht das auch mit diesen Schleifen?!?
Back to top
View user's profile Send private message
shannera
Administrator


Joined: 13 Feb 2006
Posts: 802
Location: Edertal, Germany

PostPosted: Thu Jul 13, 2006 7:20 am    Post subject: Reply with quote

Das Template ist dasselbe, nur die Datenbankabfrage ist eine andere, Stichwort "LIMIT" in mySQL. Und Du brauchst natürlich was zum Blättern im Template, was in Abhängigkeit von erster, mittlerer und letzter Seite natürlich anders aussieht.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Smarty Forum Index -> Language: German All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group
Protected by Anti-Spam ACP