chgallery einrichten

21. Oktober 2010

Die chgallery ist, anders als die meisten Galerie Extensions, ziemlich cool. Ich vermute stark, dass ich die noch öfter brauchen werde, daher ein paar kleine Details zum Aufsetzen der Galerie:

1. Sprachen
Grundsätzlich gibts alle deutschen Übersetzungen bereits in der locallang.xml. Damit aber auch deutsch angezeigt wird, muss man im Typoscript die Standardsprache definieren:

  1. config.language = de
  2. config.locale_all = de_DE

Dann klappts auch mit der Sprache.

2. Bilder verlinken

Vielleicht hab ich auch einfach was falsch gemacht, aber bei mir waren die Bilder nicht von Anfang an verlinkt. Erst als ich im TS angegeben habe, dass sie verlinkt sein sollen, konnte man auch klicken um sie in Originalgröße anzusehen:

  1. plugin.tx_chgallery_pi1 {
  2. gallery.image {
  3. imageLinkWrap = 1
  4. imageLink Wrap {
  5. enable = 1
  6. typolink {
  7. title.field= tx_chgalleryFilename #tx_chgalleryTitle
  8. parameter.override.cObject = IMG_RESOURCE
  9. parameter.override.cObject.file.import.data = TSFE:lastImageInfo|origFile
  10. parameter.override.cObject.file.maxW = 800
  11. parameter.override.cObject.file.maxH = 600
  12. # used lightbox is pmkslimbox
  13. ATagParams = rel="lightbox"
  14. ATagParams.override = class = "lightbox"
  15. ATagParams.insertData = 1
  16. }
  17. }
  18. }

Man beachte insbesondere Zeile 13, wo ich den Links direkt ein rel=lightbox zuweise, das werde ich später nämlich noch brauchen.

3. Lightbox

Ich bin sicher, das kann man mit Extensions auch einfacher haben, aber ich hab selber dafür gesorgt, dass die Lightbox funktioniert. Zuerst hab ich jquery und jquery lightbox eingebunden:

  1. page.includeCSS.20 = fileadmin/templates/jquery.lightbox-0.5.css
  2. page.includeJS.35 = fileadmin/templates/js/jquery-1.4.2.min.js
  3. page.includeJS.40 = fileadmin/templates/js/jquery.lightbox-0.5.js

Dann sorge ich dafür, dass alle meine rel=lightbox Links auch mit der Lightbox aufgerufen werden:

  1. page{
  2. headerData.200 = TEXT
  3. headerData.200.value (
  4. <script type="text/javascript">$(function() { $('a.lightbox').lightBox(); });</script>
  5. )
  6. }

Und das Ergebnis ist eine Galerie auf deutsch, die die Bilder in Originalgröße in der Lightbox öffnet. Whee.

Dateiverweise formatieren

21. Oktober 2010

Theoretisch ist es einfach, mit Typo3 eine Liste von Dateiverweisen (“Downloads”) zu erstellen. Praktisch reicht das, was Typo3 erzeugt, natürlich nicht aus. “Die Beschreibung muss ÜBER den Filelink.” “Das Logo muss runter, und nicht da so in der Mitte hängen”… mein Problem ist also regelmäßig, dass ich die Dateiverweise selbst formatieren muss, und da reicht eine Formatierung mit css halt nicht aus. Und dafür ist mir jetzt eine großartige Extension in die Hände gefallen: css styled filelinks. Damit kann man sich die Formatierung selbst zusammenstellen und das geht folgendermaßen:

  1. userFunc=tx_cssfilelinks->renderFileLinks
  2. tt_content.uploads.20.layout >
  3. tt_content.uploads.20.layout{
  4. global=<div class="datei">###FILE###</div>
  5. file=<div class="datei_beschreibung">###DESCRIPTION###</div> <div class="datei_link"><img src="/typo3/gfx/fileicons/###FILEEXT###.gif"/> <a href=”###URL###”>###TITLE###</a></div>
  6. }

global umschließt einen gesamten Eintrag, file eine einzelne Datei. So kann ich Reihenfolgen ändern und meine eigenen CSS Klassen hinzufügen, um alles einfacher formatieren zu können. Großartige Extension und sie hat, ausnahmsweise, gleich auf Anhieb funktioniert.

Gifbuilder und Umlaute – Teil II

15. Oktober 2010

Wie ich in Teil I schon erwähnt habe, löste die userfunc mein Problem mit den Umlauten nicht. Und inzwischen weiß ich auch, warum das so ist. Es GAB kein Umlautproblem. Bei einem Test stellte ich fest, das ä, ö und ü einwandfrei dargestellt wurden, nur bei den Großbuchstaben gabs Probleme. Und woran lag es? Am OFFSET. Die Punkte verschwanden einfach, weil das Offset zu niedrig eingestellt war. D’oh!

  1. XY = [10.w]+23,[10.h]+15

und

  1. offset = 0,15

haben das Problem dann letzten Endes gelöst. Und ja, ich kam mir etwas verarscht vor, als mir klarwurde, was das Problem war. Aber was mich tröstet ist, dass der TS Code nicht von mir war. Ich war nur die arme Seele, die den Fehler finden sollte.

Gifbuilder und Umlaute – Teil I

15. Oktober 2010

Ich habe ein aktuelles Projekt, bei dem Überschriften mit dem Gifbuilder erzeugt werden. Und die Umlaute funktionierten einfach nicht, obwohl die Schriftart die Umlaute definitiv kann. Meine Recherche ergab, dass die meisten mit so einem Problem es in PHP5 und einem Typo3 Bug sehen. Der “hilfreiche” Hinweis zur Lösung dieses Problems sah so aus, eine postUserFunc zu nutzen, um die Umlaute in ihre ASCII Form umzuwandeln. Leider erklärt einem keiner, wie genau man das macht.

Jetzt mal ganz ehrlich. Die Typo3 Hilfe / Doku beschreibt postUserFunc so. Ich bin ein Typo3 Noob. Mir stellen sich beim Durchlesen dieser “Hilfe” direkt ein paar Fragen. Was genau ist “irgendwas”? Kann man das durch einen beliebigen String ersetzen? Wie muss die PHP Datei aussehen, wie greift die Funktion dann auf den Textwert zu? Offenbar soll man sich diese Infos aus der Nase ziehen.

Deswegen hier mal eine detaillierte Anleitung, wie man postUserFunc nutzt, um die Umlaute umzuwandeln.

1. die PHP Datei erstellen. Meine heißt umlautfunction.php und sieht so aus:

  1. class user_umlautfunction {
  2. var $cObj;// The backReference to the mother cObj object set at call time
  3. function main($content,$conf){
  4. $content.='bbbb';
  5. return $content;
  6. }
  7. function encode($content,$conf) {
  8. $array['search'] =array('Ä','ä','Ö','ö','Ü','ü');
  9. $array['replace']=array('Ä','ä','Ö','ö','Ü','ü');
  10. return str_replace($array['search'],$array['replace'],$content);
  11. }
  12. }

Die main Funktion braucht man wohl nicht, aber ich war mir nicht sicher, ob man die komplett rauslassen kann, also ließ ich sie mal drin.

2. die Datei im Typoscript einbinden

  1. includeLibs.umlautfunction = fileadmin/templates/umlautfunction.php

3. die Funktion aufrufen

  1. temp.header_grafik = COA
  2. temp.header_grafik {
  3. 10 = IMG_RESOURCE
  4. 10.file = GIFBUILDER
  5. 10.file {
  6. XY = [10.w]+23,[10.h]+15
  7. format = gif
  8. backColor = #FFFFFF
  9. transparentBackground = 1
  10. transparentColor = #ffffff
  11. 10 = TEXT
  12. 10 {
  13. text.postUserFunc = user_umlautfunction->encode
  14. fontSize = 10
  15. fontFile = fileadmin/fonts/FUTURAB.TTF
  16. ...

Noch ein Hinweis: offenbar ist es wichtig, dass die Klasse mit user_ beginnt, ich hatte keine Lust, auszuprobieren, ob es auch so gehn würde. Wie immer war ich bei typo3 einfach nur froh, dass ich das Script überhaupt zum Laufen gebracht habe.

Übrigens: mir hat dieses Script nicht beim Lösen meiner Probleme geholfen. Wer Testen will, ob es überhaupt funktioniert und das Umlautproblem vielleicht eine andere Ursache hat, der modifiziere das replace array, um zu sehen, ob überhaupt Werte ersetzt werden oder nicht. Einfaches Beispiel:

  1. $array['search'] =array('a');
  2. $array['replace']=array('xxx');

So sieht man recht schnell, ob die Funktion überhaupt tut, was sie soll. Wenn alle a durch xx ersetzt werden, haperts nicht an der Funktion sondern irgendwas anderes läuft schief.

innerHTML und IE8

13. Oktober 2010

Großer Gott. Ich hab dereinst mal ein Plugin für tinyMCE geschrieben, so ne kleine Bildverwaltung, wo man Bilder uploaden, beschneiden, verkleinern etc. kann. Und jetzt stell ich fest, dass das ganze im IE8 nicht mehr funktioniert. Warum? Weil IE8 ein Problem mit innerhtml hat…

Beschrieben wird das ganze hier.

Meine Lösung, und es ist keine gute Lösung, aber ich hatte wenig Zeit: behelfsmäßig jquery einbauen und anstatt innerHTML zu nutzen das entsprechende div über jquery einbauen. Das ganze ist jetzt eine grauenvolle Mischung aus javascript und jquery Syntax aber irgendwie klappts.

Vorher:

  1. par = document.createElement("p");
  2. par.innerHTML = "<div style= 'clear:both;' >" + akt_src + "</div>";
  3. par.innerHTML+= "<a href=''>test</a>...";
  4. td = document.createElement("td");
  5. td.appendChild(par);

Nachher:

  1. par = "<div style='clear:both;'>"+akt_src+"</div>";
  2. par += "<a href=''>test</a>...";
  3. td = document.createElement("td");
  4. $(par).appendTo(td);

Unglaublich aber wahr, so klappts. Für den Moment muss es reichen. Bis ich mal die Zeit kriege, das komplett in jquery zu übertragen.

MSSQL – LIMIT

12. Oktober 2010

MsSql kennt offenbar “LIMIT” nicht. Daher, nach kurzer Recherche, die Erkenntnis:

mySQL:

  1. SELECT name FROM tabelle LIMIT 0, 3

msSQL:

  1. SELECT TOP 3 name FROM tabelle

Aha, aha.

Frames… sie wollen einfach nicht sterben…

06. Oktober 2010

Es gibt ein uraltes Projekt, an dem ich hin und wieder noch was ändern muss. Dieses Projekt wurde mit Frames und Tabellen aufgebaut, damals noch state-of-the-art, heute ein grausames Ärgernis. Das Problem: Ich musste vom Content Frame (mainFrame) aus per Javascript eine Funktion in der Navigation Links ansprechen. Aber im linken Frame (leftFrame) gab es nochmal ein frameset mit 2 weiteren Frames, das ganze kann man sich in etwa so vorstellen:

Ich musste also aus einem Frame heraus ein Frame in einem anderen Frame ansprechen und dort eine Funktion aufrufen.

In leftBottom.php habe ich die Funktion doOverlay definiert:

  1. function doOverlay(){
  2. //blablabla...
  3. }

und in mainFrame.php rufe ich dies folgendermaßen auf:

  1. parent.leftFrame.leftBottom.doOverlay();