Datenbankabfrage zerschießt das Template - Anfängerfrage

opflaum

Aktives Mitglied
4. Februar 2016
14
0
Hallo zusammen!

Ich versuche mich gerade in der Templateentwicklung beim JTL- Shop. Dazu möchte ich gerne zufällig eine Kundenbewertung auf der Startseite ausgeben. Das Ganze versuche ich folgendermaßen:

In der functions.php habe ich folgende Funktion erstellt:
PHP:
/* Bewertungen für Startseite auslesen */
function get_bewertungen_home($params, &$smarty)
{
    $bewertung = new BewertungZufall();
    $smarty->assign($params['assign'], $bewertung->getBewertungZufall());
}
Dazu habe ich eine Datei namens: class.JTL-Shop.BewertungZufall.php erstellt mit folgendem Inhalt:
PHP:
<?php

class BewertungZufall
{
    public function getBewertungZufall()
    {
            $sqlselect = "SELECT cName FROM tbewertung WHERE nAktiv = '1' ORDER BY rand() LIMIT 0,1";
            
            $dbarray = Shop::DB()->query($sqlselect, 1);
            
            return $dbarray;
    }    
}

?>
Das Ganze versuche ich nun in meiner footer.tpl folgendermaßen auszugeben:
HTML:
{get_bewertungen_home assign='bewertung'}
Name: {$bewertung->cName}
Wenn ich die Seite nun aufrufe, wird nur noch ein weißer Bildschirm angezeigt... :( Kann mir jemand sagen was ich falsch mache?????
 

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.369
347
Halle (Saale)
AW: Datenbankabfrage zerschießt das Template - Anfängerfrage

Du musst in der functions.php die Funktion auch entsprechend registrieren.
In Shop4 wäre das dann
Code:
$smarty->registerPlugin('function', '[COLOR=#333333]get_bewertungen_home[/COLOR]', '[COLOR=#333333]get_bewertungen_home[/COLOR]');
Und die Klasse sollte auch irgendwie included werden..

Und ganz generell sollte die Fehleranzeige via

Code:
define('SHOP_LOG_LEVEL', E_ALL);
define('SMARTY_LOG_LEVEL', E_ALL);
ini_set('display_errors', 1);

aktiviert werden, das sollte dann aufschlussreicher als eine weiße Seite sein.
 

opflaum

Aktives Mitglied
4. Februar 2016
14
0
AW: Datenbankabfrage zerschießt das Template - Anfängerfrage

Oh nein... ich hatte nur vergessen die Funktion zu registrieren :) VIELEN DANK!
 

SportNet

Sehr aktives Mitglied
16. Oktober 2014
255
58
AW: Datenbankabfrage zerschießt das Template - Anfängerfrage

Du musst in der functions.php die Funktion auch entsprechend registrieren.
In Shop4 wäre das dann
Code:
$smarty->registerPlugin('function', '[COLOR=#333333]get_bewertungen_home[/COLOR]', '[COLOR=#333333]get_bewertungen_home[/COLOR]');
Und die Klasse sollte auch irgendwie included werden..

Hallo Felix,

im Falle eines Plugins (in diesem Fall eine alternativ Anzeige des Kategoriefilters) soll die Function ja nicht in der der functions.php definiert werden, sondern "extern" im Pluginverzeichnis.

Ich habe es dann mit Hook 22 probiert, aber dies funktioniert nur so lange die Filter "seoartige" Urls erzeugen (www.shopname.de/Herstellername:Kategorie__Merkmal1__Merkmal2). Sobald aber unter Umständen die "echten" Urls ("navi.php?h=450&suche=&Sortierung=0&af=0&kf=97") entstehen, wird ein PHP-Fehler geworden:

PHP:
Fatal error:  Call to undefined function name_der_funktion() in .....

Welchen hook wähle ich dann für die php Datei in der auch die registrierung stattfindet, so dass die Registrierung der Funktion in dem Fall funktioniert?

Danke und Gruß
 

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.369
347
Halle (Saale)
AW: Datenbankabfrage zerschießt das Template - Anfängerfrage

Am besten Hook 133 (HOOK_SMARTY_INC). Sobald der läuft, wurde das Smarty-Objekt erstellt und es können Funktionen registriert werden.