Probleme mit Smarty Templates

Nun will ich die Anzahl bei den jeweils ausgelesenen News anzeigen lassen. Im Prinzip so

Datum - News 1
text - text - text - text - text
Autor: David, 5 Kommentare

Datum - News 2
text - text - text - text - text
Autor: Jonas, 2 Kommentare
Naja du fügst deinem Array einfach noch "kommentare" hinzu. Da speicherst du die Anzahl rein und gibst die dann über Smarty ganz normal aus:
Code:
Autor: {$row.autor}, {$row.kommentare} Kommentare

Das Problem liegt hier also viel mehr beim Datenbank-Query.

Wo ist denn der Sinn beliebige Jahreszahlen mit unrelevanten Newseinträgen zu verknüpfen?
Natürlich macht das keinen Sinn, wollt nur zeigen wie sowas geht...

Es gibt etwas ähnliches wie for in smarty. Das zu finden überlass ich aber dir selber, schliesslich solltest du auch lernen dich in einem Manual zurecht zu finden.
=> http://support.pn-cms.de/Article800.htm
 
Ah,

das mit der For. Danke dir, hätts aber auch selber gesucht^^


//edit
So. hab ich da jetzt soweit alles richtig? Weil so ganz läuft das nicht. :rolleyes:
PHP:
...
	//news array erzeugen
	$news	= array();
	while($select = mysql_fetch_assoc($result)) {
		$news[] = $select;
		
		$komm_query 	= 'select * from news_kommentare where `news_id`="'.$select['id'].'"';
		$komm_result	= mysql_query($komm_query);
		$komm_count		= mysql_num_rows($komm_result);
		
		$news[]	= $komm_count;
	}
    $smarty->assign('news_selects', $news); // In Smarty speichern



HTML:
{foreach from=$news_selects item=select}
	<div class="newsdatum">{$select.datum}</div>
	<div class="newstitel">{$select.titel}</div>
	<div class="newsinhalt">{$select.text}</div>
	<div class="archiv">{$select.komm_count} Kommentare &middot; 
                                     <a href="#">zum Archiv</a></div>
					<hr />
{/foreach}
 
Zuletzt bearbeitet:
So vielleicht:
PHP:
...
    //news array erzeugen
    $news    = array();
    while($select = mysql_fetch_assoc($result)) {

        $komm_query     = 'select * from news_kommentare where `news_id`="'.$select['id'].'"';
        $komm_result    = mysql_query($komm_query);
        $komm_count        = mysql_num_rows($komm_result);
        
        $select['komm_count'] = $komm_count;
        $news[]    = $select;
    }
    $smarty->assign('news_selects', $news); // In Smarty speichern

PS: Die Lösung ist ganz schön unelegant. Informier dich mal über "SQL JOINS" ;)
 
Du meinst Kreuzprodukte?

z.b.: so?:
PHP:
SELECT bl.*, g.* FROM bandlist AS bl INNER JOIN gigs AS g ON bl.aid=g.aid WHERE g.aid='$aid' AND bl.gid='$aid' AND bl.aid='$aid'

das hab ich irgendwann mal geschrieben...^^


//edit 1
Aber das mit den Kommentaren zählen geht jetzt :)


//edit 2
Nochma was generelles zu Templates. Wenn ich jetzt ne neue Seite mache, z.b.: zu den Kommentaren. Mach ich dann wieder eine neue .php Datei und eine neue .tpl datei? Also für jede neue Seite?
 
Zuletzt bearbeitet:
Jo genauu sowas... da noch die COUNT() Funktion rein und gut is :D

//edit 1
Aber das mit den Kommentaren zählen geht jetzt :)

//edit 2
Nochma was generelles zu Templates. Wenn ich jetzt ne neue Seite mache, z.b.: zu den Kommentaren. Mach ich dann wieder eine neue .php Datei und eine neue .tpl datei? Also für jede neue Seite?
Ich mach das immer so, dass ich ne index.php hab, die dann per Get-Parameter die passende PHP Datei included.
Also ja, für jede Seite eine extra PHP und TPL Datei. (TPL Dateien können sogar pro PHP Datei nochmals mehrere sein ;))

cAm3eel.
 
Hey,


jojo, so Templates sind schon was dolles... :eek:


Nur, wenn ich nun eigene Funktionen schreiben könnte, wär das ganze ja wohl 8-) perfekt.


cAm3eel sagte mir, dass ich jede Funktion innem Ordner einzeln Speichern müsste. Also zum Beispiel ne Funtkion, die zum Blättern da ist:
blaettern.php

Und dann die Datei aufrufen. Geht's noch einfacher?

MfG
David
 
Du kannst in Smarty natürlich selbst Funktionen schreiben.
Die müssen dann in den Ordner
Code:
/smarty/plugins/
Dort findest du auch alle anderen Funktionen die dir Smarty zur Verfügung stellt.
Die Funktionen befinden sich in PHP Dateien:
Code:
function.<Name der Funktion wie sie im Template aufgerufen wird>.php

Aber wegen der Blätterfunktion die du angesprochen hast.
Wiso generiest du die Ausgabe nicht in der normalen PHP Datei der Seite und übergibst diese mit $smarty->assign(); an die TPL Datei?

cAm3eel.
 
Hey,

ne, so meine ich das nicht.


Ich schreibe ne Funktion zum blaettern.
Die generiert halt die Ausgabe und so weiter... Die ruf ich dann auf, damit ich das nicht in jeder Seite neu schreiben muss..
Oder, hä? Hab ich dich jetzt missverstanden?


//edit
Nochwas hinzuzufügen.
Aber wie gesagt, wenn ich jede Funktion einzeln speichere, wird das nachher ziemlich unübersichtlich.

Geht das nicht das ich zum Beispiel ne Funktion schreibe 'hallo'. So:
PHP:
function hall() {
    echo 'hallo';
}

Und die ins tpl reingebe? irgendwie auch über $smarty-assign() oder sowas?
 
Zuletzt bearbeitet:
Jetzt hab ich das "einfache" mit Templates schon kapiert.

Nur, ich hab jetzt ne Funktion fürs Blättern geschrieben, die ist erstma ganz einfach und sieht so aus:
PHP:
<?php
	function blaettern($smarty, $items_per_page, $item_count)
	{
		for ($i=1; $i<=$items_per_page; $i++) {
			echo $i;
		}
		
		$smarty->assign('seite', $i); 
	}
	
	blaettern($smarty, $items_per_page, $item_count);
?>


der aufruf sieht so aus:
PHP:
{$seite}

Aber der zeigt einfach nur die Gesamt-Anzahl von Seiten an: 2 und halt nicht die Schleife... Wie muss ich das machen?

MfG
David
 
Zuletzt bearbeitet:
Was hat das echo in der Schleife zu suchen?
Besser wäre es, wenn du $i bei jedem durchlauf in ein Array schreibst:
PHP:
...
$array = array();
for(...){
$array[] = $i;
}
...

Das Array kannst du dann im Template mit einer foreach Schleife ausgeben ;)

cAm3eel.
 
Zurück