Schnellnavigation:

Kategorien

« Dezember 2012»
S M T W T F S
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

Letzte Nachrichten

DSGVO
26.05.2018 18:39
Trackingtools und Datenschutzerklärung
14.03.2014 23:07
1:n und n:1 Relationen in Extbase
06.12.2013 12:04
Erste Abmahnungen wegen Google Analytics
04.10.2013 12:11

Kopieren Sie diesen Link in Ihren RSS-Reader

RSS 0.91Nachrichten
RSS 2.0Nachrichten

In eigener Sache

Peter Linzenkirchner, Lisardo EDV Beratung in Augsburg. Freelance und Partner für Design- und Webagenturen in Augsburg und München. Pixelgenaue Templates, valides HTML, barrierearm. TYPO3-Projekte, Extension-Programmierung und mehr ... 

Zur Zeit wird gefiltert nach: Typoscript
Filter zurücksetzen

fUm die Vorschau von Bildern in einer eigenen Extension in einer der zahlreichen Lightboxen zu präsentieren sind ein paar Schritte nötig. Zuerst das Typoscript: 

  1. plugin.tx_myext_pi1 {
  2.   preview {
  3.    file.maxW=170
  4.    imageLinkWrap = 1
  5.    imageLinkWrap {
  6.     enable = 1
  7.     typolink {
  8.      ATagParams = class="lightbox" 
  9.      parameter.cObject = IMG_RESOURCE
  10.      parameter.cObject.file.import.data = TSFE:lastImageInfo|origFile
  11.      parameter.cObject.file.maxW = 700
  12.      parameter.cObject.file.maxH = 700
  13.     }
  14.    }
  15.   }
  16.  }

Dabei sorgt file.maxW für die Breite des Vorschaubildes und parameter.cObject.file.maxW für die Breite des Bildes in der Lightbox. Der Eintrag bei ATagParams variiert nach verwendeter Lightbox. Ich verwende hier die Colorbox, die eine Klasse mit dem Namen "lightbox" wünscht. 

Im PHP der Extension muss dieses Typoscript passend verwendet und ergänzt werden: 

  1. // $url = Pfad zur Bilddatei - aus der DB
  2. // $title = Titel / Kurzbeschreibung des Bildes, aus DB;
  3. $lConf = $this->conf['preview.'];
  4. $lConf['file'] = $url;
  5. $lConf['imageLinkWrap.']['typolink.']['title'] = $title;
  6. // Zuweisen zum Marker:
  7. $marker['###IMAGE###'] = $this->cObj->IMAGE($lConf);
  8. // etc.
  9.  

Kein großer Aufwand mehr im PHP ... Man übernimmt sinnvollerweise zuerst die Konfiguration in eine Variable ($lConf) und erweitert dann diese Konfiguration mit $lConf['file'] um den Pfad auf das Bild (in der Regel wohl aus der DB ausgelesen). Der Rest ist optional – wobei der title natürlich noch sinnvoll ist, da er in der Lightbox gezeigt wird. 

Damit ist sichergestellt, dass sowohl die direkt gezeigten Vorschaubilder wie auch die größeren Bilder in der Lightbox eine vorgegebene Maximalgröße bekommen. Weitere Attribute können natürlich nach Belieben entweder im Typoscript oder im PHP hinzugefügt werden. 

 

tt_news verwendet die Typoscript-Funktion filelink für die Ausgabe der Dateien, die mit einem News-Artikel verbunden werden. An sich ist das ziemlich leistungsfähig und auch gut zu konfigurieren. Kleines Beispiel: 

  1. plugin.tt_news.newsFiles {
  2.   icon = 1
  3.   icon.wrap = <span class="news-file-icon"> | </span>
  4.   size = 1
  5.   size.wrap = <span class="news-file-size"> | </span>
  6.   target = _blank
  7.   file.wrap = <span class="news-file-file"> | </span>
  8. }

Die verschiedenen Optionen sind im TSref zu finden. 

Leider fehlt eine entscheidende Möglichkeit, nämlich eigene Icons für die Dateien zu verwenden. In filelinks ist der Ordner, aus dem die Icons geladen werden, nämlich hart im PHP kodiert. Und zwar einschließlich der Pixelgröße der verwendeten Icons. 

