Prestashop php Klasse und Funktionen in php Datei includieren

Begonnen von Luca, 10 Feb 2012, 20:32

« vorheriges - nächstes »
Nach unten

Luca

Hallo Foris,
ich knabbere seit einiger Zeit an einem Problem und hoffe jetzt auf Ideen und Anregungen aus dem Forum. Im Kern geht es darum, Daten aus der Prestashop-Datenbank mit Hilfe der in prestashop hinterlegten Funktionen in eine eigene php-Datei einzulesen.
Mein Ansatz ist:
require_once(dirname(__FILE__).'/../../../classes/Db.php');
$value=Db::getInstance()->getValue('SELECT `value` FROM ps_table WHERE `id_conf` = 1');
echo  $value." Wert";

Leider funktioniert dieser Code nur im BO. Wenn ich die Datei über ein Template im FO einbinde oder eigenständig aufrufe bekomme ich die Fehlermeldung.
Fatal error: Class 'Db' not found on line 2.
Wie kann ich aus einer php Datei, die nicht unmittelbar zu Prestashop gehört auf die Funktionen von Prestashop zugreifen?
Viele Grüße

Chris

#1
11 Feb 2012, 12:01 Last Edit: 11 Feb 2012, 12:27 by Chris
Hallo Luca,

ich denke du hast nur einen falschen Pfad in deinem Script, der ist ja im Moment relativ gesetzt und wenn du das Script verschiebst ändert sich der Pfad mit:

require_once(dirname(__FILE__).'/../../../classes/Db.php');

Bindest du die Datei über die footer.php oder über die footer.tpl via Smarty ein?

Im Prinzip brauchst du nur die config.inc.php laden, anbei ein Beispiel:

<?php

require dirname(__FILE__).'/config/config.inc.php';

echo 
Configuration::get('PS_LANG_DEFAULT');

echo 
Db::getInstance()->getValue('SELECT `value` FROM ps_configuration WHERE `id_configuration` = 1');

?>


Das Script liegt jetzt z.B. im Rootverzeichnis des Shops.

Viele Grüße
Chris

Luca

Hallo Chris,
Zitat
ich denke du hast nur einen falschen Pfad in deinem Script,

die Datei db.php wird gefunden.  :-\ Wird die Datei nicht gefunden, steigt er schon in der ersten Zeile mit der Fehlermeldung
Zitat
Warning: require_once [function.require-once]: failed to open stream: No such file or directory in ...
aus.
Zitat
Bindest du die Datei über die footer.php oder über die footer.tpl via Smarty ein?

Das ist eine Frage, die für mich ganz neu ist. Die php Datei binde ich einmal über die Funktion getContent() ins Backend zur Modulkonfiguration ein. Im Backend kann ich Werte eingeben auf die Funktionen der Prestashop-Klassen wie der db Klasse zugreifen und Daten aus der Datenbank holen verarbeiten und zurückgeben und die php Datei so steuern.
Im Frontend binde ich die selbe php Datei über ein Template in dem ein iframe aufgerufen wird ein. Das funktioniert soweit auch. Die php Datei wird angezeigt und funktioniert. Ich kann aus dieser php Datei mit require_once(dirname(__FILE__).'/../../../config/settings.inc.php'); auf die Konstanten in der settings.inc.php zugreifen. Ich kann von dort aber nicht mit den Prestshop Funktionen auf die Werte in der Datenbank zugreifen. Bisher lese ich die nötigen Werte darum aus einer php library. Diese redundante Datenhaltung möchte ich gerne auflösen und die Daten aus der Datenbank ziehen. Aber ich bekomme es einfach nicht hin.  :'( Wahrscheinlich muß ich eingene sql statments über php absetzen ohne die Prestashop Funktionen zu nutzen.  :-\

Viele Grüße

Luca

Hallo Chris,
<?php
require dirname(__FILE__).'/config/config.inc.php';
echo 
Configuration::get('PS_LANG_DEFAULT');
echo 
Db::getInstance()->getValue('SELECT `value` FROM ps_configuration WHERE `id_configuration` = 1');
?>

Warum funktioniert das denn  ???
Das ist ja der Hammer.  :-X
Viele Grüße

Luca

Hallo,
mein Problem ist gelöst.  ;D
Ich weiß aber nicht warum.  ??? Ich habe ein bischen mit Deinem Beispielcode experimentiert, Chris. Die php Datei im Verzeichnis in den Moduleordner verschoben und dann aus meinem Code alles bis auf die Variablenzuweisung und das echo auskommentiert. Plötzlich funktioniert es.  :o Dann habe ich die Codes wieder aufgenommen. Jetzt greift die php Datei auf die Datenbank zu und holt sich dort die Werte.
require_once (dirname(__FILE__).'/../../../config/config.inc.php');
for($i=1; $i < 20; $i++)
{$value[$i]=Db::getInstance()->getValue('SELECT `value` FROM '._DB_PREFIX_.'table WHERE `id_conf` = '.($i));}
for($i=1; $i < 20; $i++)
{echo $value[$i]."  wert".$i;}

funktioniert  ;D ;D

Danke und viele Grüße

Holadinca

I do not think it would be worth it, but it's worth it.

Nach oben