27.6.08

Lupe zum Vergrößern von Bildern anzeigen (click enlarge)

Servus!
Also, es gibt mal wieder einen neuen Typoscript Hack von mir.
Diesmal war das Problem folgendes: Kunde wollte ein Bild auf seiner Webseite, dass beim Klick darauf vergrößert wird. Standardmäßig ja erstmal kein Problem.
Jetzt soll aber unter dem Bild eine kleine Lupe angezeigt werden, die beim Klick darauf das gleiche tut - sprich das eigentliche Bild vergrößern. Neben der Lupe soll dann die Bildcaption stehen.

Lösung:
tt_content.image.30 < tt_content.image.20
tt_content.image.30 {
1.stdWrap {
HTMLparser = 1
HTMLparser.tags.a = 1
HTMLparser.tags.img.fixAttrib.src.set = fileadmin/template/icons/zoom_in.jpg
HTMLparser.tags.img.fixAttrib.width.set = 40
HTMLparser.tags.img.fixAttrib.height.set = 40

if {
value.field = image_zoom
equals = 1
}
}
}
tt_content.image.20 {
caption.1.stdWrap.if {
value.field = image_zoom
equals = 1
negate = 1
}
}


Anpassen müsst ihr eigentlich nur die Zeilen 6, 7 und 8. Der Pfad zu eurer "Lupe" muss logischerweise stimmen und die Breite bzw. Höhe auch, da sonst die Lupe auf die Größe des Originalbildes aufgebläht wird.
Das war's dann auch schon. So wird die Lupe nur angezeigt wenn die Checkbox "Click enlarge" angeklickt ist - die Caption wird auch nur in diesem Fall in die Lupenbox geschoben.

12.3.08

Rootlevel durchlaufen bis ein Wert gefunden wurde

Sooo, ist jetzt schon relativ lange her, dass ich mal wieder was geschrieben habe.
Heute geht's darum, dass auf einer Seite der Alias der aktuellen Seite ausgegeben werden soll. Ist dieser nicht gesetzt, soll der Alias der nächst höheren Seite ausgegeben werden. Ist der auch nicht gesetzt, der der nächst Höheren, usw. usf.

Das ist relativ einfach.
Mit folgendem Typoscript könnt Ihr genau das erreichen:

temp.showAlias = TEXT
temp.showAlias.data = levelfield : -1 , alias , slide


Die "data" Eigenschaft von stdWrap ist vom Typ "getText". Hier findet Ihr eine nähere Beschreibung dazu.

2.5.07

RTE(HTMLArea): Absatz- und Textauswahl definieren

So, nach langer Zeit mal wieder ein neuer Eintrag...
Ich habe mich mal wieder mit einem Typo3 Problem beschäftigt und auch eine Lösung gefunden ;-).
Problem: Kunde möchte im RTE Text markieren und den dann rot machen. Das geht natürlich auch über den Color-Picker, aber ihr kennt das ja bestimmt: Sobald man dem gemeinen Editor mehr Optionen als nötig gibt, müssen alle natürlich auch irgendwie irgendwo in die Webseite verwurstet werden. Als Entwickler bekommt man darüber relativ schnell graue Haare, da es wahrscheinlich auch sechs Monate vorher noch gehießen hat "Die Seite muss genau unserem Styleguide entsprechen!!" und man sich dafür den A*sch aufgerissen hat... naja, zur Lösung...
In eurer Page TSConfig muss folgendes rein:

RTE.config.tt_content.bodytext {
proc.allowedClasses = redtext
}
RTE.default {
# Nur um sicher zu gehen dass auch alle
# Felder da sind...
showButtons = *
}
RTE {
classes {
redtext {
name = Rot
value = color: #AA0000;
}
important {
name = Wichtig
value = color: #00FF00;
}
}
default {
classesCharacter = redtext
classesParagraph = important
contentCSS = fileadmin/_system/rte.css
}
}

So, jetzt erstellt ihr eine CSS Datei mit dem abstrakten Namen rte.css.
In der steht Folgendes:

