Dez 3

Will man die Extension timtab_tagcloud ohne TimTab, nur mit tt_news, einsetzen, stellt man fest, das die Ergebnisse in der Liste zu einem Tag nicht verlinkt sind. Abhilfe schafft dieses Fitzelchen Code.

plugin.tx_timtab.blogPid = 123   # Hier die PID der Seite mit der SINGLE-Ansicht eintragen.

Und das funktioniert natürlich auch, ohne installiertes Timtab.

Dez 20
Es ist da …
icon1 patrick | icon2 TYPO3, TypoScript | icon4 12 20th, 2007| icon35 Comments »

Hurra – es ist endlich da… wochenlanges warten und zittern, ob es sich der ganze Aufwand gelohnt hat und ob es so geworden ist, wie man es sich erhofft hat … und – ja – ich bin zufrieden, sehr sogar (*stolz*):

ACHTUNG WIEDER EINMAL UNVERSCHÄMTE EIGENWERBUNG!

Leider etwas unscharfes Bild vom neuen TypoScript kurz&gut Buch
Heute habe ich das erste Exemplar des brandneuen “TypoScript kurz&gut” aus dem O’Reilly Verlag erhalten. Mit 270 Seiten halte ich nun den Rekord in der Reihe “kurz&gut” und das sogar international :-) Aber auf weniger Seiten war die TSref, TSconfig und die beschriebenen TypoScript-Optionen der gängigen Extensions nicht zu komprimieren.

Im Handel wird’s in ein paar Tagen sein – bei Amazon vielleicht schon etwas früher…

Und bitte – haltet Euch mit Kritik (aber natürlich auch Lob) nicht zurück – gerade das Feedback der Community ist mir sehr wichtig, da es ja auch für Euch geschrieben wurde (und endlich kann ich meinen Ordner mit der ausgedruckten TSref/TSconfig wegschmeissen – puhhhh).

Ich hoffe Euch gefällt’s auch so gut wie mir :-)

Dez 12

Wie lautet der schnellste Weg zur TSref? …… na? http://www.tsref.deUnser Kommentator “MaBa” hat dann noch einen Weg zur TSconfig “gefunden” (naja nicht direkt gefunden, sondern er sponsort die Domain):http://www.tsconfig.de(Danke dafür :-) )—*** ACHTUNG UNVERSCHÄMTE EIGENWERBUNG: ***Oder in die neue Referenz “TypoScript kurz&gut” aus dem O’Reilly-Verlag schauen – die braucht allerdings noch ein paar Tage von der Druckerei in die Buchläden :-) Schätzungsweise nächste Woche wird es soweit sein…

Dez 4

Der Titel hört sich etwas merkwürdig an, aber ich wusste nicht, wie man es anders bezeichnen soll.

Folgende Aufgabenstellung bekam ich vom Kunden:

Aus 20 zufälligen Bildern von Mitarbeitern die über das LDAP in TYPO3 eingebunden wurden, soll eine Collage erstellt werden, die aus 5 Reihen und vier Spalten besteht.

Also machen wir uns ans Werk:

Generell habe ich folgende Vorgehensweise gewählt:

  1. Einen Query über die fe_user-Tabelle, der zufällig 20 User ausliest
  2. Ein leeres Bild erzeugen, welches die Collage aufnehmen kann
  3. Durch alle zurückgelieferten Datensätze iterieren und jeweils die URL des Bildes auslesen.
  4. Dieses Bild an die entsprechende Stelle in der Collage schreiben
  5. Das fertige Bild ausgeben

Dafür bietet sich die postUserFunc aus dem stdWrap-Baukasten an, da eine Extension viel zu überdimensioniert wäre. Ich gehe davon aus, dass es einen Marker COLLAGE gibt. Wir erzeugen also auf der Seite, die die Collage bekommen soll, ein Extension-Template mit dem folgenden Inhalt:

includeLibs.something = fileadmin/scripts/collage.php

page.10.marks.COLLAGE = TEXT
page.10.marks.COLLAGE {
   postUserFunc = user_generateCollage
}

Zunächst laden wir also die Datei collage.php, die sich im Verzeichnis fileadmin/scripts befindet. Anschließend erzeugen wir am Marker COLLAGE ein TEXT-cObject, dessen Inhalt wir über die Funktion user_generateCollage bestimmen. Die Funktion (deren Name immer mit user_ anfangen muss) wiederum befindet sich in der Datei collage.php. Ich habe die Kommentare direkt in die Datei geschrieben um die jeweiligen Arbeitsschritte zu kennzeichnen. Bitte beachtet ausserdem, dass dies eine ganz speziell angepasste Auftragsarbeit war – manche Stellen hätte man sicherlich generischer anpacken können.

Inhalt der Datei: collage.php

<?php

