Monat: Oktober 2011

  • Bei TYPO3 den „div wrap csc-default“ um HTML Inhaltselemente entfernen

    Bei der Umsetzung eines CSS-Entwurfs einer Webseite in TYPO3 störte mich, dass TYPO3 seit der Version 4.3 um jedes Contentelement einen DIV Tag mit der Klasse csc-default legt.
    Normal stört dieser DIV auch nicht – nur wenn man Inhalt an eine Stelle des Templates ausgeben will, die von einem HTML Tag umgeben ist, das keine Blockelemente wie DIV erlaubt. Konkret wollte ich Adressinformationen in einem ADDRESS Tag ausgeben. Dabei entsteht eine ungültige Konstellation, in der ein DIV Blockelement in einem ADDRESS Element eingebettet ist.

    Im Web fand ich verschiedene Lösungsansätze:

    1. Im Template unter include static CSS Styled Content durch CSS Styled Content TYPO3 v4.2 ersetzen.
    2. Entfernen der Wraps um alle Contentelemente

      tt_content.stdWrap.innerWrap >

    Mit beiden Ansätzen konnte ich mich nicht so recht anfreunden. Einerseits will ich nicht immer und ewig TYPO3 4.2 kompatibele statische Templates verwenden, andererseits wollte ich nicht auf die Möglichkeit verzichten, Contentelemente mit Rahmen zu versehen. Diese Möglichkeit hat man nicht mehr, wenn man alle DIV Wraps um die Contentelemente entfernt. Ich habe nach einer Möglichkeit gesucht, selektiv nur bei HTML Inhaltselementen die DIV Wraps zu unterbinden.

    Auf www.typo3forum.net fand ich eine Typoscript Lösung, die genau das tut:

    tt_content.html.prefixComment >
    tt_content.stdWrap.innerWrap.override = |
    tt_content.stdWrap.innerWrap.override.if {
    equals = html
    value.field = CType
    }

  • Active Directory LDAPS Zugriff mit ldapsearch unter Linux

    Mit dem Befehl ldapsearch kann man LDAP-Abfragen an einen LDAP-Server stellen und damit Verzeichnisinformationen ermitteln. Da die meisten Active Directory keine anonyme Anfragen erlauben, benötigt man ein Dienstkonto im Active Directory, das die nötigen Rechte für die erforderlichen LDAP-Anfragen besitzt.

    Der grundsätzliche Syntax einer LDAP-Abfrage mit ldapsearch lautet:

    ldapsearch -x -D „USERNAME@ADDOMAIN“ -w „DIENSTKONTOPASSWORT“ -b „searchbase“ -H LDAPSERVERURL „FILTER“ PROPERTY1 PROPERTY2 PROPERTYN

    -x = Use simple authentication instead of SASL
    -D = Use the Distinguished Name binddn to bind to the LDAP directory
    -w = Use passwd as the password for simple authentication
    -b = Use searchbase as the starting point for the search instead of the default
    -H = Specify URI(s) referring to the ldap server(s)

    FILTER = Die eigentliche LDAP-Abfrage
    PROPERTYX = Propertys der Objekte, die im Ergebnis angezeigt werden sollen

    Beispiel:

    ldapsearch -x -D „ldap@domain.local“ -w „badladappasswort“ -b „dc=domain,dc=local“ -H „ldaps://dc.domain.local:636“ „(sn=USERNAME)“ description dn

    Obige Abfrage ermittelt die description und den dn des Accounts USERNAME.

    Um bei ldapsearch nicht immer alle Parameter für die Verbindung angeben zu müssen, kann man in seinem Homeverzeichnis eine Datei namens .ldaprc anlegen.

    #Beispielinhalt:
    URI ldaps://dc.domain.local:636 #Liste mit LDAP Servern (Parameter -H)
    BASE dc=domain,dc=local #Search Base DN (Parameter -b)
    BINDDN ldap@domain.local #Dienstkonto für die LDAP Verbindung (Parameter -D)
    TLS_CACERT /etc/ssl/certs/rootca.pem #CA Zertifikat der Root CA des DC SSL Zertifikats

    Um nicht jedes Mal das Passwort für die Verbindung LDAP-Verbindung angeben zu müssen, kann man eine Datei mit dem Passwort erstellen und diese bei ldapsearch mit der Option -y angeben.

    Die Passwortdatei muss man zwingend ohne Steuerzeichen erstellen. Dies gelingt z.B. mit dem Befehl echo und dem Parameter -n.

    echo -n DIENSTKONTOPASSWORT > .ldappasswd

    So sieht nun der verkürzte Syntax der ldapsearch Anfrage aus:

    ldapsearch -x -y ./.ldappasswd „(sn=USERNAME)“ description dn

  • TYPO3 Extension tt_news: Uhrzeit nicht anzeigen, wenn keine Zeit festgelegt wurde. Anzeige der Uhrzeit 00:00 unterdrücken.

    Bei einem Projekt sollte die TYPO3 Extension tt_news für die Anzeige von Terminen verwendet werden. Dabei sollte das Erstelldatum als Datum eines Termins missbraucht werden. Da aber nicht jeder Termin eine Uhrzeit hatte, kam es zu dem unschönen Effekt, dass bei einem Termin ohne Zeitangabe die Uhrzeit immer mit 00:00 angezeigt wurde. Eine Webrecherche ergab, dass schon verschiedene andere das gleiche Problem hatten, aber eine Lösung nicht zu finden war. Den Zeitplatzhalter generell aus dem Template zu entfernen war keine Lösung, da ja bei Terminen mit einer Zeitangabe die Uhrzeit angezeigt werden sollte. Die Lösung musste also folgendermaßen aussehen: Wenn bei einem Newsartikel (Termin) eine Uhrzeit festgelegt wird, soll diese angezeigt werden. Wenn keine Uhrzeit festgelegt wurde, bzw. die Uhrzeit auf 00:00 steht, dann soll keine Uhrzeit angezeigt werden.

    tt_news Anzeige mit Uhrzeit 00:00
    Anzeige mit Uhrzeit 00:00
    tt_news ohne Uhrzeit 00:00
    Anzeige ohne Uhrzeit 00:00

    Nach einigem Probieren erreichte ich mit folgenden Typoscript-Zeilen den gewünschten Effekt.

    #List Anzeige
    plugin.tt_news.displayList.time_stdWrap.strftime = %H:%M Uhr
    plugin.tt_news.displayList.time_stdWrap.wrap = – |
    plugin.tt_news.displayList.time_stdWrap.if.value.field = datetime
    plugin.tt_news.displayList.time_stdWrap.if.value.strftime = %H:%M
    plugin.tt_news.displayList.time_stdWrap.if.equals = 00:00
    plugin.tt_news.displayList.time_stdWrap.if.negate = 1
    #Latest Anzeige
    plugin.tt_news.displayLatest.time_stdWrap.strftime = %H:%M Uhr
    plugin.tt_news.displayLatest.time_stdWrap.wrap = – |
    plugin.tt_news.displayLatest.time_stdWrap.if.value.field = datetime
    plugin.tt_news.displayLatest.time_stdWrap.if.value.strftime = %H:%M
    plugin.tt_news.displayLatest.time_stdWrap.if.equals = 00:00
    plugin.tt_news.displayLatest.time_stdWrap.if.negate = 1