Lesscss: less.js Fehlermeldungen in Pimcore aktivieren

Wer lesscss in Pimcore einsetzt wird sich sicherlich schon mit CSS-Fehlern konfrontiert worden sein, die im edit-Mode von Pimcore kommentarlos ignoriert und die Seite ohne CSS ausgeliefert wird.

Pimcore verwendet für den edit-Mode nicht den php-basierenden lesscss-Compiler lesscss.inc.php, sondern eine JavaScript-basierende Variante von lesscss.org.

less.js produziert per Default keine Fehlermeldungen, diese müssen Aktivieren des Developer-Modes erst eingeschaltet werden.

Hierzu setzt man die Variable env des less-Objects auf “development”. Dies muss geschehen, bevor less.js geladen wird, da sofort mit dem Parsen begonnen wird:



In Pimcore erreicht man dies (Version 1.4.4, Build 1780) durch eine kleine Erweiterung in pimcore/lib/Pimcore/Controller/Plugin/Less.php:

$head->innertext = $head->innertext . "\n" . ''."\n".''."\n";

Nachtrag: dies ist seit Version 1.4.5 nun nicht mehr notwendig.

Pimcore Klassendefinition nach XML exportieren an der Commandline

Pimcore bietet einige komfortable Möglichkeiten, seine Daten wie Dokumente, Assets, Objekte und ihre Klassen zu exportieren.
Was aber, wenn die Datenbank Schrott und das Backend unbrauchbar ist und man trotzdem einen aktuellen XML-Export der Klassen braucht, um diese in ein funktionierendes Pimcore importieren zu können?

Hierzu kann folgendes Script dienlich sein, das im CLI-Verzeichnis vom Pimcore untergebracht, die PSF-Dateien in ein importierbares XML-File umwandelt. Dabei werden nur die in Pimcore ohnehin schon vorhandenen Methoden gebraucht, ein Zugriff auf die Datenbank ist nicht notwendig.

Usage: psf2xml.php [ options ]
--input|-i file to read
--outputfolder|-o folder to write (optional)
--outputfile|-f filename to write (optional)
--help|-h display this help

Beim Export der Fieldsammlungen und Objektbausteinen kann das Script den Namen selbst bestimmen, nur bei Objekten sollte mit “-f” noch ein Name angegeben werden.

Der Download kann, wie üblich vom Weblizards Scriptbereich erfolgen.

Feedback ist, wie üblich, erwünscht :-)

Zend Forms mit dem eingebauten Übersetzer in Pimcore verwenden

Die mit dem Zend Forms gebauten Formulare lassen sich bekanntlich mit Validatoren ausstatten, die bei einer Regelverletzung eine entsprechende Fehlermeldung ausgeben.
Diese lässt sich, mit einigem Aufwand, internationalisieren.

Pimcore liefert einen komfortablen Übersetzungs-Manager mit, den man für seine eigenen Zwecke verwenden kann – dieser lässt sich auch mit Zend Forms verbinden!

Dies geschieht mit ein paar einfachen Schritten, hier exemplarisch in Verbindung mit einem durch Alexandre Delattres Form Builder Plugin erzeugten Form:

$formbuilder = new Formbuilder_Frontend();
$form = $formbuilder->getForm("kontakt");
		
$locale = Zend_Registry::get("Zend_Locale");
$translate = new Pimcore_Translate($locale);
$form->setTranslator($translate);
$form->setDefaultTranslator($translate);

Mit diesem Code-Konstrukt landen nun alle Strings, die das Form ausgibt, im Übersetzer und können bearbeitet werden. Praktischerweise wird die noch nicht Variablen-bereinigte Version in die Liste eingestellt, so dass eine kontextbezogene Anpassung der Übersetzungen möglich ist.

Gegebenenfalls muss in der Zend-Registry noch die benötigte Locale hinterlegt werden.

Dies kann zum Beispiel in website/lib/Website/Controller/Action.php erfolgen:

try {
  $locale = Zend_Registry::get("Zend_Locale");
} catch (Exception $e) {
  $locale = new Zend_Locale("de");
  Zend_Registry::set("Zend_Locale", $locale);
}

Dies nur beispielhaft für Deutsch, bei einer Verwendung mit mehreren Sprachen muss hier natürlich flexibler Code verwendet werden.

Produktionsbetrieb “gefährdet”! ;-)

Nach dem letzen Entkalkungsvorgang hat unser wichtigstes Produktionsmittel den Betrieb eingestellt: der Kaffevollautomat!

Der Kaffee kam nur noch tröpfchenweise, die einhellige Reaktion auf diesen Zustand war bei allen im Büro hier gleich: das beliebte deutsche Schimpfwort das mit “Sch” beginnt.

Allgemeiner Konsens:
Rechner kaputt? “Kein Problem, nehm ich halt den Laptop.”
Kaffeemaschine kaputt? “Das geht gar nicht, so kann ich nicht arbeiten!”

Die Dampfdüse brachte noch einwandfrei Heisswasser, also musste der Fehler irgendwo im Bereich Brüheinheit liegen. Also hab ich die Maschine am Wochenende mit heimgenommen und mal komplett zerlegt und begutachtet.
Anhand der Schlauchkonfiguration im Inneren ließ sich schon erkennen dass beim Entkalken, da das Wasser ja bei diesem Modell, einer Delonghi Magnifica ESAM 3000 B, immer über die Dampfdüse ausgestossen wird, die Brüheinheit nicht beteilligt ist. Dementsprechend sahen die Teile im Inneren des Druckzylinders auch aus:

Matschiger Kalk, wohin man blickt.

Also sowohl Druckzylinder als auch die Brüheinheit komplett zerlegt, freigekratzt, nochmal in heißer Zitronensäure eingeweicht (natürlich ohne O-Ringe) und dann wieder unter Einwirkung von Silikonfett zusammengesetzt.

Resultat: Operation gelungen, Patient lebt, Kaffee schmeckt wieder.

So kann es am Montag wieder weitergehen mit der Arbeit ;-)

Merkwürdiges Blinkerproblem mit Zend_Autoloader – Ursache Cache

Heute hatten wir ein merkwürdiges “Blinker”-Problem mit Pimcore auf einem Kundenserver.
Mal ging die Seite, mal nicht, je mehr Requests desto öfters fiel die Seite mit einem Error 500 aus, merkwürdigerweise verschwand der Fehler nach einer gewissen Wartezeit:

PHP Fatal error:  Class 'Pimcore_Tool' not found in /blah/fasel/htdocs/pimcore/lib/Pimcore.php on line 515
PHP Fatal error:  Class 'Pimcore_Model_Cache' not found in /blah/fasel/htdocs/pimcore/lib/Pimcore.php on line 661

und dergleichen Fehlermeldungen mehr.

Sowas riecht in aller Regel ja nach Caching-Problemen, tatsächlich tauchen bei Recherche im Internet einige mögliche Ursachen auf, in aller Regel in Zusammenhang mit PHP Version rund um 5.3.2

Folgende Einstellungen haben die Symptome behoben – das eigentliche Problem dürfte tiefer liegen.

zend.enable_gc = Off
realpath_cache_size = 0