Frage zu Smarty, wer kennt sich aus?

xtratz

Gesperrt
Hallo Leute,

habe ein Problem mit Smarty.
Und zwar will ich ein Template untereinander, so oft ausgeben wie Einträge in der DB vorhanden sind.
Leider wird immer nur der lez´tzte EIntrag angezeigt.

Weis zuuuufällig jemand wie sich das umsetzen lässt?

PHP:
 $containerQuery = function_dbQuery('select * from container');
   
   
   while($containerRow = function_dbFetchArray($containerQuery)){
   
      $smarty->assign('container_header', $containerRow['container_name']);
      
   }

Gruss und Danke
 
Du kannst auch einfach das komplette Ergebnis des Querys an das Template übergeben und dann mittels foerach die Werte auslesen.

Bsp:

Logik Datei:
PHP:
  $sql = 'SELECT contact_id, name, nick FROM contacts ORDER BY contact';
$smarty->assign('kontakte', $db->getAssoc($sql));

Im Template
HTML:
{foreach key=cid item=con from=$kontakte}
  <a href="kontact.php?contact_id={$cid}">{$con.name} - {$con.nick}</a><br />
{/foreach}

Aus der Smarty Dokumentation.
 
Danke DIr.

Kannst DU mir nochmal kurz helfen bitte?
Denn ich bekomme entweder gar nix oder nur der erste Inhalt bzw. alle Werte vom ersten Eintrag hintereinander ausgegeben.

Wäre nett wenn Du mal über meinen COde schauen könntest, wo evtl. der Fehler liegt.

PHP:
 $containerQuery = function_dbQuery('select * from container');
   $smarty->assign('container_header', function_dbFetchArray($containerQuery));

PHP:
{foreach key=container_id item=container_name from=$container_header}

{$container_name}

{/foreach}

Ausgabe:

1 Kategorien links testinhalt 1 1

Die DB FUnktionen sind im Prinzip dasselbe wie Du oben im Beispiel geschrieben hast.

Danke Dir.
 
Zuletzt bearbeitet:
Du mußt dabei deine Spaltennamen angeben. In der Foreach-Schleife gibst du ja ein item an. Im Beispiel
Code:
item=con
Wenn du nun z.B. eine Spalte mit dem Namen "preis" hast mußt du diesen so ausgeben:
Code:
{foreach key=container_id item=con from=$container_header} 
{$con.preis}
{/foreach}
Für die Spalte "bezeichnung
Code:
{$con.bezeichnung}
etc. Das heißt du mußt dein en Spaltennamen verbunden mit dem . an dein Item anhängen.
Bei der Key-Eigenschaft wird dein Primärschlüssel angegeben (z.B. key=artnr)
 
PHP:
{foreach key=container_id item=con from=$container_header}

Für den Namen: {$con.name}<br />
Für den Nick: {$con.nick}

{/foreach}

Die Foreach-Schleife von Smarty kannst du mit der von PHP vergleichen. Du sagst du holst dir das Array von $container_header (from=$container_header) und du sagst du willst nachher über con auf das Array zugreifen können (item=com).

@edit Hmm da war einer schneller ^^
 
Ok danke euch.

Hab das aber schon probiert weil ich mir das auch dachte.
Jedoch fast das selbe Ergebnis mit dem Unterschied das mir nun alle Werte (Container_id, Container_name, Container_position usw.) des ersten Eintrages der Tabelle, hintereinander ausgegeben werden und immer nur der erste Buchstabe.

Das ist komisch.

Ne Idee?
 
Die Daten in deinem Array sind korrekt? Hast du das mla überprüft? Kannst du mal bitte deinen Quelltext posten?
 
Ich habe meine Ausgaben immer noch zusätzlich in ein weiteres Array gespeichert. Also zum Beispiel so...

PHP:
while($containerRow = function_dbFetchArray($containerQuery)){
      $container[] = $containerRow;
}

$smarty->assign("container_header", $container);

Damit hatte ich eigentlich noch nie Probleme.
 
Also ich kann machen was ich will.
Auch das Beispiel von Rambomaster klappt, aaaaber immer nur der erste Buchstabe wird angezeigt.

Hier mal der Code:

PHP:
$containerQuery = function_dbQuery('select * from container');
   
   $smarty->assign('container_header', function_dbFetchArray($containerQuery));  
   
  
   
   
    // $smarty->assign('container_header', $containerRow['container_name']);
      
   
   
    $links = $smarty->fetch('container/test.html');
    $smarty->assign('links', $links);


HTML:
{foreach key=container_id item=con from=$container_header}

{$con.container_name}<br>

{/foreach}

Die Werte aus dem Array sind korrekt.
Wenn ich Sie mit einer normalen Whileschleife ausgeben lasse. Das klappt aber nicht mehr sobald ich diese in eine Smarty Variable packe.
 
Hmm Ok!

Habs hinbekommen mit letzterem Versuch.
Hatte nur die Variable im Template nicht mit geändert ;-(

Schussel!

Ich Danke euch für die Hilfe!

Gruss
 
Zurück