Neues Smarty für Extra Tabelle

Diskussionen rund um die Templates (incl. Smarty)
Antworten
rieste
Beiträge: 134
Registriert: Fr 18. Mär 2011, 07:54
Shop Version: ECB 1.08 leider

Neues Smarty für Extra Tabelle

Beitrag 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:

Code: Alles auswählen

{getProductData}
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?
Mein Seite: https://www.rieste.com
Mein Lichtshop https://licht365.com
yogi
Administrator
Beiträge: 292
Registriert: Do 6. Mai 2010, 14:16
Shop Version: die aktuelle
Wohnort: Köln
Kontaktdaten:

Re: Neues Smarty für Extra Tabelle

Beitrag 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']
rieste
Beiträge: 134
Registriert: Fr 18. Mär 2011, 07:54
Shop Version: ECB 1.08 leider

Re: Neues Smarty für Extra Tabelle

Beitrag 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....
Mein Seite: https://www.rieste.com
Mein Lichtshop https://licht365.com
Xantiva
Beiträge: 948
Registriert: Mo 10. Mai 2010, 16:26
Shop Version: 1.0.10 [dev]
Kontaktdaten:

Re: Neues Smarty für Extra Tabelle

Beitrag 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
Mein Shop: http://www.basteln-selbermachen.de
rieste
Beiträge: 134
Registriert: Fr 18. Mär 2011, 07:54
Shop Version: ECB 1.08 leider

Re: Neues Smarty für Extra Tabelle

Beitrag 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...
Mein Seite: https://www.rieste.com
Mein Lichtshop https://licht365.com
rieste
Beiträge: 134
Registriert: Fr 18. Mär 2011, 07:54
Shop Version: ECB 1.08 leider

Re: Neues Smarty für Extra Tabelle

Beitrag 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:

Code: Alles auswählen

result $params['pID'] ergibs 4630
=> 4630

Ausgabe von:

Code: Alles auswählen

	foreach ($a as $v) {
	    echo "Wert: $v.\n";
	}
=> Wert:1 Wert: 2 Wert: 3 Wert: 27

Ausgabe von:

Code: Alles auswählen

	foreach ($result as $v) {
	    echo "Wert: $v.\n";
	}
=> 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 :-)
Mein Seite: https://www.rieste.com
Mein Lichtshop https://licht365.com
yogi
Administrator
Beiträge: 292
Registriert: Do 6. Mai 2010, 14:16
Shop Version: die aktuelle
Wohnort: Köln
Kontaktdaten:

Re: Neues Smarty für Extra Tabelle

Beitrag von yogi »

Moin,

Code: Alles auswählen

$db_result = xtDbQuery(...)
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.
rieste
Beiträge: 134
Registriert: Fr 18. Mär 2011, 07:54
Shop Version: ECB 1.08 leider

Re: Neues Smarty für Extra Tabelle

Beitrag 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!!!!
Mein Seite: https://www.rieste.com
Mein Lichtshop https://licht365.com
Antworten