blog.bartlweb - a technologist's external brain

Thema: TYPO3

die Wrap-Option von Typo3

Typo3 kennt mehrere Arten von Wrap (z.b. stdWrap, linkWrap, usw.) die je nach Object-Typ verfügbar sind.

Allen liegt allerdings die Funktionsweise des wrappens mittels Pipe-Symbol (|) und den Split Options zu Grunde.

einfacher Wrap

x = TEXT
x.value = test
x.wrap = <span> | </span>
<span>test</span>

Wrappen ohne Leerzeichen zu verlieren

x = TEXT
x.value = test
x.noTrimWrap = <span> | </span>
<span> test </span>

Splitoptions

Splitoptions sind vor allem für Menüs geeignet um die verschiedenen Menüpunkte unterschiedlich zu wrappen.

6 Menüpunkte werden bei folgenden Beispielen wie angegeben gewrappt:

<span> | </span> || <p> | </p>

Die Menüpunkte werden wiederholend nach dem obigen Muster gewrappt.

“Toggle HTML Source” im RTE einblenden oder ausblenden

Der Typo3-RichText-Editor bietet standardmäßig die Möglichkeit zwischen Standardansicht und HTML-Code zu wechseln.

Um den so genannten "Toggle HTML Source"-Button ein bzw. auszublenden muss in der RTE-Konfiguration das Schlüsselwort "chMode" von der Konfiguration "showButton" nach "hideButton" verschoben werden.

showButton = chMode
hideButton = chMode

BaseURL per TypoScript dynamisch setzen

Gerade in Zusammenhang mit RealUrl muss in Typo3 per "config.baseURL" die BaseURL für die aktuelle Seite gesetzt werden. Jetzt kommt es aber des öfteren vor, dass eine Seite über verschiedene Domains oder auch per HTTPS erreichbar sein soll und hier greift das untere TypoScript-Snipplet das dann automatisch für die jeweilige Domain und das jeweilige Protokoll die richtige BaseURL setzt.

Constants

#
# set baseurl depending on host - part 1
#
 
protocol = http
[globalString = IENV:TYPO3_SSL=1]
  protocol = https
[global]
 
host = domain.com
[globalString = IENV:HTTP_HOST=www.domain.com]
  host = www.domain.com
[globalString = IENV:HTTP_HOST=seconddomain.com]
  host = seconddomain.com
[globalString = IENV:HTTP_HOST=www.seconddomain.com]
  host = www.seconddomain.com
[global]

Setup

#
# set baseurl depending on host - part 2
#
 
config.baseURL= {$protocol}://{$host}/

internes Linkmanagement von Typo3

Der Vorteil von Typo3 und diversen CMS im Allgemeinen ist, dass gerade bei internen Verlinkungen viel Arbeit erspart bleibt.

Deaktiviert oder löscht man eine Seite so werden auch automatisch alle Links die per TypoScript oder im RTE gesetzt wurden deaktiviert.

Links in von Typo3 generierten E-Mails verkürzen

Links in von Typo3 generierten E-Mails können in Typo3 global formatiert werden. Dabei können lange Links in der Datenbank gespeichert und der Anwender sieht im E-Mail anstatt eines langen Links nur einen kurzen Link inkl. md5-Hash.

config.notification_email_urlmode = all

Parameter

  • leer = Links werden nicht verändert
  • 76 = Links, die länger als 76 Zeichen sind, werden verkürzt und in der Datenbank gespeichert
  • all = Alle Links werden verkürzt un in der Datenbank gespeichert

Indexed Search um eine Fehlermeldung erweitern

Werden bei Indexed Search weniger als 2 Zeichen eingegeben, gibt die Extension keine Fehlermeldung zurück, sondern liefert einfach keine Suchergebnisse. Um dies abzufangen ist eine kleine Änderung in der Extension notwendig:

Extension bearbeiten

