Formular-Druckfunktion

Wir haben Formulare erstellt die der Kunde auch ausdrucken kann/sollte. Abgesehen von der Druckmöglichkeit über den Browser, gibt es keine Möglichkeit? Auch die Möglichkeit die Produkt-Detailansicht auszudrucken macht durchaus Sinn.

Hallo, also es gibt schon ein paar Möglichkeiten. Zum einen die HTML-Seite über den Browser drucken :slight_smile: Das nächste wäre über Smarty und die FPDF-Klasse. So werden die Rechnungen, bzw. Lieferscheine im Backend erstellt. Noch eine ganz andere Möglichkeit und meine persönlich liebste ist über Apache-FOP. Dies ist eine Dokumententransformation mit der man aus XML’s ein XSL-FO macht und daraus ein PDF erstellen kann. Viele Grüße Thomas

1 „Gefällt mir“

Hallo Thomas, danke für die Infos. Der Ausdruck via Browser ist bekannt. Ist halt nich so prickelnd. Die anderen Ansätze sind sehr interessant, aber meine Möglichkeiten sind da doch sehr begrenzt! :wink: Das ist doch eher was für “Eingeweihte” aus dem Fach. Grüße aus Berlin Michael

Hallo, geht es um einen einfachen Button, der z.B. die Browser-Druckfunktion im Hintergrund nutzt? Das wäre schon über einen einfachen Linkeinbau möglich. Anbei ein Beispiel-Code: [code]

[Diese Seite drucken](javascript:window.print() “Diese Seite drucken”)
[/code] Als einfacher Link ist der Aufruf ebenfalls möglich: [Diese Seite drucken](javascript:window.print() "Diese Seite drucken") Dieser Code kann im Template an beliebiger Stelle eingebunden werden, z.B. in der index.tpl. So kann die Druckfunktion auf jeder Seite, auch in den Formularen, genutzt werden. Vielleicht reicht das für diese Zwecke schon aus? Viele Grüße Sebastian

1 „Gefällt mir“

Hallo javascript:window.print() ist ja das Drucken aus dem Browser heraus. :wink:

joo, das ist Drucken aus dem Browser. Aber es hilft mir erstmal weiter, danke. Vielleicht ist es ja mal angedacht die Druckmöglichkeit in Shopware einzuführen? Grüsse aus Berlin Michael

Hi … gibts hier eigentlich irgendwas neues? Wenn ein Kunde eine Bestellung gemacht hat kann er diese ja drucken … ich hab das mal versuchweise gemacht … und bin dann doch leicht erschrocken :wink: Gibts denn kein Addon welches z.B. einfach die eMail ausdruckt welche verschickt wird? Die ist ja um einges “leichter”. Es haben ja nicht gerade alle einen Laserdrucker … und wenn man da ein wenig intensive Farben hat und nicht gerade ein versierter User am PC sitzt hat er danach keine Tinte mehr :sunglasses: Ja ich weiss … der Kunde kann sich auch die eMail ausdrucken … aber wenn er hier schon auch die Möglichkeit hat nach der Bestellung zu drucken und im Standardtext das auch noch empfohlen wird sollte er sich ja nicht gleich ärgern weil ihm die Tinte aus dem Drucker gesaugt wird :wink: Markus

“Gibts denn kein Addon welches z.B. einfach die eMail ausdruckt welche verschickt wird?” Im Moment gibt es das nicht. Das lässt sich in 3.5 aber relativ einfach umsetzen. Dort könntest du theoretisch auch einfach die PDF-Belegerstellung in der Storefront dafür nutzen. (Neuer Belegtyp Auftragsbestätigung). In 3.0.5.1 könntest du das in der Zwischenzeit über einen Hookpoint lösen, z.B. sOrder.php_sendMail_BeforeSend3 Dort folgenden Code einfügen: if (!empty($variables["ordernumber"])){ $update = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Execute(" UDPATE s\_order SET o\_attr6 = ? WHERE ordernumber = ? ",array($mail-\>Body,$variables["ordernumber"])); } Die Spalte o_attr6 müsstest du kurz in der DB von Varchar auf Text ändern. Mit diesem Snippet müsste bei jeder Bestellung der Inhalt der Bestätigungsmail in die Spalte s_order.o_attr6 gespeichert werden. Im Viewport s_sale würdest du dann diese Spalte wieder auslesen und im Template verwerten können. (Etwa ab Zeile 331) $variables["mailText"] = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>GetOne(" SELECT o\_attr6 FROM s\_order WHERE ordernumber = ? ",$this-\>sSYSTEM-\>\_SESSION["sOrderVariables"]["ordernumber"]); Der Text müsste dann im Template über {$mailText} verfügbar sein. Diesen könntest du für die Druckausgabe verwenden.

