Zum Inhalt springen

Buch Praxiswissen Typo3

Erstellt am 22. Juni 2005 · 18 Antworten · letzte Antwort am 2. Januar 2007

Tags: Frage

nelson ·

Hallo spinko,

ich habe schon an den Verlag geschrieben wg. des Gesamt_Script. Antwort: Kann von uns nicht geliefert werden, Ihre Mail wird an den Autor weitergeleitet. Bin gespannt was kommt.

Gruß

robert.​meyer ·

Hallo,

ich habe die eMail vom Verlag erhalten und werde mal sehen, ob und wie sich das machen lässt.

Hierzu habe ich auch eine Frage: Wozu wird der gesamte Code benötigt? Wo genau hakt es?

alpentypo ·

Hallo

Habe auch ne Frage zum Buch

Meine Typoumgebung, XAMPP, Typo3.8.0, DummyPaket, ImageMagick eingerichtet.
GIF to GIF ok, PNG to PNG fail, GIF to JPG ok

Kapitel 11, Beispiel 11-15

Läuft alles korrekt bis auf das FOTO (JPG).
Wenn kein Bild im Ordner liegt wird Fehlgrafik N/A anzeigt und wenn das Foto lt. Datenbank vorhanden ist wird NICHTS anzeigt. auch im Quellcode ist in der Tabellenzelle nichts.

Hab alles lt. Beispiel gemacht - wo ist der Fehler.

# Parameter für das eigene Mitarbeiter-Plugin
plugin.user_rmmitarbeiter_pi1 {
   testObjekt = IMAGE
   testObjekt.file = GIFBUILDER
   testObjekt.file {
      XY = 100,100
      backColor = red
   }
   # Pfad zur Designvorlage als Parameter angeben
   templateFile = fileadmin/template/main/mitarbeiter.html
   
   # So soll ein Foto eines Mitarbeiters formatiert werden.
   bild = IMAGE
   bild {
      XY = [10.w]+2,  [10.h]+2
      backColor = black
      10 = IMAGE
      # Der Pfad zum Bild wird später dynamisch ersetzt.
      10.file = unbekannt
      10.file.width =150
      10.offset= 1,1
   }
   # Dieses Bild soll angezeigt werden, wenn kein Foto vorhanden ist.
   bild_default = IMAGE
   bild_default.file = GIFBUILDER
   bild_default.file {
      XY = 152, 50
      backColor = white
      10 = TEXT
      10.text = N/A
      10.fontFile = fileadmin/fonts/verdana.ttf
      10.fontSize = 20
      10.fontColor = black
      10.niceText = 1
      10.offset = 30,25
   }
}
robert.​meyer ·

Hallo,

[...]
# Der Pfad zum Bild wird später dynamisch ersetzt.
10.file = unbekannt
[...]

Anscheinend wird der Pfad zum Bild doch nicht richtig ersetzt. Wie lautet denn der entsprechende PHP-Code, der den Pfad ersetzen soll?

alpentypo ·

Genau lt. Buch.

function main($content,$conf) {
   $this->conf=$conf;
   $this->pi_setPiVarDefaults();
   $this->pi_loadLL();
   $this->pi_USER_INT_obj=1;

   // Variablen setzen
   $content = "";
   $marker = array();
   $img_pfad = "uploads/tx_userrmmitarbeiter/";

   // Die Designvorlage laden
   $tmpl = $this->cObj->fileResource($conf["templateFile"]);
   // Einen Teilbereich der Designvorlage auslesen
   $tmpl = $this->cObj->getSubpart($tmpl, "###MITARBEITER###");
   // Einen weiteren Teilbereich aus dem Teilbereich auslesen
   $tmpl_eintrag = $this->cObj->getSubpart($tmpl, "###EINTRAG###");

   // Ggf. einen Parameter auslesen, ansonsten die aktuelle Seite verwenden
   $mitarbeiterPageId = $conf["mitarbeiterPageId"];
   if (!intval($mitarbeiterPageId)) $mitarbeiterPageId = $GLOBALS["TSFE"]->id;

   // Die Datenbankabfrage inkl. Unterstützung von Datenbankabstraktion
   $res =$GLOBALS["TYPO3_DB"]->exec_SELECTquery("*","user_rmmitarbeiter_main", "deleted = 0 AND hidden = 0 AND pid = '".$mitarbeiterPageId."'");
   while ($row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res)) {
      // Ein Array mit Platzhaltern als Schlüssel mit den Werten füllen
      $marker["###NAME###"] = $row["nachname"]." ".$row["vorname"];
      // Das Bild auslesen und verarbeiten
      $conf["bild."]["file."]["10."]["file"]= $img_pfad.$row["bild"];
      if ($this->cObj->fileResource($img_pfad.$row["bild"])) {
         $marker["###BILD###"] = $this->cObj->cObjGetSingle($conf["bild"], $conf["bild."]);
      } else {
         $marker["###BILD###"] = $this->cObj->cObjGetSingle($conf["bild_default"], $conf["bild_default."]);
      }
      // Den Teilbereich ###EINTRAG### und das Array miteinander "vereinen"
      $content.=$this->cObj->substituteMarkerArrayCached($tmpl_eintrag, $marker);
   }
   // Letztmalig den umhüllenden Teilbereich ersetzen und Ergebnis ausgeben
   $content =$this->cObj->substituteSubpart($tmpl, "###EINTRAG###", $content);
   return $content;
}
robert.​meyer ·