ich habe viele Fragen dazu im Netz gefunden und auch ein paar Lösungsvorschläge, die aber alle nicht funktionieren - Kunststück, wenn der Ordner wirklich hart im PHP des Core drinsteht. Eine Möglichkeit gibt es aber doch: 

  1. plugin.tt_news.newsFiles {
  2.   stdWrap.substring = 78
  3.   stdWrap.innerWrap =<span class="news-file-icon"><img src="fileadmin/download-icons/ | "
  4.   stdWrap.HTMLparser = 1
  5.   stdWrap.HTMLparser.allowTags = a,img,span
  6.   stdWrap.HTMLparser.tags.img.fixAttrib.width.set = 32
  7.   stdWrap.HTMLparser.tags.img.fixAttrib.height.set = 32
  8. }

Das ist dreckig, funktioniert aber ... Habe ich hier gefunden: Changing appearance of tt_news file list icons (ganz unten). Die Zahl (78) muss angepasst werden an den wrap für das icon ... 

 

Kategorien: Typoscript  Kommentare 1

IF-Konstrutionen in Typoscript sind reichlich verzinkt und kosten viel Hirnschmalz, vor allem wenn mehrere Bedingungen miteinander verknüpft werden sollen. Mein Problem: 

Ein neu erstelltes Inhaltselement soll es ermöglichen, bequem und schnell einen Downloadlink mit einem Vorschau-Bild zu erstellen. Es soll folgende Features haben: 

  • die Vorschau-Bilder sollen nebeneinander floaten
  • die Vorschaubilder sollen unabhängig vom Frontend-User-Login zwar immer erscheinen, bei bei fehlendem Login oder falscher Benutzergruppe abgedimmt werden. 
  • die Download-Links auf den Vorschaubildern sollen nur erscheinen, wenn der Besucher in einer bestimmten Frontend-Usergruppe ist
  • zusätzlich soll der Redakteur mit einer Checkbox bestimmen können, dass ausnahmsweise der Downloadlink auch dann gezeigt wird, wenn der Besucher nicht eingeloggt ist. 

Das kann alles noch über Typoscript gelöst werden. Die Schritte: 

  1. Extension erstellen, die tt_content um mehrere Felder erweitert
  2. Die extTables.php so anpassen, dass im Backend die richtigen Felder gezeigt werden 
  3. die Extension um ein Typoscript-Setup erweitern, das den Output vornimmt. 

Und darin ist die oben erwähnte IF-Konstruktion erforderlich: der Link wird gerendert, wenn der Besucher in der Usergruppe 10 ist ODER wenn eine Checkbox durch den Redakteur angeklickt wurde. 

Der wesentliche Teil des Typoscripts sieht so aus:

  1. 10 = COA
  2. 10 {
  3.   10 = IMAGE
  4.   10.file {
  5.       import = uploads/myExt/
  6.       import.field = preview
  7.       import.listNum = 0
  8.       maxW = 224
  9.       maxH = 209
  10.   }
  11.   # Link aus einem Feld holen.
  12.   stdWrap.typolink.parameter = uploads/myExt/{field:myLink}
  13.   stdWrap.typolink.parameter.insertData = 1
  14.  
  15.   # ODER-Verknüpfungen gehen am einfachsten über cObject.
  16.   stdWrap.typolink.parameter.if {
  17.       isTrue.cObject = COA
  18.       isTrue.cObject {
  19.         10 = TEXT
  20.         10.data= TSFE:fe_user|user|usergroup
  21.         10.if {
  22.             # Prüfen, ob in einer bestimmten User-Gruppe
  23.             value.data = TSFE:fe_user|user|usergroup
  24.             isInList = 10
  25.         }
  26.        
  27.         20 = TEXT
  28.         20.field = checkbox
  29.       }
  30.   }
  31. }

Eine OR-Verknüpfung geht am einfachsten über ein cObject. Das Ergebnis des gesamten cObjects wird true, wenn eine Zeile true wird. Man kann also auf diese Art beliebig viele Fehler mit OR verbinden. Etwas kniffliger ist es, wenn man auf einen bestimmten Wert prüfen will und nicht nur auf true oder false, weil in diesem Fall eine weitere IF-Konstruktion eingeschachtelt werden muss. 

Ganz am Schluss darf natürlich nicht vergessen werden, mit Hilfe der Extension naw_securedl und einer .htaccess-Datei im Uploads-Ordner der Extension die Downloads gegen Deeplinks abzusichern.  

