Eigenes Plugin - Datenbank Parameter in die Bootstrap

Hallo, wie bekomme ich in die Bootstrap meines Plugins die Datenbank Connection? Früher konnte man die Datei include("…/…/…/backend/php/check.php"); einbinden. Diese gibt es nun aber nicht mehr. Ich benötige in einer externen PHP Datei, welche ich per Iframe einbinde die Zugangsdaten. Wie mache ich das?

Hey, das solltest du so am besten garnicht mehr machen. Also statt einer externen Datei, besser eine Controller-Action die du in das iFrame lädst. Alternativ kannst du in einer Controller-Action auch eine Datei includen: Beispiel: [code]<?php class Shopware_Controllers_Frontend_IncludeTest extends Enlight_Controller_Action
{

public function includeFileTestAction()
{
   $this->View()-\>setTemplate(); // Disable output define("\_auth",true); include(dirname(\_\_PATH\_\_)."/test.php"); } } // test.php if (!defined("\_auth")) exit; $a = Shopware()-\>Db()-\>fetchOne("SELECT 1"); die($a); [/code]

Ja, ich weiß. Das st nur verübergehend. Mir fehlt im Moment die Zeit. Ich will eig. das komplette Plugin mit ExtJS Elementen machen. Aber vorest muss ich die bestehende alte Datei includen. Gibt es nicht noch eine andere Möglichkeit?

Über den o.g. Weg kannst du ja die Datei direkt includen ? Du musst nur das !defined("_auth")) exit; am Anfang der Datei hinzufügen. Das verhindert, dass die Datei direkt aufrufbar ist. Statt dem Datei-Pfad inkludierst du dann die Controller-Action als iFrame-Source. Also

Hallo Stefan, soweit würde es klappen. Aber ich habe in meiner PHP ja HTML Text, welcher ausgeben werden soll: [code]

&transfer=1"> " /> Hinweis Hier können Sie Materialien und die dazugehörigen m² Staffelung mit Preisen definieren.
<fieldset>
	<legend>

Material hinzufügen












Pos:" />

Name:" />

Beschreibung:" />

min. Länge:" />

min. Breite:" />

max. Länge:" />

max. Breite:" />
Hinzufügen/ändern

[/code] Mit dem kann ich ja in dem Controller nichs anfangen. Sprich ich müsste alles komplett neu Aufbauen mit Template Dateien etc. Da spare ich mir ja keine Zeit ;) Dann kann ich es gleich "richtig" mit reinen ExtJS Komponeten machen. Hast du noch eine Idee? Kann ich den Die DB Daten irgendwie aus einer vorhanden Datei rausziehen?

Gibts noch einen anderen Weg?

Stefan, ich muss dich hier noch mal nerven. Kann ich die DB Daten nicht einfach noch aus irgendeiner Datei ziehen? Ich brauch dies nur vorübergehend, bis dass Plugin komplett mit ExtJS umgesetzt wurde.

[quote]Ich habe in meiner PHP ja HTML Text, welcher ausgeben werden soll: Mit dem kann ich ja in dem Controller nichs anfangen. Sprich ich müsste alles komplett neu Aufbauen mit Template Dateien etc.[/quote] Nein, das ist nicht richtig. Dadurch, das du in der Controller-Action „$this->View()->setTemplate();“ ausführst, wird die Shopware-Template-Engine deaktiviert und der Inhalt der inkludierten Dateien wird direkt ausgegeben. Also im Prinzip müsste das so funktionieren und das ist in jedem Fall besser, als irgendetwas separat an Shopware vorbei zu scripten.

Ok, dann werde ich das nachher noch mal versuchen. Es super wenn es so klappt. Danke Dir.

