blog.bartlweb - a technologist's external brain

Thema: TYPO3

Größe von Bildern in einer Typo3 Extension ändern

Um in einer Typo3-Extension die Größe einer Grafik zu verändern (resize) kann man sich des Typo3-Framworks und ImageMagick zu nutze machen. Dazu erstellt man ein Konfigurationsarray, das die selben Möglichkeiten wie aus TypoScript bekannt, bietet und erstellt dann ein Typo3-Objekt vom Typ "IMG_RESOURCE". Als Rückgabe erhält man den Pfad auf das neu generierte Bild.

$imgsrc = 'uploads/pics/'.$image;
 
$img = array();
$img['file'] = $imgsrc;
$img['file.']['maxW'] = $this->conf['maxWidth'];
$img['file.']['maxH'] = $this->conf['maxHeight'];
 
$imagepath = $this->cObj->IMG_RESOURCE($img);

Der folgende Code verändert nicht nur die Größe des Bildes, sondern passt dieses auch an eine vorgegebene Größe an (crop).

$imgsrc = 'uploads/pics/'.$image;
 
$img = array();
$img['file'] = 'GIFBUILDER';
$img['file.']['XY'] = $this->conf['imgWidth'] . ',' . $this->conf['imgHeight'];
$img['file.']['10'] = 'IMAGE';                  
$img['file.']['10.']['file'] = $imgsrc;
$img['file.']['10.']['file.']['width'] = $this->conf['imgWidth'] . 'c';
$img['file.']['10.']['file.']['height'] = $this->conf['imgHeight'] . 'c';
 
$imagepath = $this->cObj->IMG_RESOURCE($img);

Typo3-interner Spamschutz für E-Mailadressen

Typo3 bietet bereits eine integrierte auf JavaScript basierte Lösung um E-Mailadressen auf der Webseite vor Spamrobots und Crawlern zu schützen.

Dazu muss dem TypoScript-Setup nur folgendes Codesnippet hinzugefügt werden:

config.spamProtectEmailAddresses = 2
config.spamProtectEmailAddresses_atSubst = (a)

spamProtectEmailAddresses kann einen Wert zwischen -5 und 5 haben und gibt dabei die ASCII-Zeichenverschiebung an.

Achtung: removeDefaultJS darf nicht auf 1 stehen (external oder 0), da ansonsten das benötigte JavaScript nicht eingebunde wird

DirectMail und tt_address Empfängerlisten manuell importieren

Beim manuellen importieren von Adressdaten in die Datenbanktabelle von tt_address für die Verwendung in Zusammenhang mit DirectMail muss umbedingt das Feld module_sys_dmail_html auf den Wert 1 gesetzt werden, da DirectMail ansonsten keine HTML-E-Mails an diese Empfänger schickt.

TemplaVoila Content von einer Seite auf allen anderen anzeigen lassen

Gerade bei Webseites mit Informationsboxen gibt es oft das Verlangen diese Boxen so lange auf einer Seite nicht anders definiert auf allen Seiten gleich darzustellen. Diesem Problem schafft die Extension "KB TV Content Slide" Abhilfe. Dazu muss lediglich die Extension installiert werden und die Datenstruktur des TemplaVoila-Templates angepasst werden.

Grundsätzlich wird der auf der Startseite (Root-Seite des Baumes) definierte Content der konfigurierten Spalte nach unten hin weitervererbt und auf jeder Unterseite angezeigt. Soll jetzt auf einer Seite ein anderer Content angezeigt werden, so muss dort nur anderer Content angelegt werden, denn sobald Content erkannt wird, wird dieser anstelle der von der Root-Seite verwendet.

TypoScript Conditions für die Seitenauswahl

Per Conditions lässt sich in TypoScript so etwas wie if-else realisieren. Dabei gibt es z.B. das Szenario das Typoscript nur auf bestimmten Seiten ausgeführt werden soll um z.b.: eine Navigation nur auf bestimmten Seiten anzeigen zu lassen.

TypoScript für die Seite mit UID x und den darunter liegenden

[PIDinRootline = x]
  ...
[global]

TypoScript nur für die Seite x

[globalVar = TSFE:id=x]
  ...
[global]

aktuelles Datum per TypoScript einbinden

Gerade für Copyright Informationen oder das Versanddatum eines Newsletters ist es komfortabel sich das aktuelle Datum per TypoScript ausgeben zu lassen.

Datum

date = TEXT
date.data = date:U
# date like 10.12.2008
date.strftime = %d.%m.%Y

Copyright

copyright = TEXT
copyright.data = date:U
copyright.strftime = %Y
copyright.noTrimWrap = |(c) | www.domain.com|

strftime

Die Parametrisierung von strftime entspricht den Konvertierungen der PHP-strftime()-Funktion: http://de.php.net/strftime

Link auf eine interne Seite per TypoScript erstellen

Typo3 bietet per TypoScript die Möglichkeit Links auf interne Seiten zu erstellen die dann auch automatisch in RealUrls konvertiert werden oder bei ausblenden oder löschen der betreffenden Seite deaktiviert werden.

einfacher Link

link = HTML
link {
  value = Link
  value.typolink.parameter = 1
  value.typolink.ATagParams = title="mein Link"
  stdWrap.wrap = <div id="link"> | </div>
}

parameter: Geben Sie hier die ID der Zielseite an
ATagParams: hier können Sie dem a-Tag html-Attribute hinzufügen

Link mit Parameter