Hi Stefan, ok … die ersten Punkte habe ich schonmal … das war ja soweit klar … [quote]Im Viewport s_sale würdest du dann diese Spalte wieder auslesen und im Template verwerten können. (Etwa ab Zeile 331) $variables[“mailText”] = $this->sSYSTEM->sDB_CONNECTION->GetOne(“SELECT o_attr6 FROM s_order WHERE ordernumber = ?”,$this->sSYSTEM->_SESSION[“sOrderVariables”][“ordernumber”]); [/quote] Mit dem Teil habe ich jetzt noch ein Problemchen … wo soll ich den einfügen? An die viewports komme ich doch gar nicht dran … oder stehe ich jetzt irgendwie auf dem Schlauch? Schöne Grüße Markus Nachtrag: Ich habe die erste Änderung sowie die Datenbankänderung durchgeführt … danach eine Bestellung ausgeführt … das Datenbankfeld belict leider leer.

Nachtrag: Ich habe die erste Änderung sowie die Datenbankänderung durchgeführt … danach eine Bestellung ausgeführt … das Datenbankfeld belict leider leer. Hast du den Shopcache geleert? Mit dem Teil habe ich jetzt noch ein Problemchen … wo soll ich den einfügen? An die viewports komme ich doch gar nicht dran … oder stehe ich jetzt irgendwie auf dem Schlauch? Doch, die Viewports liegen offen unter engine/core/class/viewports In diesem Fall die s_sale.php öffnen, das Snippet unterhalb von $this->sSYSTEM->_SESSION[„sOrderVariables“][„ordernumber“] = $this->sSYSTEM->sMODULES[‚sOrder‘]->sSaveOrder(); einfügen. Nimm am besten folgenden Code, der erste hat noch einen Fehler: $this->sSYSTEM->_SESSION[„sOrderVariables“][„mailText“] = $this->sSYSTEM->sDB_CONNECTION->GetOne(" SELECT o_attr6 FROM s_order WHERE ordernumber = ? „,$this->sSYSTEM->_SESSION[„sOrderVariables“][„ordernumber“]); Dann müsstest du im Template über {$mailText} an den Text kommen. Falls das mit dem Hookpoint nach Leeren des Cache immer noch nicht geht, kannst du die Klasse sOrder.php auch einfach erweitern. Dazu einfach in der Tabelle s_core_factory die Spalten inheritname und inheritfile anpassen (name = myOrder, file = myOrder.php) Anschließend unter engine/core/class/inherit eine neue Datei myOrder.php anlegen. [code]<?php include(“$path/sOrder.php");

class myOrder extends sOrder{
function sendMail($variables){
parent::sendMail($variables);
if (!empty($variables[„ordernumber“])){
$update = $this->sSYSTEM->sDB_CONNECTION->Execute(" UDPATE s_order SET o_attr6 = ? WHERE ordernumber = ? ",array($this->sSYSTEM->sMailer->Body,$variables[„ordernumber“])); } } } [/code] Das ist so eh robuster als der Weg über den Hookpoint (Hookpoints sind in 3.5 deprecated)

Hi Stefan, erstmal danke … aber es will trotzdem nicht :wink: Eine MyOrder.php gabs schon :wink: Da ward ihr wohl schonmal dran :wink: [code]<?php include("$path/sOrder.php");