Hallo,
schaut soweit ganz gut aus. Was passiert, wenn im TypoScript-Code die Zeile 10.file.width =150 auskommentiert wird? Ggf. gibt es mit der IM-Version Skalierungsprobleme.

alpentypo ·

Hallo

Das auskommentieren hat leider auch nicht geholfen.

Meine ImageMagick Konfiguration (unter Windows XP)

ImageMagick enabled: 1
ImageMagick path: D:\apachefriends\xampp\ImageMagick/ (4.2.9)
ImageMagick path/LZW: D:\apachefriends\xampp\ImageMagick/ (4.2.9)
Version 5 flag: 0

GDLib enabled: 1
GDLib using PNG: 0
GDLib 2 enabled: 0
IM5 effects enabled: 0 (Blurring/Sharpening with IM 5+)
Freetype DPI: 72 (Should be 96 for Freetype 2)
Mask invert: 0 (Should be set for some IM versions approx. 5.4+)

File Formats: gif,jpg,jpeg,tif,bmp,pcx,tga,png,pdf,ai

robert.​meyer ·

Sorry, steht das wirklich so im Buch? Ist fehlerhaft! Zeile 29 muss lauten

$conf["bild."]["10."]["file"]= $img_pfad.$row["bild"];

Ich habe es mir notiert - sollte in der nächsten Auflage behoben sein ;-)

alpentypo ·

Hallo,

$conf["bild."]["10."]["file"]= $img_pfad.$row["bild"];

Habs so auch schon probiert, wahr aber leider nicht der Fehler.

Vielleicht ist was falsch konfiguriert.

Naja, hab mich jedefalls jetzt mal zum 1-monatigen Typo3 testen bei euch angemeldet. Vielleicht funktioniert da.

Jedefalls vielen Dank für die prompten Antworten. Ist ja nicht selbstverständlich :-). Jetzt geh mal auf nen Samstagabenddrink.

robert.​meyer ·

Hallo,

ich habe es gefixt (auch schon direkt im Account). Problem war nicht der PHP-Code (hier ist alles in Ordnung), der Fehler lag im TypoScript-Code (Fehler im Buch, das GIFBUILDER-Objekt hat gefehlt).

Auf Seite 327 (Bsp 11-14) muss es lauten:

   bild = IMAGE
   bild.file = GIFBUILDER
   bild.file {
      XY = [10.w]+2, [10.h]+2
      backColor = black
      10 = IMAGE
      10.file = unbekannt
      10.file.width = 150
      10.offset = 1,1      
   }

Sorry für den Fehler und den hieraus entstandenen Zeitraub. Geht voll und ganz auf meine Kappe...

alpentypo ·

Hallo

Den Fehler hätt ich aber selber auch sehen können #angry#

Nichtdestotrotz, haste hier ein super Buch auf den Markt gebracht, welches einem einen einfachen und vor allem transparenten Einstieg in die Typo3materie gibt.

mfg

Christian

throbanup ·
robert.meyer schrieb

Hierzu habe ich auch eine Frage: Wozu wird der gesamte Code benötigt? Wo genau hakt es?

Hallo Robert,

mich würde der Gesamtcode ebenfalls interessieren. Bin noch nicht ganz durch mit dem Buch, aber es hakt zB auf S. 154/155: Du beschreibst dort wie man einen Menueintrag mit zweizeiligem Text darstellt. Auf Seite 155 gehst du dann auf die jetzt fehlerhafte Traileranzeige ein, leider ohne Codebeispiel.

Mit meinen Anfängerkenntnissen habe ich zwar einen Workaround gebastelt, würde aber trotzdem gerne die "Musterlösung" sehen. Drum das Interesse am Gesamtcode...

altair3 ·

Würde auch gerne die Musterlösung sehen.

Mein Workaround:

# Text auf den Trailer rendern
        30 = TEXT
        30.text.field = subtitle // title
        30.text.listNum = 0
        30.text.listNum.splitChar = |
        30.fontFile = fileadmin/fonts/verdana.ttf
        30.fontSize = 24
        30.fontColor = #364497
        30.niceText = 1
        # Bitte den Unterstrich entfernen, konnte es hier nicht anders maskieren
        30.offset = 10[&nbsp_;], 85
        
        # Eventuell vorhandenen 2. Texteil auf den Trailer rendern
        35 < .30
        35.text.listNum = 1
        35.offset = 10+[37.w], 85

        # Eine Hilfsebene zum Berechnen der Länge
        37 < .30
        37.text.listNum = 0
        37.offset = 2000, 2000
        }

Gruß
altair3

sonya ·
robert.meyer schrieb

Hallo,
. . .

Hierzu habe ich auch eine Frage: Wozu wird der gesamte Code benötigt? Wo genau hakt es?

