Seite 1 von 1
Neues Smarty für Extra Tabelle
Verfasst: Mi 12. Jun 2013, 15:07
von rieste
Hallo!
Ich habe mir eine extra Tabelle angelegt products_rieste wo ich die Struktur
products_id | leistung | lumen
habe.
ich möchte nun ein smarty machen wo ich im Template die Werte der Tabelle ausgebe.
mein Ansatz ist folgender:
Code: Alles auswählen
function smarty_function_getProductData($pid) {
$leistung = xtDBquery("select leistung
from ".TABLE_PRODUCTS_RIESTE."
where products_id = '".$pID."'");
$Anzahl = intval($leistung);
return $Anzahl;
}
Im Template:
Das Problem ist aber das er im Moment irgend eine Zahl ausgiebt.
Mein Ziel ist es dann mit {getProductData|lumen} genau den einen Wert zu holen.
Aktuell vermute ich das beim Aufruf bzw. der Zuweisung der pid ein fehler ist...
weiß da jemand mehr?
Re: Neues Smarty für Extra Tabelle
Verfasst: Mi 12. Jun 2013, 15:33
von yogi
Hallo Rieste,
fast richtig, denn die Parameterübergabe funktioniert so nicht.
1. Die Datei gehört in deinem Template in das Verzeichnis "smarty"
2. der Dateiname ist wichtig: function.getProductData.php
3. Die Paramter für eine Funktion sind immer ($params, &$smarty), siehe
Smarty durch Plugins erweitern und
Smarty Template-Plugins
Aufruf im Template dann mit {getProductData pID=???}
Abfrage in der Funktion mit $params['pID']
Re: Neues Smarty für Extra Tabelle
Verfasst: Mi 12. Jun 2013, 20:51
von rieste
hallo nochmal...
das smarty geht mal soweit das ich den aufruf und das return schaffe aber das auslesen klappt nicht....

da bekomme ich
Resource id #3444 wobei 3444 ansteigt...
Code: Alles auswählen
function smarty_function_getProductData($params, $smarty)
{
global $leistung;
$leistung = xtDBquery("select leistung
from ".TABLE_PRODUCTS_RIESTE."
where products_id = '".$params['pID']."'");
return sprintf($leistung);
}
ich glaube der aufruf aus der datenbank ist falsch oder liege ich da daneben....
Re: Neues Smarty für Extra Tabelle
Verfasst: Mi 12. Jun 2013, 21:22
von Xantiva
Da fehlt noch die Hälfte
Mir der "Query" bekommst Du nur die "Ressource". Aus der musst Du jetzt noch die einzelnen Elemente herausholen. Stichwort: xtc_db_fetch_array ...
Code: Alles auswählen
$result = array();
while ($row = xtc_db_fetch_array($leistung)) {
$result[] = $row;
}
In $result steht dann das Array mit den Ergebnissen der Abfrage drin. Die kannst Du dann mit foreach ... ausgeben, oder im Template die Schleife für die Ausgabe erstellen (mehr Freiheit).
Schau mal hier nach den Funktionen, die xtc_... funktionieren Sinngemäß:
http://php.net/manual/de/function.mysql-db-query.php
http://www.php.net/manual/de/function.m ... -array.php
Re: Neues Smarty für Extra Tabelle
Verfasst: Mi 12. Jun 2013, 21:31
von rieste
hm okay danke mal einlesen.
ich dachte ich frage eh nur einen wert ab , nehme ja Nur die spalte lumen und bei pID die zeile.....
die erklärung ist aber gut danke erstmal...
Re: Neues Smarty für Extra Tabelle
Verfasst: Do 13. Jun 2013, 06:10
von rieste
Irgendwas mache ich gewalt falsch
Testparameter: pID=4630
products_rieste:
products_id 4630
lumen: 1500
leistung: 24
=> Die Tabelle ist mal nicht leer!
Code: Alles auswählen
function smarty_function_getProductData($params, $smarty)
{
global $leistung;
$db_result = xtc_db_query("select leistung, lumen from ".TABLE_PRODUCTS_RIESTE." WHERE (products_id = '".$params['pID']."')");
if (!$db_result) {
echo "DB Fehler, konnte die Datenbank nicht abfragen\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
$result = array();
while ($row = xtc_db_fetch_array($db_result)) {
$result[] = $row;
}
$a = array(1, 2, 3, 17);
foreach ($result as $v) {
echo "Wert: $v.\n";
}
}
Testergebnisse:
Ausgabe von:
=> 4630
Ausgabe von:
=> Wert:1 Wert: 2 Wert: 3 Wert: 27
Ausgabe von:
=> Wert:
Auswertung meinerseits:
1. Die Übergabe von pID funktioniert
2. Die Auflösung von foreach funktioniert auch
Vermutung:
Das Array wird einfach nicht gefüllt - ich weiß jedoch nicht ob die Datenbankauslese falsch ist oder was anderes....
Kann es sein das ich die Datenbank irgendwie noch falsch deklariert habe? für mich wäre der mySQL Befehl richtig...
Fazit: Einfacher Fall für Profis - schwere Baustelle für neuankömmlinge

Re: Neues Smarty für Extra Tabelle
Verfasst: Do 13. Jun 2013, 07:22
von yogi
Moin,
ist schon sachlich etwas falsch, da xtDbQuery eine Query zurückgibt und kein Result. Das result mußt du dann noch Zeilenweise lesen wie Xantiva es schon beschrieben hat:
Code: Alles auswählen
function smarty_function_getProductData($params, $smarty)
{
if (!array_key_exists('pID', $params)) {
$smarty->trigger_error('getProductData: Missing Parameter pID', E_USER_ERROR);
}
$db_query = xtc_db_query("select leistung, lumen from ".TABLE_PRODUCTS_RIESTE." WHERE (products_id = '".$params['pID']."')");
if (!$db_query) {
error_log('MySQL Error: ' . mysql_error());
$smarty->trigger_error('DB Fehler, konnte die Datenbank nicht abfragen', E_ERROR);
}
// auslesen der DB-Query - die Query liefert nur ein Datenzeile => kein Array()
$result = NULL;
while ($row = xtc_db_fetch_array($db_query)) {
$result = $row;
}
// zuweisen des ergebnis an eine Smary-Variable:
$smarty->assign('getProductData', $result);
return;
}
Nun sollte im Template eine Variable $getProductData als array verfügbar sein - mit leistung und lumen als keys.
Re: Neues Smarty für Extra Tabelle
Verfasst: Do 13. Jun 2013, 11:10
von rieste
So die fertige Funktion!
Was macht die Funktion:
Durch die db_query wird ein beliebiger Wert aus der Datenbank ausgelesen. Man kann hier frei definierte Tabellen oder auch Produktdaten abrufen. Durch den Abruf kann das beliebig im Template verwendet werden.
Code: Alles auswählen
function smarty_function_getProductData($params, $smarty)
{
if (!array_key_exists('pID', $params)) {
$smarty->trigger_error('getProductData: Missing Parameter pID', E_USER_ERROR);
}
$db_query = xtc_db_query("select leistung, lumen from ".TABLE_PRODUCTS_RIESTE." WHERE (products_id = '".$params['pID']."')");
if (!$db_query) {
error_log('MySQL Error: ' . mysql_error());
$smarty->trigger_error('DB Fehler, konnte die Datenbank nicht abfragen', E_ERROR);
}
$result = array();
while ($row = xtc_db_fetch_array($db_query)) {
$result = $row;
}
$smarty->assign('getProductData', $result);
}
Aufruf übers Template:
Code: Alles auswählen
{getProductData pID=$item.PRODUCTS_ID} //lädt das Smarty und Übergibt das Produkt
{$getProductData.lumen}// ließt die Daten der Tabelle Lumen aus!
Danke:
Mike & Yogi!!!!