span.redtext {
color: #AA0000;
}

p.important {
color: #00FF00;
}

Ladet die Datei in das Verzeichnis fileadmin/_system (oder wohin auch immer - ihr müsst dann nur oben den Pfad anpassen).
Leert zur Sicherheit mal alle Caches und schon solltet Ihr beim Markieren eines Textteils in eurer Text Dropdownliste die Option <Rot> haben. Klickt Ihr in einen Absatz, solltet ihr <Wichtig> sehen.

Das war eigentlich alles in allem nichts schweres, aber kann trotzdem Zeit fressen.

Labels: , , , ,

16.1.07

Individuelle Character Sets im Backend

So, nachdem ich gut fünf Stunden damit verbracht habe herauszufinden warum die Website eines Kunden so dermaßen zerschossen dargestellt wurde (nur in der japanischen Sprachvariante), bekommt Ihr die Lösung quasi auf dem Silbertablett serviert.
Zunächst mal meine Problembeschreibung:
Unser Kunde lieferte japanische Texte (Website existierte bereits auf Deutsch [Standard], Englisch und Chinesisch [simplified]). Nach dem unser Praktikant einen Großteil der japanischen Texte eingepflegt hatte ist dann aufgefallen, dass bei einigen Zeichen der HTML Code zerstört wird.
Nach ewigem hin und her haben ich dann festgestellt, dass das japanische Character Set für das japanische Sprachpaket (csh_jp [ja, die Typo3 Version ist noch nicht 4.0]) mit shift_jis nicht mit den vom Kunden gelieferten Word Dokumenten kompatibel war (die waren im Character Set euc-jp codiert).
Jetzt könnte man natürlich argumentieren: "Warum hast du nicht forceCharset im Installtool auf UTF-8 gesetzt?? Dann wär das Problem nicht mehr vorhanden..."
Meine Antwort darauf: "Klar - vollkommen sinnige Antwort, allerdings war niemand so wirklich scharf darauf dem Kunden zu erklären warum seine deutschen Texte alle erneut eingepflegt werden müssen. Und... achja hatte ich ja erwähnt - da war ja auch noch eine chinesische Variante..."
Fazit: Wir müssen das BE irgendwie in euc-jp umstellen (das FE ist ja relativ simpel umzustellen).

Die schlechte Nachricht zuerst: Außer mit forceCharset lässt sich die Codierung im Backend nicht überschreiben.
Jetzt die Gute: Allzu schwer ist es trotzdem nicht - wenn man weiß wo man hin muss...

Lösung:

Man öffne die Datei typo3/t3lib/class.t3lib_cs.php.
Ungefähr in Zeile 356 steht folgender Code:
    var $lang_to_charset_unix=array(
'west_european' => 'iso-8859-1',
'estonian' => 'iso-8859-1',
[...]
'chinese' => 'gb2312', // = euc-cn
'japanese' => 'euc-jp',
'korean' => 'euc-kr',
[...]
);

Im nächsten Array steht das gleiche für Windows, bloß dass hier als Charset für Japanisch shift_jis steht. Dies muss durch euc-jp ersetzt werden. Als letztes muss im übernächsten Array ($charSetArray) unter dem Index jp ebenfalls euc-jp eingetragen werden.
Jetzt müsst Ihr die Datei nur noch hochladen und voilá - euer Backend erstrahlt in neuer Codierung.

Achja, für's Frontend müsst Ihr in eurem TypoScript Template folgende Zeile einfügen:
config.renderCharset = euc-jp

Ich hoffe das hat euch einiges an Zeit gespart.

15.1.07

Section Header einbauen

Wenn Ihr sog. Section Headers einbauen wollt, könnt Ihr dafür das folgende TypoScript verwenden:
temp.CurrentPage = HMENU
temp.CurrentPage {
special = rootline
special.range = 1|1
1 = TMENU
1.NO.doNotLinkIt = 1
1.NO.allWrap = <div class="current_page"> | </div>
}