class myOrder extends sOrder{

// Bestellung drucken
function sendMail($variables){
parent::sendMail($variables);
if (!empty($variables[“ordernumber”])){
$update = $this->sSYSTEM->sDB_CONNECTION->Execute(" UDPATE s_order SET o_attr6 = ? WHERE ordernumber = ? ",array($this->sSYSTEM->sMailer->Body,$variables[“ordernumber”])); } } … … [/code] Ich habe da den Teil von dir jetzt einfach vornedran gehangen. Die s_core_factory war schon entsprechend angepasst. Trotzdem … in der Datenbank im Feld o_attr6 kommt nichts an … das bleibt hartnäckig leer :wink: Cache hatte ich immer wieder vorher geleert :wink: Markus

Na dann müssen wir den Käfer mal suchen. Bau mal folgenden Debug-Code ein, bzw. stell das kurz um. if (!empty($variables["ordernumber"])){ $update = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Execute(" UDPATE s\_order SET o\_attr6 = ? WHERE ordernumber = ? ",array($this-\>sSYSTEM-\>sMailer-\>Body,$variables["ordernumber"])); echo $this-\>sSYSTEM-\>sDB\_CONNECTION-\>ErrorMsg()." "; echo "Dump mail:".$this-\>sSYSTEM-\>sMailer-\>Body." "; echo "Dump Ordernumber:".$variables["ordernumber"]:" "; }else { print\_r($variables);die("Ordernumber empty"); } Dann stell die Response mal ein… Die Bestellbestätigungsemail wird aber normal verschickt? Die kommt also an? Bestellung selbst taucht auch im Backend auf?

Hi Stefan, // Bestellung drucken function sendMail($variables){ parent::sendMail($variables); if (!empty($variables["ordernumber"])){ $update = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Execute(" UDPATE s\_order SET o\_attr6 = ? WHERE ordernumber = ? ",array($this-\>sSYSTEM-\>sMailer-\>Body,$variables["ordernumber"])); echo $this-\>sSYSTEM-\>sDB\_CONNECTION-\>ErrorMsg()." "; echo "Dump mail:".$this-\>sSYSTEM-\>sMailer-\>Body." "; echo "Dump Ordernumber:".$variables["ordernumber"]:" "; } else {print\_r($variables);die("Ordernumber empty");} } beschert mir eine schöne weisse Seite :wink: Die Bestellemail kommt an und auch im Backend ist die Bestellung da :wink: schöne Grüße Markus

Dann ist da ein Syntaxfehler im Code. echo „Dump Ordernumber:“.$variables[„ordernumber“]:"
„; Den Doppelpunkt hinter ordernumber“] durch einen Punkt ersetzen. Dann kommt hoffentlich mehr Output :wink:

Hi … orgs … na das hätte ich auch selbst sehen können :wink: Jetzt gibts output … [quote]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘UDPATE s_order SET o_attr6 = ’ \r’ at line 1 Dump mail:[/quote] Dann kommt die Mail … die sieht gut aus … und dann noch … [quote] Dump Ordernumber:10045 FirePHP ERROR: Headers already sent in /shovuxcx/www.shop-ftp.de/ftpshops/store/engine/core/class/inherit/myOrder.php on line 19. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive. [/quote] Markus

Hey, habe es jetzt selbst in einer Demo ausprobiert. Also hier mal der komplette Code der myOrder.php, wobei natürlich die Debug-Ausgaben entfernt werden müssten. include("$path/sOrder.php"); class myOrder extends sOrder{ function sendMail($variables){ parent::sendMail($variables); if (!empty($variables["ordernumber"])){ $update = $this-\>sSYSTEM-\>sDB\_CONNECTION-\>Execute(" UDPATE s\_order SET o\_attr6 = ? WHERE ordernumber = ? ",array($this-\>sSYSTEM-\>sMailer-\>Body,$variables["ordernumber"])); echo $this-\>sSYSTEM-\>sDB\_CONNECTION-\>ErrorMsg()." "; echo "Dump mail:".$this-\>sSYSTEM-\>sMailer-\>Body." "; echo "Dump Ordernumber:".$variables["ordernumber"]." "; } else {print\_r($variables);die("Ordernumber empty");} } } ?\> Funktioniert 100 %. Ansonsten schick mal einen Dump von deiner Datei, evtl. kollidiert da ja irgendwas. Versionsstand ist 3.0.5?

Hi Stefan, tja … leider geht da nichts. Das Datenbankfeld bleibt leer. Es ist die Version 3.0.5 In der myOrder.php habe ich alles rausgeschmissen was da drin war und nur deinen Code rein … trotzdem wird nichts gespeichert. Keine Ahnung woran das liegt. Ich kann dir da auch gerne den Zugang vom Shop geben bzw. dir sagen um welchen Shop es sich handelt wenn du magst. Schöne Grüße Markus

Ja, schick mir mal bitte den Zugang per PN, oder falls uns der sowieso vorliegt den Kundennamen. Was für eine PHP Version läuft denn auf dem Server? Du könntest nochmal testweise var_dump($this->sSYSTEM->sMailer);exit; direkt unterhalb des “parent::sendMail($variables);” reinsetzen.

Funktioniert jetzt. Da war ein Schreibfehler in der SQL-Query. Es heißt natürlich “update” und nicht UDPATE

Hi Stefan, ich muss doch nochmal nerven … da wird nichts in die DB geschrieben … das Feld ist nachwievor leer. Markus