function user_generateCollage($one,$two) {
   // nur die fe_user nehmen, die sich auf der Seite mit der
   //pid = 170 befinden
   $where .= " pid = 170";
   // eine Usergruppe (hier 27) soll ausgeblendet werden -
   // der Vorstand mag nicht auf's Bild :-)
   $where .= " AND usergroup !='27'";
   // nur Datensätze auswählen die auch ein Bild haben
   $where .= " AND image != ''";
   // stellt sicher, dass keine verstecken o. ausgeblendeten
   // Daten erfasst werden
   $enableFields = $GLOBALS['TSFE']->cObj->
                                     enableFields('fe_users');
   $where .= " ".$enableFields;
   // Zufallsgenerator an...
   $order_by = " RAND() " ;
   // ... und genau 20 Ergebnisse mitnehmen
   $limit = 20;

   // Datenbank-Query absetzen
   $res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery( ' * ',
                    'fe_users', $where, '',$order_by, $limit);

   // img-Objekt aufbauen, zunächst als GIFBUILDER
   $img["file"] = 'GIFBUILDER';
   // Größe der Collage festlegen
   $img['file.']["XY"] = '228,389';
   // als Format wird PNG verwendet
   $img['file.']["format"] = 'png';
   // Die Qualität der auszugebenden Collage soll maximal sein
   $img['file.']["quality"] = '100';

   // Nun gehen wir durch alle Zeilen (aeussere Schleife)
   // und alle Spalten (innere Schleife)
   for ($y = 0; $y < 5; $y++) {
      for ($x = 0; $x < 4; $x++) {
         // zaehler fuer die verschiedenen GifBuilderObj
         $counter = $y*100 + $x*10 + 5;
         // Ergebnis holen
         $row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res);
         // als GifBuilderObj das Objekt IMAGE auswaehlen
         $img['file.'][$counter] = 'IMAGE';
         // sollten mehrere Bilder hinterlegt worden sein,
         // dann nimm das erste
         $image = split(",",$row['image']);
         $image = (is_array($image)) ? $image[0] : $image;
         // Pfad zur Bilddatei
         $img['file.'][$counter."."]["file"] =
                                        'uploads/pics/'.$image;
         // Format festlegen
         $img['file.'][$counter."."]["file."]['format'] = 'jpg';
         // Breite des Bildes
         $img['file.'][$counter."."]["file."]['width'] = '57';
         // Hoehe des Bildes
         $img['file.'][$counter."."]["file."]['height'] = '78';
         // Nun wird das Bild positioniert:
         //Hier ersteinmal die x-Position
         $offx = (int)($x*57)+1;
         // ... und hier die Y-Position
         $offy = (int)($y*78)+1;
         // Offset setzen
         $img['file.'][$counter."."]['offset'] = "$offx,$offy";
      }
   }
   // * Magic!! * Nun wird die Collage gerendert :-)
   $imgResource = $GLOBALS['TSFE']->cObj->IMAGE($img);
   // und zurückgegeben
   return $imgResource;
}
?>

Voilá – that’s it – und so sieht’s aus:

Die fertige Collage (Symboldarstellung)

Die “Magie” letztlich steckt darin, ein durch PHP erzeugtes TS-Array mit dem GIFBUILDER-Objekt durch die Funktion cObj->IMAGE rendern zu lassen.

Nov 19

Bei Thomas drüben gibt es einen sehr interessanten TypoScript-Wettbewerb. Es geht darum mit möglichst wenig Zeilen ein bestimmtes Menu zu bauen. zu gewinnen gibt es ein Jahresabo T3N mit eine OpenSource-Tasche. Einsendeschluß ist der 20.12.07.

Dann mal los!

Nov 2

Da ich dies gerade bei einem Projekt hatte…

Es soll aus einem Verzeichnis zufällig eine der dort vorhandenen Flash-Dateien in TYPO3 geladen und angezeigt werden. Das lässt sich logisch auch für Bilder und ähnliches umschreiben.

Folgendes TypoScript schreibt man in den Setup-Bereich des Templates – im Bereich “params” werden die Flash spezifischen Parameter notiert:

page.includeLibs.flash = fileadmin/scripts/flashrandom.php
page.10.marks.FLASH = COA_INT
page.10.marks.FLASH {
   10 = MULTIMEDIA
   10 {
      file.preUserFunc = user_flashrandom->getFlash
      params (
         width = 740
         height = 260
         type = application/x-shockwave-flash
         quality= high
         wmode = transparent
)
   }
}

In eine Datei “flashrandom.php” die wir ins Verzeichnis “fileadmin/scripts/” legen, kommt folgender PHP-Code:

<?php
class user_flashrandom {
   function getFlash ($text, $tsconf) {
      $dir = 'fileadmin/flash/hp/';
      $dh  = opendir($dir);
         while (false !== ($filename = readdir($dh))) {
            if ($filename != "." && $filename != "..") {
               $files[] = $filename;
            }
      }
      srand((float) microtime() * 10000000);
      $key = array_rand($files);
      $ret = $dir . $files[$key];
      return $ret;
   }
}
?>
Okt 23

Der RTE kann relativ einfach vergrößert werden. Neben dem RTE befindet sich das Vollbildsymbol. Mit zwei Zeilen TS im Setup Feld des Benutzers kann die Größe aber auch individuell eingestellt werden:

options.RTESmallWidth = 600
options.RTESmallHeight = 500

Die Angaben entsprechen den Pixeln, die der RTE groß sein soll.

Okt 23

Da mittlerweile zahlreiche Videotutorials zu TYPO3 erschienen sind und von jedem dieser Titel auch Demo-Videos verfügbar sind, folgt hier eine (nicht vollständige) Liste der verfügbaren kostenlosen Videos:

TYPO3 Version 4 – Video-Training (Addison Wesley)
TYPO3 4.0 für Redakteure (Addison Wesley)
TYPO3 für Profis (Addison Wesley)
TYPO3 Video-Training (Addison Wesley)
TypoScript-Videotraining (Addison Wesley)

Einstieg in TYPO3 4.0 (Galileo Computing)