Fusioninvoice

Auf Besis des Codeigniter gab es zwei beliebte Rechnungsprogramme, BambooInvoice und Fusioninvoice. Beide sind mitlerweilen eingestellt, bzw. nach einer Überarbeitung nur noch kommerziell erhältlich. Aber… Sie waren mal frei uns sind noch immer zu finden, wobei ich pro Fusion bin, das sieht schicker aus und kann scheinbar auch mehr. Für mich wichtig: Wiederholende Rechnungen, z.B. für Abos.

„Fusioninvoice“ weiterlesen

Codeigniter und MYSQLs DATE_FORMAT()

Man, jetzt hab ichs.

$this->db->select("DATE_FORMAT(beginn, '%d.%m.%Y') AS fbeginn")

wird durch den aktiven Schutz zu einem

DATE_FORMAT(beginn, `'$d`.`$m`.`$Y'`)`

und damit zu einem falschen Statement.

Den Schutz kann man deaktivieren. Die Select-Methode hat dazu einen zweiten Parameter:

$this->db->select("DATE_FORMAT(beginn, '%d.%m.%Y') AS fbeginn", FALSE)

Thats it 🙂

Aptana Studio 3 vs. PhpStorm

Nachdem bei uns in der Firma viel mit PhpStorm gearbeitet wird, habe ich mir auch einmal das Programm angesehen. Der Testzeitraum ist noch nicht zu Ende, aber ich kann ein erstes Fazit bilden.Ich werde die 99 Euro nicht ausgeben. Dazu bietet es einfach keinerlei Vorteile, die den Preis rechtfertigen würden. Noch schlimmer, es hat keine Vorteile im Vergleich zu Aptana, welches als angepasste Eclipse-IDE einfach extrem anpassungsfähig ist.

Was ich gerne nutze ist der Split-View. In Aptana kann ich den bequem einrichten, indem ich den Tab dort hin ziehe, wo ich das View gerne geöffnet hätte. Aptana regelt das von alleine und ist dabei sehr dynamisch. PhpStorm hingegen benötigt mindestens zwei Klicks bis ich den Split-View geöffnet habe und die nun doppelte Datei schließen kann. Es bietet zudem nur zwei Splits, einen Split im Split kann es nicht.

Bereits installiert ist ein MySQL-Editor. Den fand ich klasse und alleine deswegen hätte ich am Ende das Geld ausgegeben. Es ist einfach bequem aus dem Edior heraus in die DB zu schauen, wenn gerade der Name der Spalte einem nicht einfallen will. Aber… Eclipse bietet mehrere Plugins. Quantum ist bei mir gerade im Test.

Und dann habe ich so meine Probleme mit dem FTP-Upload mit copy&paste. Beispielsweise lade ich mir ein Theme für Bootstrap herunter. Ich entpacke es lokal und kopiere es per Strg-C und Strg-V in den Ordner meines Projekts. Es wird hochgeladen und fertig. PhpStorm macht das auch, wird aber zwischen der 5ten und 10ten Datei so träge, dass es schon mal eine Stunde dauert, bis die 30 Dateien hochgeladen sind.

Dafür gibt es bei Aptana keinen Option, mit der man Dateien sicher entfernt. Das war praktisch, wenngleich nicht immer korrekt bis das es gar nicht anschlägt, wenn die Datei über umwege aufgerufen wird, wie CI das in der Regel macht. Und das automatische erstellen der PHPDoc ist nicht integriert, da werde ich mal suchen.Für die, die mit Aptana/Eclipse PHP entwickeln wollen, werde ich mal die praktischen Erweiterungen auflisten…

Abhängige Selects mit JS

Mal wieder muss ich gaaanz tief in die JS-Trickkiste greifen 🙂 Ich benötigt abhängige Select-Boxen. Das heißt, die Auswahl der ersten Box beeinflusst die Möglichkeiten in der zweiten. Was kommt einen da am ehesten in den Sinn: JS.

Ohne jQuery

http://www.malleus.de/FAQ/createDependentSelectOptions3.html

Einfach und übersichtlich. Zumindest bei den kleinen Datenmengen. Leider passt das nicht zu meinem CMS-Konzept. Der Controller übergibt die Daten an ein HTML-Element, sie werden bei diesem Beispiel aber schon im Header benötigt.

Mit jQuery

http://www.appelsiini.net/projects/chained

Weil ich sowieso jQuery ständig mit mir herum schleppe, habe ich auch hier mal gesucht und eigentlich nur umstädndliche Lösungen erwartet. Das hier aber ist mindestens so sauber wie das oben. Und es passt zu meinem Code 🙂

Das ganze basiert auf Klassen und kann bei Bedarf auch per AJAX seine abhängigen Daten laden und das abhängige Select erstellen. Passt.

Komma als Dezimaltrenner in Codeigniter

Wenn man eine Formulareingabe per „decimal“ auf seinen Inhalt prüft, landet man bei einer Eingabe wie „5,99“ bei einem Fehler, dass das Feld dezimal sein muss.

Auch wenn man als Sprache bereits german nutzt, wird dieses Problem nicht behoben. Es hilft nur eines, die Validierung muss ungebaut werden:

http://stackoverflow.com/questions/8953923/with-codeigniter-how-can-i-accept-euro-currency-in-form-validation

dompdf und Papierausrichtung

So, nach ein wenig dompdf kann ich sagen: easy. Man kann aber die Ausrichtung oder Größen der Seiten innerhalb des Dokuments nicht ändern. Ein mal festgelegt bleibt es beispielsweise bei A4 und Portrait. Allerdings gibt es zwei Entwickler, die das ganze gefixt haben.

https://groups.google.com/forum/#!msg/dompdf/NvTKQkBPxVc/aEK_2NSk3LUJ

1. ykdompdf

Einen ersten Fix gibt es mit ykdompdf.

http://www.mediafire.com/download/g9lkzx3gl170nyb/ykdompdf.php

Wie es anzuwenden ist, ist im Dokument selbst erklärt. ykdompdf.php ist im Grunde überfüssig (siehe Schritt 2) aber die Codeänderungen an dompdf sind zu erledigen. Eigentlich ganz easy, nur ein Update von dompdf würde alles wieder zerstören.

2. dompdf_pages

Bei mir hat Schritt 1 nicht gereicht, es lief nicht rund. Außerdem sind im selben Beitrag oben ein paar Fehler genannt, die in einem weiteren Patch erledigt werden. Achtung: die im Forum angebotene Datei reicht nicht, deshalb hier entlang:

https://github.com/craigfrancis/dompdf/tree/page-merge/pages

dompdf_pages ersetzt ykdompdf.

Allerdings ist da noch eine class.pdf.php.diff. Ohne diese Änderungen werden geänderte Seiten nicht ausgegeben. Das war vermutlich auch mein Problem, so aber habe ich nun den Fix vom Patch und überhaupt alles zusammen 🙂

Man kann das ganze auch fertig bekommen, allerdings mit der dompdf-Version 0.6.0 statt 0.9.irgendwas+

https://github.com/craigfrancis/dompdf/tree/page-merge

Weiteres

Codeigniter

Das kleine How-To in den kommentaren verwendet load_html_file(). Das klappt nur, wenn auch wirklich eine HTML-Datei übergeben wird. Ich verwende dompdf mit Codeigniter und dort klappts nur mit einem load_html()

        $html1 = $this->load->view('/abrechnung/pdf/anschreiben', $data, TRUE);
        $ykdom->set_paper('a4','portrait');
        $ykdom->load_html($html1);
        $ykdom->render();

CSS-Formatierung

Wenn plötzlich eine leere Seite erscheint, dann ist da ein Seitenumbruch im CSS zu viel. Für hübsche Layouts gibts zumindest ein paar wenige Layoutoptionen im CSS.

http://www.css4you.de/printproperty.html

PDFs mit dompdf und Codeigniter

Ich war etwas auf der Suche ehe ich mich für dompdf entschieden habe. Warum? Es scheint am häufigsten benutzt zu werden und sollte somit noch ne Weile aktuell bleiben. Ich werde es ja sehen.

Außerdem ist es sehr sehr einfach. Man kann mit dompdf schlicht ein html-Dokument übergeben und dompdf macht daraus ein PDF, welches abgelegt wird oder direkt heruntergeladen werden kann.

Nun verwende ich für mein aktuelles Projekt Codeigniter. Ich war auf der Suche, wie man das nun bequem integrieren kann und habe nach etwas probieren mich für einen sehr simplen weg entschieden. Man könnte dompdf sicher in eine Library packen oder vielleicht als Driver bezeichnen und entsprechend verwenden, es gibt aber auch den Folder third_party und der hats mit angetan 🙂

Download dompdf

Das ganze gibt es hier (https://github.com/dompdf/dompdf) und kommt in den /application/third_party/ Ordner von Codeigniter. Ich habe das Verzeichnis noch von dompdf-master/ auf dompdf/ umbenannt.

Download font-lib-php

Mir warf dompdf beim ersten Versuch einen Fehler:

Warning: require_once(/var/www/dompdf-master/lib/php-font-lib/classes/font.cls.php): failed to open stream: No such file or directory in /var/www/dompdf-master/dompdf_config.inc.php on line 335
Fatal error: require_once(): Failed opening required ‚/var/www/dompdf-master/lib/php-font-lib/classes/font.cls.php‘ (include_path=‘.:/usr/share/php:/usr/share/pear‘) in /var/www/dompdf-master/dompdf_config.inc.php on line 335

Auslöser ist das fehlende font-lib-php. Also herunterladen (https://github.com/PhenX/php-font-lib). Im Ordner /application/third/party/dompdf/lib/php-font-lib den Ordner classes/ erstellen und den Inhalt von src/FontLib reinkopieren.

Includen

Wie gesagt, ich habe es mir einfach gemacht. Ich include einfach dompdf in der Methode, in der ich es brauche.

class Abrechnung extends CI_Controller {

    public function pdf()
    {
        
        require_once APPPATH.'third_party/dompdf/dompdf_config.inc.php';
        
        $data = '';
        
        $dompdf = new DOMPDF();
        $html = $this->load->view('abrechnung/pdf', $data, TRUE);
        $dompdf->set_paper('a4','portrait');
        $dompdf->load_html($html);
        $dompdf->render();
        $dompdf->stream("name.pdf");

    }
    
}

Das war es im Grunde schon. In diesem Code fülle ich das PDF noch mit einer HTML-Datei. Die Formatierung sieht noch etwas verunglückt aus, aber der Code wird ausgeführt und mein HTML angezeigt. Hübschmachen kommt jetzt 🙂

Beim herumexperimentieren hatte ich den Fehler

Fatal error: Uncaught exception ‘DOMPDF_Exception’ with message ‘An input file is required (i.e. input_file _GET variable).

Das passiert, wenn man anstelle der config-datei dompdf.php includiert. Also besser nicht machen 😉

 

Quellen

https://kyokasuigetsu25.wordpress.com/2011/02/09/how-to-use-dompdf/
http://stackoverflow.com/questions/17999091/how-do-i-get-dompdf-to-display-my-codeigniter-view-correctly
http://stackoverflow.com/questions/15028250/dompdf-fails-to-load

ownCloud 8 auf QNAP HS-210

Hier und da liest man, das dies und jenes nicht ginge wenn man ownCloud 6 oder 7 auf dieser oder jener Qnap-Hardware zum laufen bringen möchte. Ein bisschen Zweifel hatte ich deshalb ja schon, hab es dann heute aber trotzdem mal angegangen. Und? Alles ohne Probleme! ownCloud 8 läuft jetzt auf meinem HS-210 und das ganz ohne Stress und recht flott.

Mein How-To:

  • Im Appcenter die Beta PHP Installation installieren
  • Im Appcenter phpMyAdmin installieren (nicht zwingend)
  • ownCloud herunterladen (komplett, nicht den Installer) – (https://download.owncloud.org/download/community/owncloud-latest.zip) und entpacken
  • Per FTP als admin auf die HS-210
  • Allen Kram hochladen (.htaccess nicht vergessen)
  • In der Zwischenzeit einen MySQL-User und -DB erstellen
  • Die Installation von ownCloud mit Admin- und DB-Daten anlegen vervollständigen
  • In der .htaccess noch ein „php_value default_charset UTF-8“ hinzufügen

Fertig. Sieht nach viel aus, ist aber in 20 Minuten erledigt. Es muss keine Systemdatei angefasst werden oder etwas in der Art. Viel Spaß 🙂