Hi Stefan, ich habe es nun noch mal mit dem Controller versucht: [code]<?php class Shopware_Controllers_Frontend_OttAreaCalc extends Enlight_Controller_Action
{

public function materialAction()
{
   $this->View()-\>setTemplate(); // Disable output define("\_auth",true); include("/engine/Shopware/Plugins/Community/Frontend/OttAreaCalculator/Views/backend/article/view/detail/Material.php"); echo 'material'; } public function verarbeitungAction() { $this-\>View()-\>setTemplate(); // Disable output define("\_auth",true); include(dirname(\_\_PATH\_\_)."/Views/backend/article/view/detail/Verarbeitung.php"); echo 'verarbeitung'; } } if (!defined("\_auth")) exit; [/code] Leider wird keinerlei HTML Code aus der Material.php angezeigt. Ich bekomme im Iframe nur die echo Ausgabe. In der PHP Datei ist reiner HTML Code ohne Echo mit PHP Teilen. z.B. So: [code]
<?php while ($Mat=mysql_fetch_array($getMat)) { ?>
<tr style="background: url(../../../backend/img/default/window/fieldset_table_bg.gif) repeat-x; height:22px;border-bottom: 1px solid #a0a0a0;">
 <td width="5%" style="padding-left:5px"><?php echo $Mat["position"] ?></td>
 <td width="10%" nowrap style="padding-left:5px"><?php echo $Mat["name"] ?></td>
 <td width="55%" style="padding-left:5px"><?php echo $Mat["description"] ?></td>
 <td width="10%" style="padding-left:5px">
<?php echo $Mat["minlength"] ?>x<?php echo $Mat["minwidth"] ?> <?php }

?>

Position Name Beschreibung min Größe max Größe Aktionen
<?php echo $Mat["maxlength"] ?>x<?php echo $Mat["maxwidth"] ?> " action="<?php echo $_SERVER["PHP_SELF"]."?editID=".$Mat["id"]."&editPosition=".$Mat["position"]."&editName=".$Mat["name"]."&editDescription=".$Mat["description"]."&editMinL=".$Mat["minlength"]."&editMinW=".$Mat["minwidth"]."&editMaxL=".$Mat["maxlength"]."&editMaxW=".$Mat["maxwidth"]."&getArticleID=".$_GET['getArticleID']?>"> ').submit();">
 <form method="POST" id="Matdel&lt;?php echo $Mat[">" action="<?php echo $_SERVER["PHP_SELF"]."?getArticleID=".$_GET['getArticleID']."&material2=".$Mat["name"]?>&amp;transfer=4"&gt;
 <a class="ico delete" style="cursor:pointer" onclick="document.getElementById('Matdel&lt;?php echo $Mat[" id>').submit();"&gt;</a>
 </form>
 </td>
<?php }

?>[/code]

Also das code exit;[/code] muss ja an den Anfang der einzubindenen Datei und nicht an das Ende des Controllers. Also z.B zu Anfang der “Material.php”:<?php (!defined("_auth")) exit;
?>Ansonsten kann es sein, dass das Output-Buffering dir dazwischen funkt. Du kannst mal probieren nach dem Include ob\_end\_flush(); auszuführen.

ich habe ob_end_flush(); nun eingebunden. public function materialAction() { $this-\>View()-\>setTemplate(); // Disable output define("\_auth",true); include(dirname(\_\_PATH\_\_)."/Views/backend/article/view/detail/Material.php"); ob\_end\_flush(); echo 'material'; } Ausgabe => material Fatal error: Uncaught exception ‘Zend_Controller_Response_Exception’ with message ‘Cannot send headers; headers already sent in /kunden/117539_78141/webseiten/shopwareV4/engine/Shopware/Plugins/Community/Frontend/OttAreaCalculator/OttAreaCalcBackend.php, line 10’ in /kunden/117539_78141/webseiten/shopwareV4/engine/Library/Zend/Controller/Response/Abstract.php:323 Stack trace: #0 /kunden/117539_78141/webseiten/shopwareV4/engine/Library/Zend/Controller/Response/Abstract.php(341): Zend_Controller_Response_Abstract->canSendHeaders(true) #1 /kunden/117539_78141/webseiten/shopwareV4/engine/Library/Enlight/Controller/Response/ResponseHttp.php(110): Zend_Controller_Response_Abstract->sendHeaders() #2 /kunden/117539_78141/webseiten/shopwareV4/engine/Library/Zend/Controller/Response/Abstract.php(768): Enlight_Controller_Response_ResponseHttp->sendHeaders() #3 /kunden/117539_78141/webseiten/shopwareV4/engine/Library/Enlight/Controller/Front.php(268): Zend_Controller_Response_Abstract->sendResponse() #4 /kunden/117539_78141/webseiten in /kunden/117539_78141/webseiten/shopwareV4/engine/Library/Zend/Controller/Response/Abstract.php on line 323

Was ist denn Line 10 in deinem Controller? Ggf. funktioniert die Ausgabe der Datei nun auch direkt - du solltest das ob_end_flush ja nur einbauen, wenn es nicht klappt :wink:

Also Line 10 ist der Code: ob_end_flush(); Mache ich diese Zeile raus, so erscheint nur wieder die ECHO Ausgabe ‚Material‘ welche ich im Controller definiert habe. Aber es erscheint keinerlei Code aus der Material.php. Edit. Ich habe nun mal http://www.google.de eingebunden, das geht. Evtl. habe ich Probleme mit dem Pfad zur Datei.

mhhh, ich verstehe es nicht. Wenn ich google.de einbinde, dann wird diese Seite eingebunden. Wenn ich den Controller manuell aufrufe und auch im Iframe vom extJS. Binde ich aber wieder meine PHP ein (egal ob absoluter oder relativer Pfad, oder auch direket über http und voller Domain) so klappt es nicht. Ich habe zum Test dies (!defined("_auth")) exit; noch mal raus genommen. Ruf ich die PHP Datei nun direkt auf, so erscheint de Code, aber einige Fehlermeldungen, da ich ja keine DB Auhtentifizierung habe. Rufe ich den Conrtoller auf oder über das Backend das Iframe so habe ich wiederum nur die Echo Ausgabe ‚material‘

okay, habe es gelöst. vielen vielen dank.