link = HTML
link{
  value = Link with referer
  value.typolink.parameter = 64
  value.typolink.ATagParams = title="interner Link"
 
  #add parameter referer to link, with link to the current page
  value.typolink.additionalParams.data = getIndpEnv: TYPO3_REQUEST_URL
  value.typolink.additionalParams.wrap = &referer=|
  value.typolink.additionalParams.rawUrlEncode = 1
 
  stdWrap.wrap = <div id="link">|</div>
}

in Extension ID des aktuellen Content-Elements auslesen

Das Typo3-Framework bietet die Möglichkeit in einer Extension mittels PHP die ID des aktuellen Content-Elements (Content-Elemnt der Extension) auszulesen.

$this->cObj->data['uid']

eigenen Kommentar in den Typo3-Header einfügen

Eine hübsche Variante sich im HTML-Code einer Typo3-Umgebung zu verewigen, ist die Erweiterung des Standardkommentars im HTML-Header.

page.config {
  headerComment (
*********************************************************************************

                    Website by xxxxx - www.domain.com

*********************************************************************************
  )
}

TypoScript-Beispiele für diverse Menüs

Hier finden Sie Beispiele für verschiedene mit Typo3 realisierte Menüs.

Breadcrumb Menü

lib.breadcrumb = HMENU
lib.breadcrumb.special = rootline lib.breadcrumb.1 = TMENU
 
lib.breadcrumb.1.NO {
  ATagParams = class="internal_link"
  ATagTitle.field = abstract // description // subtitle
  stdWrap.htmlSpecialChars = 1
  linkWrap = | <span>&nbsp;&gt;&nbsp;</span>
}
 
lib.breadcrumb.1.CUR = 1
lib.breadcrumb.1.CUR {
  doNotLinkIt = 1
  linkWrap = <span>|</span>
  stdWrap.htmlSpecialChars = 1
}

vertikales Menü - Metanavigation

lib.meta = HMENU
lib.meta.special = list
lib.meta.special.value = 35, 38, 40, 36
lib.meta.1 = TMENU
lib.meta.1.noBlur = 1
lib.meta.1.NO {
  ATagParams =
  linkWrap = |<span>&nbsp;&#124;&nbsp;</span> |*| |<span>&nbsp;&#124;&nbsp;</span> |*| |
}
lib.meta.stdWrap.wrap = <div class="metanavigation">|</div>

horizontales Menü 1

lib.subnavigation = COA
lib.subnavigation.wrap=<div>|</div>
 
lib.subnavigation.5 = HTML
lib.subnavigation.5.value=<div></div>
 
lib.subnavigation.10 = TEXT
lib.subnavigation.10 {
  data = leveltitle : 1
  wrap = <h2>|</h2>
  htmlSpecialChars = 1
}
 
lib.subnavigation.20 = HMENU
lib.subnavigation.20.entryLevel = 1
lib.subnavigation.20.1 = TMENU
lib.subnavigation.20.1.noBlur = 1
lib.subnavigation.20.1 {
  noBlur = 1
  expAll = 1
  wrap = <ul id="subnavigation">|</ul>
 
  NO = 1
  NO {
    ATagTitle.field = abstract // description // subtitle
    allWrap = <li>|</li>
    stdWrap.htmlSpecialChars = 1
  }
 
  ACT = 1
  ACT < .NO
  ACT {
    ATagParams =
    stdWrap.htmlSpecialChars = 1
  }
  
  IFSUB = 1
  IFSUB < .NO
  IFSUB {
    allWrap = <li>|
    stdWrap.htmlSpecialChars = 1
  }
  
  ACTIFSUB = 1
  ACTIFSUB < .ACT
  ACTIFSUB {
    allWrap = <li>|
    stdWrap.htmlSpecialChars = 1
  }
}
 
lib.subnavigation.20.2 = TMENU
lib.subnavigation.20.2.noBlur = 1
lib.subnavigation.20.2 {
  wrap = <ul>|</ul></li>
  
  NO = 1
  NO {
    ATagTitle.field = abstract // description // subtitle
    allWrap = <li>|</li>
    stdWrap.htmlSpecialChars = 1
  }
  
  ACT = 1
  ACT < .NO
  ACT {
      ATagParams =
  }
}
 
lib.subnavigation.25 = HTML
lib.subnavigation.25.value=<div></div>

horizontales Menü 2

lib.mainnavigation = HMENU
lib.mainnavigation.special = list
lib.mainnavigation.special.value = 8,7,6,5,4,3,94
 
lib.mainnavigation.1 = TMENU
lib.mainnavigation.1.noBlur = 1
lib.mainnavigation.1.wrap = <ul>|</ul>
lib.mainnavigation.1 {
  expAll = 1
  
  NO = 1
  NO {
    linkWrap = <li>| || <li>| || <li>| || <li>| || <li>|
    ATagTitle.field = abstract // description // subtitle
    stdWrap.htmlSpecialChars = 1
    stdWrap.wrap= <span>|</span>
  }
  
  ACT < .NO
  ACT = 1
  ACT {
   linkWrap = <li id="current">| || <li id="current">| || <li id="current">| || <li id="current">| || <li id="current">|
  }
}
 
lib.mainnavigation.2 = TMENU
lib.mainnavigation.2.noBlur = 1
lib.mainnavigation.2.wrap = <ul>|</ul></li>
lib.mainnavigation.2 {
  expAll = 1
 
  NO = 1
  NO {
    ATagTitle.field = abstract // description // subtitle
    linkWrap = <li>|</li>
    stdWrap.htmlSpecialChars = 1
  }
}