Kategorien: Typoscript  Kommentare 0

Update: 

Der Artikel ist mittlerweile etwas älter geworden. Für die TYPO3-Versionen des Viererzweigs stimmt er noch, aber nicht mehr für TYPO3 6.x. Hier ist es deutlich einfacher geworden, da irgendwann seit Version 4.6 oder 4.7 der Core prinzipiell Lightboxen vorsieht. Ich habe einen kleinen Artikel verfasst, der beschreibt  wie man eine Lightbox anlegen kann, ganz ohne Extension, und diese auch im RTE freischaltet: Lightbox im RTE (rtehtmlarea) ohne Extension

----

Prinzipiell ist es möglich, mit Hife der Extension rtelightbox eine Lightbox im RTE umzusetzen – in der Regel reicht es einfach, eine gängige Lightbox zu installieren und danach im Template folgende statische Typoscript-Templates einzubinden: 

  • das Template der jeweiligen Lightbox
  • Clickenlarge Rendering (rtehtmlarea)
  • RTE Lightbox (rtelightbox)

und zwar muss das Template von RTE Lightbox an letzter Stelle stehen. 

Leider hat die Extension aber einen kleinen Fehler: sie bindet das unbearbeitete Originalbild in die Lightbox ein, heisst, man erhält unter Umständen ein viel zu großes Bild in der Lightbox. 


[mehr]

Im RTE kann man horizontale Linien einfach mittels Blockstilen zur Verfügung stellen, die einem Absatz zugewiesen werden können. Diese Stile müssen allerdings vom Entwickler zur Verfügung gestellt werden. 

Dieser Absatz hat z. B. eine Linie oberhalb, die auf diese Art eingefügt wurde. 

Der RTE kann allerdings auch das HTML-Element <hr /> einsetzen, das unabhängig ist von den Blockelementen bzw. Absätzen.

Standardmäßig macht der RTE dabei leider einen Fehler: er packt die Linie in einen Absatz: <p><hr /></p>, was beim Validieren der Seite zu einem Fehler führt. Dieser Fehler stört allerdings die optische Darstellung nicht, wer also mit einem Validierungsfehler leben kann, muss nichts weiter unternehmen. 

Der Fehler kann eleminiert werden, wenn in das TypoScript-Template der Seite diese Zeilen eingefügt werden:

  1. lib.parseFunc_RTE.externalBlocks := addToList (hr)
  2. lib.parseFunc_RTE.externalBlocks.hr.stripNL = 1

Leider hat das aber andere negative Konsequenzen. Wenn ich z. B. hier so eine Linie einfüge:


werden die folgenden Absätze nicht mehr richtig geparst. So werden z. B. in meinen Code-Snippets der <pre>-Tag nicht mehr korrekt von  tx-vjrtecodesnippets erkannt und geparst: 

lib.parseFunc_RTE.externalBlocks := addToList (hr)
lib.parseFunc_RTE.externalBlocks.hr.stripNL = 1


Ausserdem werden offensichtlich Links nicht mehr geparst. Das ganze ist ein Problem, das offenbar seit 2007 im Bugtracker steht, aber bis heute nicht wirklich gelöst wurde (hier sollte eigentlich ein Link stehen, der aber nicht geparst wird. Er folgt im nächsten Absatz, den ich in ein neues Inhaltselement packe.) 

Fazit:

Ich empfehle die Verwendung von Blockstilen wie ganz oben beschrieben. Wenn man unbedingt <hr /> verwenden muss, so sollte der Workaround gründlich getestet werden. Wenn – wie bei mir hier – die Fehler nicht gefixt werden können, dann muss man wohl oder übel mit dem Syntaxfehler des RTE leben. Wie gesagt: die Darstellung ist ja korrekt, es gefällt nur den Validatoren nicht.

Und hier ist der Link in den Bugtracker nochmals ...

[Update]
Für den Bug gibt es seit kurzem einen Fix im Bugtracker von Stanislas Rolland, der das Problem behebt. (Vielen Dank an Stanislas!)

Also Patch einspielen, oder aufs nächste Update von TYPO3 warten, dann wirds wohl dabei sein. 

[Update 2]

In Version 4.4.6 funktioniert es jetzt. 

Kategorien: Tipps/Typoscript  Kommentare 0
Tags: rte