|
Smarty
WARNING: All discussion is moving to https://reddit.com/r/smarty, please go there! This forum will be closing soon. |
|
View previous topic :: View next topic |
Author |
Message |
gh0stkillah Smarty Rookie
Joined: 09 Jul 2006 Posts: 8
|
Posted: Sun Jul 09, 2006 12:31 pm Post subject: Wie mehrere Einträge z.b. Gästebuch ausgeben? |
|
|
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 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 |
|
kills Smarty Elite
Joined: 28 May 2004 Posts: 493
|
Posted: Sun Jul 09, 2006 1:09 pm Post subject: |
|
|
Hi,
evtl caching aktiviert?
Gruß,
Markus |
|
Back to top |
|
gh0stkillah Smarty Rookie
Joined: 09 Jul 2006 Posts: 8
|
Posted: Sun Jul 09, 2006 1:13 pm Post subject: |
|
|
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 |
|
kills Smarty Elite
Joined: 28 May 2004 Posts: 493
|
Posted: Mon Jul 10, 2006 8:39 am Post subject: |
|
|
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 |
|
gh0stkillah Smarty Rookie
Joined: 09 Jul 2006 Posts: 8
|
Posted: Mon Jul 10, 2006 6:56 pm Post subject: Platzhaler-Erkennung! |
|
|
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 |
|
shannera Administrator
Joined: 13 Feb 2006 Posts: 802 Location: Edertal, Germany
|
Posted: Tue Jul 11, 2006 7:26 am Post subject: Re: Platzhaler-Erkennung! |
|
|
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 |
|
gh0stkillah Smarty Rookie
Joined: 09 Jul 2006 Posts: 8
|
Posted: Tue Jul 11, 2006 7:44 am Post subject: Re: Platzhaler-Erkennung! |
|
|
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")!
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 |
|
kills Smarty Elite
Joined: 28 May 2004 Posts: 493
|
|
Back to top |
|
gh0stkillah Smarty Rookie
Joined: 09 Jul 2006 Posts: 8
|
Posted: Tue Jul 11, 2006 8:24 am Post subject: |
|
|
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]
|
|
Back to top |
|
gh0stkillah Smarty Rookie
Joined: 09 Jul 2006 Posts: 8
|
Posted: Tue Jul 11, 2006 10:32 pm Post subject: |
|
|
Hi Leute,
ich hab ein weiteres Problem
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 |
|
shannera Administrator
Joined: 13 Feb 2006 Posts: 802 Location: Edertal, Germany
|
Posted: Wed Jul 12, 2006 7:36 am Post subject: |
|
|
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 |
|
gh0stkillah Smarty Rookie
Joined: 09 Jul 2006 Posts: 8
|
Posted: Wed Jul 12, 2006 8:08 am Post subject: |
|
|
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
Aber ich denke, wenn ich das hinbekomme, dann ginge auch dies!
Ich komme nur gerade nicht damit zurecht. |
|
Back to top |
|
shannera Administrator
Joined: 13 Feb 2006 Posts: 802 Location: Edertal, Germany
|
Posted: Wed Jul 12, 2006 12:03 pm Post subject: |
|
|
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 |
|
gh0stkillah Smarty Rookie
Joined: 09 Jul 2006 Posts: 8
|
Posted: Wed Jul 12, 2006 6:38 pm Post subject: |
|
|
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 |
|
shannera Administrator
Joined: 13 Feb 2006 Posts: 802 Location: Edertal, Germany
|
Posted: Thu Jul 13, 2006 7:20 am Post subject: |
|
|
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 |
|
|
|
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
|
|