Textart Mambot

Ein recht simpler Mambot der mit Hilfe der GD Bibliothek den ersten Buchstaben in allen Absätzen durch eine Grafik ersetzt.

Voraussetzugen

  • Joomla Kenntnisse
  • PHP mit GD

Funktionsbeschreibung

Die Funktion ImageHexColorAllocate erleichtert einfach den Umgang mit RGB Farben. Mit der Funktion kann man die Farben im gewohnten HTML HEX Format angeben.

Die Funktion firstLetterText($html,$img) ersetzt den ersten Buchstaben in allen Absätzen durch ein generierte Grafik. Hier könnte man noch ein bischen verbessen. Im Moment muss der Buchstabe direkt auf das schliessende > folgen damit's funktioniert. Wenn man einen WISYWIG Editor verwendet - mach' ich nicht :-) - kann das zu Problemen führen. Einfach den regulären Ausdruck entsprechend anpassen.

Die Grafik wird mit der Funktion firstLetterImage erstellt. Die Beschreibung der verwendeten GD Funktionen findet sich in den entsprechenden Manuals. Wenn man das Ganze produktiv einsetzt sollte man prüfen, ob es Sinn macht ein Caching der Grafiken zu implementieren. GD frisst recht viel Speicher. Eine Parameter-Datei über die z. B. die verwendete TTF Datei etc. eingestellt werden können ist sicherlich auch sinnvoll.

Da diese Funktionen aber recht Kunden- bzw. projektspezifisch sind habe ich mir das für dieses Demo erspart.

Quelltext des Image Generators

 <?php
 function ImageHexColorAllocate(& $im, $hex) {
   $r = hexdec(substr($hex, 1, 2));
   $g = hexdec(substr($hex, 3, 2));
   $b = hexdec(substr($hex, 5, 2));
   return ImageColorAllocate($im, $r, $g, $b);
 }
 function firstLetterImage($letter,$backgroundcolor='#FFFFFF',
   $textcolor='#2E8B57') {
   $im = @ ImageCreate(50, 40);
   if ($im) {
     $bc = ImageHexColorAllocate($im,$backgroundcolor);
     $tc = ImageHexColorAllocate($im,$textcolor );
     imagecolortransparent($im, $backgroundcolor);
     imagefttext($im, 36, 0, 0, 36, $tc,
       str_replace('/grafx.php',
         '/diploma.ttf',__FILE__),
         $letter,
         array (
          'lineheight' => 1.0
         )
     );
     header("Content-type: image/gif");
     ImageGiF($im);
   }
 }
 function firstLetterText($html,$img) {
   return preg_replace(
     "/<p>(.)/",
     "<p><img style=\"float:left;\"".
     " alt=\"\" xsrc=\"$img?letter=\" />",
     $html);
 }
 if(isset($_GET['letter'])) {
   return firstLetterImage($_GET['letter']);
 }
 ?>

Quelltext des Mambots

 <?php

 defined( '_VALID_MOS' ) or die( 'Restricted access' );

 $_MAMBOTS->registerFunction( 'onPrepareContent', 'botMosArt1' );

 $image_maker = dirname( __FILE__ ) . '/textart/grafx.php';
 include_once( $image_maker );

 function botMosArt1( $published, &$row, &$params, $page=0 ) {
   if ( strpos( $row->text, 'mosart1' ) === false ) {
     return true;
   }
   $regex = "#(.*?)#s";
   if ( !$published ) {
     $row->text = preg_replace( $regex, '', $row->text );
     return true;
   }
   $row->text = preg_replace_callback(
     $regex,
     'botMosArt1_replacer',
     $row->text
   );
   return true;
 }

 function botMosArt1_replacer( &$matches ) {
   $image_maker = '/mambots/content/textart/grafx.php';
   $text = firstLetterText($matches[1],$image_maker);
   return $text;
 }

 ?>

Links

  • GD Manual
  • Textart Demo - Gibts natürlich unter Typo3 nicht mehr.

Vorschau

Wenn ich mich ein bischen besser mit Typo3 auskenne und ein etwas Zeit erübrigen kann werd ich versuchen das Ganze für Typo3 anzupassen.