Hallo,
alle Achtung für die Arbeit an dem Buch!
Ich habe mir das Buch (in der Buchhandlung :o ) angesehen.
Weshalb ich es nicht kaufte. Mir fehlen einfach praxisrelevante Beispiele.
Angefangen von einem CSS passierendem Grundaufbaues einer HTML-Seite mit DIVs und LIs, Also der Designvorlage. Bis hin zu relevanten Anwendungspraktiken einer vollständigen textpassierenden Website ohne Gifbuilder und Graphischer Texterzeugung. Zumindest alle Möglichkeiten getrennt mit und ohne Gifbulder und/oder GMenu.
Dies nach einer schnellen Ansicht des Buches.
Eine Kaufanregung wäre gewesen, es hätte alle aufgeführten Codebeispiele auch digital vorliegen. Nur hatte ich eben im Voraus bereits hier gelesen, daß dies nicht der Fall ist. Da ist mir in diesem Falle Preis für das Buch doch zu hoch.
Dies ausschließlich meine Meinung.

MFG
Sonya

µaTh ·

den workaround hab ich auch gefunden. mein prob mit dem GIFBUILDER ist allerdings, dass da alle Bilder auf 256 farben runterskaliert werden. gibt es eine möglichkeit die bilder in jpg-farben zu lassen?

Viele Grüße

µaTh

µaTh ·

ok, nun hab ich es hinbekommen, dass ich alle farben habe.

plugin.user_mitarbeiter_pi1 {

  # Pfad zur Designvorlage als Parameter angeben
  templateFile = fileadmin/************/designvorlagen/mitarbeiter.html

   # So soll ein Foto eines Mitarbeiters formatiert werden.
   bild = IMAGE
   bild.file = unbekannt
   }
   # Dieses Bild soll angezeigt werden, wenn kein Foto vorhanden ist.
   bild_default = IMAGE
   bild_default.file = GIFBUILDER
   bild_default.file {
      XY = 150, 50
      backColor = white
      10 = TEXT
      10.text = Bild ;-)
      10.fontSize = 20
      10.fontColor = black
      10.niceText = 1
      10.offset = 30,25
   }
}
function main($content,$conf) {
   $this->conf=$conf;
   $this->pi_setPiVarDefaults();
   $this->pi_loadLL();
   $this->pi_USER_INT_obj=1;
   
   // Variablen setzen
   $content = "";
   $marker = array();
   $img_pfad = "uploads/tx_usermitarbeiter/";
   
   // Die Designvorlage laden
   $tmpl = $this->cObj->fileResource($conf["templateFile"]);
   // Einen Teilbereich der Designvorlage auslesen
   $tmpl = $this->cObj->getSubpart($tmpl, "###MITARBEITER###");
   // Einen weiteren Teilbereich aus dem Teilbereich auslesen
   $tmpl_eintrag = $this->cObj->getSubpart($tmpl, "###EINTRAG###");
   // Ggf. einen Parameter auslesen, ansonsten die aktuelle Seite verwenden
   $mitarbeiterPageId = $conf["mitarbeiterPageId"];
   if (!intval($mitarbeiterPageId)) $mitarbeiterPageId = $GLOBALS["TSFE"]->id;
   
   // Die Datenbankabfrage inkl. Unterstützung von Datenbankabstraktion
   $res =$GLOBALS["TYPO3_DB"]->exec_SELECTquery("*","user_mitarbeiter_main", "deleted = 0 AND hidden = 0 AND pid = '".$mitarbeiterPageId."'");
   while ($row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res)) {
      // Ein Array mit Platzhaltern als Schlüssel mit den Werten füllen
      $marker["###NAME###"] = $row["vorname"]." ".$row["nachname"];
      $marker["###WOHNORT###"] = $row["wohnort"];
      $marker["###BERUF###"] = $row["beruf"];
      $marker["###EMAIL###"] = $row["email"];
      $marker["###POSITION###"] = $row["position"];
      $marker["###WEITEREINFOS###"] = $row["weitereinfos"];
      // Das Bild auslesen und verarbeiten
      $conf["bild."]["file"]= $img_pfad.$row["bild"];
      if ($this->cObj->fileResource($img_pfad.$row["bild"])) {
        $marker["###BILD###"] = $this->cObj->cObjGetSingle($conf["bild"], $conf["bild."]);
        } else {
        $marker["###BILD###"] = $this->cObj->cObjGetSingle($conf["bild_default"], $conf["bild_default."]); // der else-zweig zeigt die in TS erstellte grafik nicht an!!!
      }
      // Den Teilbereich ###EINTRAG### und das Array miteinander "vereinen"
      $content.=$this->cObj->substituteMarkerArrayCached($tmpl_eintrag, $marker);
   }
   // Letztmalig den umhüllenden Teilbereich ersetzen und Ergebnis ausgeben
   $content =$this->cObj->substituteSubpart($tmpl, "###EINTRAG###", $content);
   return $content;
}
}

Zeile 37: die grafik, die in typoscript erstellt wurde, wenn keine bild vorhanden ist, wird nicht angezeigt im oberen skript.