Was sind Section Header?
Also, wir gehen davon aus, Ihr habt auf eurer Seite eine Navigation mit den Punkten
Über uns, Referenzen und Kundenbereich.
Klickt ein Besucher jetzt zum Beispiel auf Kundenbereich habt Ihr Links eine Navigation, die die Unterpunkte von Kundenbereich anzeigt. Gleichzeitig möchtet Ihr aber auch für alle Seiten unter Kundenbereich anzeigen, dass Sie sich unter der Sektion (Section) Kundenbereich befinden.
Klickt sich ein Besucher dann z.B. in den folgenden Pfad
Kundenbereich >> Geschützer Bereich >> Downloads
soll das Label für Section Header trotzdem Kundenbereich anzeigen.
So, ich hoffe das war einigermaßen verständlich ;-)

30.8.06

BUGFIX: tt_news Single Ansicht auf pid_list beschränken

Folgendes Problem gab es heute bei mir: Ein Typo3 (4.0.1) Projekt hat zwei unabhängige Bäume. Nennen wir den Ersten "Internet" und den Zweiten "Extranet".
Beide Bäume haben jeweils eine sys_folder, die nur News Artikel (tt_news, 2.4.0) beinhalten. Die Artikel im "Extranet" haben also eine andere PID als die aus dem "Internet" Baum.
Im TypoScript Template habe ich unter den Constants also folgendes geschrieben:
# Internet TS Template
plugin.tt_news.pid_list = 19

# Extranet TS Template
plugin.tt_news.pid_list = 90

Das hat auch alles in der LIST oder LATEST Ansicht wunderbar geklappt. Beim Testen hab ich aber gemerkt, dass man im "Internet" Baum in der SINGLE Ansicht über die Manipulation der tx_ttnews[tt_news] Variablen auch die Artikel aus dem Extranet lesen kann. Dem "Internet" Baum wurde nirgendwo die PID 90 (also die UID der sys_folder des Extranet Baums) mitgeteilt.
Um das zu beheben, geht Ihr einfach wie folgt vor:
Öffnet die class.tx_ttnews.php in einem Editor.
Sucht die Definition der Funktion displaySingle() (etwa bei Zeile 510).
Das sollte dann in etwa so aussehen:
function displaySingle() {
$singleWhere = 'tt_news.uid=' .
intval($this->tt_news_uid);
$singleWhere .= ' AND type NOT IN(1,2)' .
$this->enableFields; // only real news -> type=0

Jetzt fügt Ihr einfach noch diese Zeile darunter ein:
$singleWhere .= ' AND pid IN (' .
$this->pid_list . ')';

und siehe da - die SINGLE Ansicht hält sich plötzlich auch an Euer TypoScript.

22.8.06

Icons im RTE anzeigen/ausblenden

Um im neuen RTE (Typo3 > 3.8) Icons anzuzeigen, macht ihr am besten folgendes in eurer TSConfig:
RTE.default.showButtons = *

Mit
RTE.default.hideButtons = chMode,outdent,...

könnt Ihr nun einzelne Buttons entfernen.
Folgende Schlüsselwörter steehen euch zur Verfügung:

textstyle, textstylelabel, blockstyle, blockstylelabel, bold, italic, underline, left, center, right, orderedlist, unorderedlist, insertcharacter, line, link, image, removeformat, table, toggleborders, tableproperties, rowproperties, rowinsertabove, rowinsertunder, rowdelete, rowsplit, columninsertbefore, columninsertafter, columndelete, columnsplit, cellproperties, cellinsertbefore, cellinsertafter, celldelete, cellsplit, cellmerge, findreplace, insertcharacter, undo, redo, showhelp, about, fontstyle, formatblock, fontsize, strikethrough,lefttoright, righttoleft, textcolor, bgcolor, textindicator, emoticon, user, spellcheck, chMode, inserttag, outdent, indent, justifyfull, subscript, superscript, acronym, copy, cut, paste