Hallo zusammen.
Es ist mir gelungen, die Bestellnummer als Barcode in das Modul invoicepdf zu integrieren.
Jetzt soll diese Funktion auch updatesicher werden. Als Newbie fehlt mir da absolut der Plan.
Ich haben eine Single Server Lizenz von
barcodephp.com (60USD falls es mal jemand braucht),
da baut mein Code drauf auf.
Barcode ist 8192 + oxidbestellnummer +1
invoicepdf.php ab Zeile 940
$JZL_order = $this->oxorder__oxordernr->value;
$JZL_ncode = '8193'.$JZL_order.'1';
require('class/BCGColor.php');
require('class/BCGDrawing.php');
require('class/BCGcode39.barcode.php');
$color_black = new BCGColor(0, 0, 0);
$color_white = new BCGColor(255, 255, 255);
// Barcode Part
$code = new BCGcode39();
$code->setScale(2);
$code->setThickness(30);
$code->setForegroundColor($color_black);
$code->setBackgroundColor($color_white);
$code->setFont($font);
$code->setChecksum(false);
$code->parse($JZL_ncode);
// Drawing Part
$drawing = new BCGDrawing('', $color_white);
$drawing->setBarcode($code);
$drawing->setFilename('../tmp/'.$JZL_ncode.'.png');
$drawing->draw();
$drawing->finish(BCGDrawing::IMG_FORMAT_PNG);
// Oxid again
$oPdf->image( '../tmp/'.$JZL_ncode.'.png', 15, 50, 156*0.2, 15*0.2, '', $oShop->oxshops__oxurl->value );
unlink('../tmp/'.$JZL_ncode.'.png');
Ich nehme die Bestellnumer, mach einen Barcodefile in TMP,
lade die Barcodegrafik ins PDF und lösche die dann Datei wieder.
Alles recht einfach aber eben noch kein Modul:-(
Danke für die Hilfe, Jürgen
PS.: Im Forum suchen schon einige nach einer Barcodelösung - das hier klappt:-)
schade nur, dass die eingebaute PDF Bibliothek auch selbst die Barcodes generieren kann, hättest die 60$ sparen können
Anleitungen zum Thema Module Entwicklung findest du hier:
http://it-republik.de/php/artikel/Module-fuer-PHP-basierte-E-Commerce-Systeme-schreiben-4487.html
Warum wird das dann so geheim gehalten?
Das Forum hat nichts brauchbares zu PDF und Barcode ausgespuckt.
Wie wäre denn die oxid interne Lösung zum Anzeigen eines Barcodes auf der Rechnung/Lieferschein?
es wird nicht geheimgehalten und die PDF Bibliothek wurde von einem Drittanbieter entwickelt und ist auch frei runterladbar und hat auch nichts mit dem OXID Forum zu tun.
Und auf der Seite des Anbieters/Entwicklers der PDF Bibliothek steht es schwarz auf weiß
Main Features:
1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extention, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix ECC200, QR-Code, PDF417;
http://www.tcpdf.org/
Danke, tcpdf.org habe ich mir angesehen, war für mich aber etwas zu komplex.
Zurück zu den Modulen…
Ich habe die originale invoicepdf abgeschaltet und meine aktiviert aber soooo einfach scheints doch nicht zu sein. Der PDF-Button bleibt ganz weg.
Übrigens, die Antwort zur updatesicheren invoicepdf bist Du schon mal schuldig geblieben:-)
Vielleicht klappt es ja diesmal… Danke, Jürgen
warum hast Du invoicepdf abgeschaltet? Du kannst invoicepdf erweitern anstatt es zu kopieren und anzupassen.
Und völlige Updatesicherheit kann niemand garantieren. Es könnte immer passieren, dass die Funktion, die Du überschreibst, oder die Funktionen, die Dein Modul aufruft, irgendwann mal nicht mehr gibt. Der entscheidende Vorteil besteht darin, dass der angepasste/zusätzliche Code ausgelagert werden kann und beim Update auf keinen Fall überschrieben wird, somit behältst Du die Übersicht und kannst das Modul im Notfall immer schnell anpassen.
Ich spreche ja nicht von “völliger” Updatesicherheit. Aber die invoicepdf wird wohl von 90% der Oxids verändert und es gibt keine Anleitung wie das am besten gemacht wird.
Drum habe ich das Modul ausgelagert aber ich kann es eben nicht korrekt aktivieren.
Ich brauche einen Barcode in meinem Adressfenster.
Ist es korrekt nur die geänderte
[B] public function exportStandart( $oPdf )[/B]
in ein eigenes Modul zu schreiben?
in dem Fall überschreibst Du eine bestehende Klasse und daher reicht es nur die geänderte Funktion in das Modul aufzunehmen.
Sorry - es klappt nicht.
Sobald ich ein Modul reinhänge bleibt die Bestell-Liste leer.
Zum testen habe ich mal den footer leergelassen
class jzl_myorder extends myorder
{
public function pdfFooter( $oPdf )
{
}
}
Was mache ich da falsch?
Du hast die Anleitungen, die ich Dir gepostet habe, ignoriert
Nach Deinen Anleitungen kann ich neue Module erstellen und einbinden - das klappt auch.
Aber ich möchte meine Barcodefunktion nicht aus einer geänderten invoicepdf aufrufen sondern eine invoicepdf Funktion überschreiben und da gibts nix in Tutorials oder so.
Vielleicht ist invoicepdf da ja was besonderes - oder ich zu blöd.
Die Schreibschutzlösung bleibt mir ja immer noch:-)
Es wäre also ganz toll wenn Du mir zeigen könntest, wie Du in einem eigenen Modul einfach die Fußzeile ausblendest. Danke im voraus für die 6 Zeilen Code…
die Anleitung ist generell als Beispiel zu betrachten und ist auch auf andere Klasse anwendbar.
In der metadata.php von invoicepdf (oder auch im Shop Backend) siehst du, dass myorder die Klasse oxOrder überschreibt. D.h. in deinem Modul musst du wiederum auch die Klasse oxOrder überschreiben. Und im Shop Backend kannst du die Reihenfolge der Module festlegen, wie sie geladen werden. Da musst du dein Modul unter invoicepdf ziehen, damit deine überarbeitete Funktion nach myorder geladen wird und somit als endgültige Variante fungiert
Wunderbar die Reihenfolge wars! Alles läuft jetzt…
Schön wenn ein Juniormember von einem Senior eine Lösung bekommt.
Danke und einen Guten Rutsch!
hab viel gespammt, daher senior member
wünsche Dir auch einen guten Rutsch