PDF aus Artikelansicht

Hallo,
ich habe mir ein kleines Frontend Modul geschrieben, um die Artikeldaten als PDF auszugeben.
Der Aufruf des Moduls erfolgt aus der productmain.tpl (oxid 4.6).
Die Funktion createArtPDF liegt in der details.php (views Ordner).

Leider gibt es den folgenden Fehler:
Ich bekomme die Id des gerade angezeigten Artikels nicht.

public function createArtPDF()
    {	
    $sOxid= $this->getProduct()->getId();
....

ebenso

public function createArtPDF()
    {	
    $oArt= $this->getProduct();
....

liefert keinen Wert.
Kann mir jemand sagen, was ich falsch mache?
danke und LG

$this->soxId = oxConfig::getParameter( 'aid' );

Hallo,
danke. Ich hatte es inzwischen ähnlich geklöst und dem Funktionsaufruf in der tpl die oxid als hidden value übergeben und diese dann über oxconfig::getParameter(“oxid”) ausgelesen

Viele Wege führen nach Rom. (einfache und komplizierte :wink: )

schick - magst Du dieses Mini-Modul hier veröffentlichen?

noch eine kurze Frage:
Ich habe die oxlongdesc mit html-Tags.
Diese werden dem php Parser

 $oPdf->text(x,y, text) 

übergeben und als Plaintext in die PDF eingefügt.
Gibt es irgendeinen Parser, der die HTML Tags aus oxlongdesc auslesen würde, oder muss ich mir den selber zusammenbauen?
Danke und LG

$text = strip_tags(preg_replace("/&#?[a-z0-9]{2,8};/i","",$longdesc));

[QUOTE=Hebsacker;110556]schick - magst Du dieses Mini-Modul hier veröffentlichen?[/QUOTE]

Hallo,
bis das Modul salon-fähig ist, wird es wohl noch ein paar Tage dauern.

Auf jeden Fall zunächst einige Tipps:

  • ich musste in der oxpdf.php (diese überschreibt die Klasse tcpdf) die überschriebene writeHtml() Funktion auskommentieren, da diese in meiner Oxid-Version wohl ziemlich abgespeckt war. Ich benutze die native writeHtml() aus Tcpdf und kann somit alle Html-Tags parsen.

  • für die Generierung der pdf habe ich mir quick&dirty die PDF Funktion zur Erstellung der Rechnungen im Backend geschnappt und diese in details.php abgeändert eingebaut. In der productmain.tpl Funktionsaufruf.

Wenn jetzt alles funktioniert, werde ich das ins Modul packen und hier posten …

super - Danke schon mal im Voraus!

ein Problemchen gibt es noch mit der Bild-Ausgabe. z.B. Hersteller Logo Qualität ist nicht wirklich umwerfend da hier die Icon verwendet wird. Da müsste man wohl irgendwie auf das Bild an sich, nicht auf die generierte Grafik, zurückgreifen

standardmäßig ist aber leider nur das Icon in der Tabelle oxmanufacturers hinterlegt

ok. ich lese die oxid des Herstellers und suche dann nach seinem Originalbild, falls dieses vorhanden in out/pictures/master/manufacturer/ (oxid 4.6.)

Für alle, die eine einfache Quick & Dirty Lösung suchen:

[B]Diese Funktion ist aber auf meine Bedürfnisse angepasst! d.h. Ihr müsst diese bei Euch etwas umarbeiten![/B]

  1. in der productmain.tpl einen button für PDF generieren:
<!-- start SK create pdf -->
<form name="myedit2" id="myedit2" action="[{ $oViewConf->getSelfLink() }]" method="post" target="expPDF">
[{ $oViewConf->getHiddenSid() }]
<input type="hidden" name="cl" value="details">
<input type="hidden" name="fnc" value="createArtPDF">
<input type="hidden" name="oxid" value="[{$oDetailsProduct->oxarticles__oxnid->value}]">
<input type="submit" class="edittext" name="save" value="Als Pdf ausgeben">
<iframe name="expPDF" width="0" height="0" border="0" style="display:none;"></iframe>
</form>
<!-- ende SK create pdf -->
  1. In der details.php muss dann der Funktionsaufruf integriert werden:
public function createArtPDF()
    {
	$sOxid = oxConfig::getParameter( 'oxid' );
	$oArt = oxNew( 'oxarticle' );
	$oArt->load($sOxid);
        if ( $oArt ) {
            
			$oUtils = oxUtils::getInstance();
			$sTrimmedArtName = trim($oArt->oxarticles__oxtitle->getRawValue());
			$sFilename = $oArt->oxarticles__oxartnum->value . "_" . $sTrimmedArtName . ".pdf";
			$sFilename = str_replace(" ", "_", $sFilename);
			ob_start();
			$oArt->genPDF( $sFilename, 0 );
			$sPDF = ob_get_contents();
			ob_end_clean();
			$oUtils->setHeader( "Pragma: public" );
			$oUtils->setHeader( "Cache-Control: must-revalidate, post-check=0, pre-check=0" );
			$oUtils->setHeader( "Expires: 0" );
			$oUtils->setHeader( "Content-type: application/pdf" );
			$oUtils->setHeader( "Content-Disposition: attachment; filename=".$sFilename );
			oxUtils::getInstance()->showMessageAndExit( $sPDF );
            
        }
    }

die restliche Funktionalität im Modul verpackt: oxarticle=>…/myarticle
(Datei siehe Anhang) und in der oxpdf die writeHtml() auskommentiert, dann greift er auf die native Funktion von tcpdf zurück.

P.S. Funktion: _setArticleToPdf Zeile hinzugefügt:

$oPdf->write (10, "
Kategorie: ".$oCat->oxcategories__oxtitle->value." / ".$oCat->oxcategories__oxdesc->value);

Funktioniert alles bei mir.

und wenn es eine Möglichkeit gäbe, die durch oxpdf überschriebene Funktion WriteHtml() zu “unloaden”, d.h. diese nicht auskommentieren zu müssen, dann wäre die ganze Lösung modular und chique.

Klasse Arbeit, und danke fürs teilen.

es ist ja nur eine beta-Version und braucht noch etwas Arbeit!
[B][U]wichtig[/U][/B]:[B] in meiner Version in myarticle muss “class PDF Block” raus, da diese ja nochmal in invoicepdf->myorder deklariert wird![/B]