Dazu die Datei typo3/sysext/indexed_search/pi/class.tx_indexedsearch.php bearbeiten und ab Zeile 180 den Code in folgendes abändern:

// Do search:
// If there were any search words entered...
if (is_array($this->sWArr)) {
  $content = $this->doSearch($this->sWArr);
  if($content == '')
  {
    $content = $this->conf['errormsg'];
  }
}
else
{
  $content = $this->conf['errormsg'];
}

TypoScript-Konfiguration

Die Konfiguration dann um den Wert "errormsg" erweitern und z.B. wie folgt konfigurieren um keinen Link auf die erweiterte Suche und keine Regeln auszugeben:

plugin.tx_indexedsearch {
  _CSS_DEFAULT_STYLE >
 
  templateFile = fileadmin/indexed_search_template.htm
  errormsg = <h1>Fehler</h1><p>Bitte geben Sie nur Begriffe mit mindestens zwei Zeichen ein.</div>
 
  show.advancedSearchLink = 0
  show.rules = 0
}

Typo3 Content und xHTML Ausgabe anpassen

Standardmäßig ist die Ausgabe von Typo3 über CSS-Styled-Content etwas überladen und oft mit unnötigen Zusätzen versehen. Diese Standardkonfiguration räumt die Ausgabe auf und liefert damit einen sauberen HTML-Code.

CSS-Styled-Content anpassen

#
# configure css_styled_content
#

# remove standard css
plugin.tx_cssstyledcontent._CSS_DEFAULT_STYLE >

# remove class from p-tags
lib.parseFunc_RTE {
  nonTypoTagStdWrap.encapsLines {
    addAttributes.P.class =
  }
}

lib.stdheader { 
  # remove div-tags around headlines
  stdWrap.dataWrap =
 
  # set german date format
  5.date = j.n.Y

  # remove class from hx-tags
  10.1.fontTag = <h1{register:headerStyle}>|</h1>
  10.2.fontTag = <h2{register:headerStyle}>|</h2>
  10.3.fontTag = <h3{register:headerStyle}>|</h3>
  10.4.fontTag = <h4{register:headerStyle}>|</h4>
  10.5.fontTag = <h5{register:headerStyle}>|</h5>
}

tt-content Ausgabe anpassen

#
# configure tt_content output
#

tt_content {
  # remove clear.gif
  stdWrap.space=0

Ausgabe des Seitentitels in Typo3 anpassen

Typo3 generiert standardmäßig automatisch den Seitentitel aus dem Titel der aufgerufenen Seite. Um den Titel seinen eigenen Vorstellungen anzupassen ist ein wenig TypoScript erforderlich.

config-Array anpassen

config {
  #disable page title, will be written manually to header
  noPageTitle = 1
}

headerData anpassen

# configure pagetitle
page.headerData {
  10 = TEXT
  10.field = subtitle // title
  10.htmlSpecialChars = 1
  10.wrap = <title>|&nbsp;- www.domain.com</title>
}

eigene Textkonvertierungsfunktion in die Typo3-Ausgabe einbauen

Es ist möglich eine eigene PHP-Funktion in Typo3 einzubinden die vor der Ausgabe des Contents noch auf diesen angewendet wird, so ist es z.B. möglich eine Plaintext-Version der Webseite für einen Newsletter anzubieten.

TypoScript

includeLibs.convert_script = fileadmin/convert.php
....
10.text.postUserFunc = user_convert->plaintext

PHP

<?php
class user_convert {
  function plaintext($content,$conf) {
    //replace br with newline
    $text = preg_replace('/\<br(\s*)?\/?\> /i', "\n", $content);

    // replace html tags
    $text = preg_replace('@<[\/\!]*?[^<>]*?>@si','', $text);
        
    // replace non-breaking space
    $text = str_replace('&nbsp;', ' ', $text);
        
    // linebreak after x characters
    $text = wordwrap($text, 76);
        
    //remove empty lines or spaces at the beginning of the text
    $text = trim($text);