body-Tag mit eindeutiger ID versehen

Über Sinn oder Unsinn lässt sich streiten. Aber es besteht die Möglichkeit mit relativ einfachen Mitteln dem body-Tag eine eindeutige ID mitzugeben. Wenn schnell mal eine ganz bestimmte Seite gestaltungstechnisch angepasst werden muss, lässt sich das hierüber per CSS relativ einfach und leicht nachvollziehbar ansteuern.

page.bodyTagCObject = HTML
page.bodyTagCObject.value.field = uid
page.bodyTagCObject.value.wrap = body id="pid|"

WICHTIG: Die Angabe im wrap muss von spitzen Klammern < > umgeben, also ein vollständiger body-Tag aufgebaut werden. Leider wird die Anzeige bei mir gerade unterdrückt. Daher nachträglich dieser Hinweis.

Sicher gibt es noch andere Alternativen, aber ich glaube ich werde mir angewöhnen meine Projekte zukünftig um diesen kleinen Schnipsel zu ergänzen.

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Einstellungen für Redakteure (Teil 3)

Zu den Aufgaben von Redakteuren gehört u.a. auch das Bereitstellen von Links im Fließtext. Gelegentlich müssen Links allerdings auch Parameter mitführen, bspw. für das Vorbefüllen bestimmter Felder in einem Formular.

Folgende Codezeile ergänzt das ‘Link-Popup’ im RTE um ein Parameter-Feld:

RTE.default.buttons.link.queryParametersSelector.enabled = 1

Eingetragen wird die Zeile im TSConfig-Bereich der root-Seiten-Eigenschaften.

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

tt_news – Artikel auf gleicher Seite doppelt anzeigen

Manchmal hat man einen gewöhnlichen News-Ticker im Content-Bereich im Einsatz, benötigt aber bspw. auf der Startseite einen zusätzlichen Termin-Anzeiger in einer beliebigen Teaser-Spalte. Das Pflegen von Terminen funktioniert hervorragend mit tt_news. Standardmäßig ist tt_news allerdings so konfiguriert, dass ein News-Beitrag nicht mehrmals auf einer Seite vertreten sein kann. Möchte man also einen Termin hinterlegen, der gleichzeitig auch Bestandteil des Standard-News-Tickers im Content-Bereich ist, muss man folgende Einstellung per TS (Template-Setup) vornehmen:

plugin.tt_news.excludeAlreadyDisplayedNews = 0
Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Extension Linkhandler

Extension Linkhandler

Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Powermail: style ergänzen

Die Styles zu den einzelnen Formularfeldern lassen sich ergänzen. Per Default sind style1, style2 und style3 hinterlegt. Trägt man im TS-Config-Bereich der root-Seite (Seiteneigenschaften bearbeiten) folgendes Script ein, erweitert man die Liste:

TCEFORM {
  # change CSS dropdown for fieldset
  tx_powermail_fieldsets {
    class {
      addItems.style4 = style4
      addItems.style5 = style5
    }
  }

  # Use the same settings for fields
  tx_powermail_fields {
    class < TCEFORM.tx_powermail_fieldsets.class
  }
}
Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

Linktexte im HMENU wrappen

Manchmal kann man sich Dinge die man schon 1000 Mal gebraucht hat einfach nicht merken. Mir gehts mit den TypoScript-Wraps so. Immer wieder quäl ich Google für die einfachsten Dinge. Ziel ist es den Span-Tag um den Link-Text zu kriegen:

  • Linktext
  • Das lässt sich folgendermaßen lösen:

    1.NO.ATagBeforeWrap = 1
    1.NO.stdWrap.wrap = |
    
    Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

    tt_news: Artikel nur dann zur Detailseite verlinken, wenn Inhalt vorhanden

    Hierzu müssen im News-Template die Verlinkungen zuerst entfernt werden, um sie später per TypoScript wieder einbinden zu können. Abhängig davon welcher Template-Subpart verwendet wird, enternt man unter ###TEMPLATE_LATEST### die Marker , die den ###NEWS_TITLE### wrappen, sowie die Zeile:

    
    

    Anschließend, wie oben bereits erwähnt, müssen im Root-TS-Template folgende Anpassungen erfolgen:

    ### tt_news
    temp.newsMenuLinkParams = COA
    temp.newsMenuLinkParams {
         10 = TEXT
         10.field = uid
         10.wrap = &tx_ttnews[tt_news]=|
    }
    
    plugin.tt_news {
      displayLatest.subheader_stdWrap {
        append = TEXT
        append.data = register:newsMoreLink
        append.wrap = |
        append.if.isTrue.field = bodytext
      }
    
      # Verlinkung der Überschrift
      displayLatest.title_stdWrap {
        # XX durch die passende der ID der Single-View-Seite ersetzen:
        typolink.parameter = XX
        typolink.additionalParams.cObject < temp.newsMenuLinkParams
        typolink.parameter.if.isTrue.field = bodytext
      }
    }
    
    Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

    RTE Buttons anpassen

    Der RTE lässt sich über das Feld TSConfig in den Seiteneingeschaften konfigurieren. Möchte man bspw. einen Button für die Trennlinie hinzufügen geht das über folgenden Code:

    RTE.default.showButtons := addToList(line)
    

    Nachfolgende Codezeile entfernt alle Buttons des RTE und zeigt nur die aufgeführten an. In diesem Fall also nur die Trennlinie:

    RTE.default.showButtons = line
    

    Weiterführende Informationen finden sich im Typo3-Blog von Lina Wolf:
    http://typo3-blog.net/tutorials/news/unterstreichung-rte-aktivieren.html

    Veröffentlicht unter TSConfig Snippets | Hinterlasse einen Kommentar

    Powermail: Absendername anpassen

    Standardmäßig wird als Absendername bei den Powermail-Infomails ‘powermail’ ausgegeben. Den E-Mail-Versender kann man über folgende Codezeile im Setup seinen Vorstellungen entsprechend anpassen:

    plugin.tx_powermail_pi1.email.recipient_mail.sender.name.value = Absender Name
    
    Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

    RealURL: Startseite ohne /startseite bzw. start.html

    Um hinsichtlich der Suchmaschinenoptimierung doppelten Kontent zu unterbinden ist es ratsam die Startseite einer Internetpräsenz direkt auf den root zu verweisen. Statt www.domain.de/startseite (o.ä) also www.domain.de/. Ist RealURL im Einsatz kann man in den Seiteneigenschaften der Startseite einfach das Feld ‘Speaking URL path segment:’ mit einem ‘/’ belegen.

    Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

    Keine Verbindung zum Typo3 Online-Repository

    Gerade hatte ich bei einer Neuinstallation das Problem (4.5.2), dass ich im Backend die Sprache nicht ändern konnte und mir bei der Extension-Suche (import extensions) keine Ergebnisse präsentiert wurden. Erfolgreich beheben konnte ich das Problem durch das Aktivieren von cURL im InstallTool.

    Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

    Dateiverweise erweitern

    Das Seiteninhaltselement ‘Dateiverweise’ ist in der Lage 10 Dokumente aufzunehmen. Soll diese Zahl erhöht werden muss die Datei typo3conf/extTables.php um folgende Zeile ergänzt werden:

    $TCA['tt_content']['columns']['media']['config']['maxitems'] = 1000;
    
    Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

    Einstellungen für Redakteure (Teil 2)

    Um Redakteuren die Möglichkeit einzuräumen den Cache zu leeren, kann folgender Code ins TSConfig der Backendbenutzergruppe eingetragen werden:

    options.clearCache.pages = 1
    options.clearCache.all = 1
    
    Veröffentlicht unter TSConfig Snippets | Hinterlasse einen Kommentar

    Aktive Seite aus Untermenü exkluden

    Folgender Schnipsel unterbindet die Anzeige der aktiven Seite in einem Menü. Grundsätzlich würde ich diese Option für Menüs nie in Betracht ziehen. Der Benutzer sollte immer sehen können, wo er sich gerade befindet. Kürzlich ging es aber darum auf einer Fallbeispiel-Seite eine Übersicht aller anderen Fallbeispiele der jeweiligen Kategorie anzeigen zu lassen. Hierfür lohnt sich diese Überlegung dann doch.

    tt_content.menu.20.1.excludeUidList = current
    
    Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

    Typo3 upgraden

    Ausführliche Informationen zum generellen upgraden von Typo3-Versionen finden sich hier:
    http://wiki.typo3.org/Upgrade

    Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

    Bildergalerie für Redakteure mit Standard-Typo3-Bordmitteln

    Extensions bedeuten immer von dem Redakteur zu erwarten, dass er eine weitere Sache verinnerlichen und administrieren können muss. Aktuell war es uns für die Betreuung eines Kunden wichtig, ihm die Möglichkeit zu bieten mit den Typo3-Standard-Bordmitteln ganz leicht Bildergalerien einstellen zu können.

    Zwar verwenden wir für die Anzeige in einer Lightbox die PMKShadowbox, allerdings wird diese administrativ lediglich bereitgestellt und der Redakteur kommt hiermit nicht in Berührung. Wichtig ist nur, dass er bei den Bildern die ‘Klick-Vergrößerung’ aktiviert, was allerdings auch zum Typo3-Standard gehört und durch die PMKShadowbox lediglich überschrieben wird.

    Wie jedes Inhaltselment werden auch die Bilder von Typo3 aus mit sämtlichen hilfreichen Wraps und CSS-Klassen bestückt. Es fehlt allerdings die Möglichkeit jedes Bild einzeln anzusprechen um bspw. nur das erste Bild anzuzeigen und die übrigen auf display:none zu setzen. Über folgenden TS-Eintrag kann jedem Bild eine individuelle Klasse mitgeliefert werden kann:

    tt_content.image.20.1.params = class="images_{field:uid}_{register:IMAGE_NUM}"
    tt_content.image.20.1.params.insertData = 1
    

    Ich wollte jedoch nicht nur das Bild sondern auch die umwrappenden DIVs auf display:none setzen. Stattdessen also folgendes TS:

    tt_content.image.20.rendering.ul.imageRowStdWrap.dataWrap =
    
      |
    tt_content.image.20.rendering.ul.imageLastRowStdWrap.dataWrap =
      |

    Jetzt kann wie folgt per CSS nur das erste Bild angesprochen werden:

    #teaser div.csc-textpic-imagerow { display:none; }
    #teaser div.img-0 { display:block; }
    

    Viel Spaß beim nachbasteln und bei Fragen oder Bemerkungen gerne kommentieren.

    Veröffentlicht unter Allgemein | 3 Kommentare

    optionSplit

    Ausführliche Informationen zum optionSplit-Verhalten im TS-Bereich finden sich hier:
    http://wiki.typo3.org/De:TSref/optionSplit

    Veröffentlicht unter Allgemein | Hinterlasse einen Kommentar

    Powermail und der Dateiuploadfolder

    Kürzlich hatte ich mit einem hartnäckigen Powermail-Problem zu kämpfen. Für die Bereitstellung eines Formulars mit Upload-Feldern kann man ein Verzeichnis deklarieren, in dem angehängte Dateien abgelegt werden. Das geht über folgende Konstante:

    plugin.powermail.upload.folder = /fileadmin/user_upload/vkb-uploads/
    

    Nutzt man zur Abfrage und Verwaltung der Mails das schicke und übersichtliche BackendPlugin ‘Powermail’ (per default im Hauptmenü links unter Web), stimmt die Pfadangabe der verknüpften Dateien mit der eigenen Angabe aber nicht überein. Stattdessen ist als Pfad zur Datei der Standard festgelegt: uploads/tx_powermail/files/. Da in diesem natürlich keine Datei gefunden wird, läuft die Verknüpfung auf einen Fehler und ich kann die Anhänge nicht komfortabel und zugeordnet direkt anwählen.

    Die Lösung habe ich in der Datei pageTSconfig.txt gefunden (im Root der Powermail-Extension), die wie folgt aussieht:

    # ***************************************************************************************
    # Page TSconfig for "powermail"
    #
    # Prfills tx_powermail_fields.formtype with "text"
    # ***************************************************************************************
    
    TCAdefaults.tx_powermail_fields {
    	formtype = text
    }
    tx_powermail_mod1.config {
        list {
            datetimeFormat = d.m.Y H:i
            dateFormat = d.m.Y
            timeFormat = H:i
            uploadFolder = uploads/tx_powermail/files/
        }
        export {
            datetimeFormat = d.m.Y H:i
            dateFormat = d.m.Y
            timeFormat = H:i
            uploadFolder = uploads/tx_powermail/files/
        }
    }
    

    Über die Seiteneigenschaften des SysOrdners der die Mails beinhaltet kann nun der TSConfig-Wert entsprechend überschrieben werden. In meinem Fall musste ich dort lediglich folgenden Codeschnipsel hinterlegen:

    tx_powermail_mod1.config {
        list {
            uploadFolder = mein/pfad/zu/den/dateianhängen/
        }
    }
    
    Veröffentlicht unter TSConfig Snippets | 2 Kommentare

    Einstellungen für Redakteure (Teil 1)

    Es empfiehlt sich bestimmte Bereiche Redakteuren vorzuenthalten. Vorerst nur ein kurzer Schnipsel, mit dem festgelegt wird welche Inhaltsspalten (LINKS, NORMAL, RECHTS, RAND) im Backend zu sehen sein sollen.

    Die Inhaltsspalten sind wie folgt nummeriert:
    0 = NORMAL, 1 = LINKS, 2 = RECHTS, 3 = RAND

    # Nur die Spalte NORMAL für Redakteure einblenden
    mod.SHARED.colPos_list = 0
    

    Ich halte es für sinnvoll diese Einstellung im TSConfig der entsprechenden Benutzergruppe zu hinterlegen. So besteht die Möglichkeit anderen Benutzergruppen zusätzliche Inhaltsspalten einzublenden, falls diese benötigt werden. Alternativ kann man die Einstellung auch über die Seiten-TSConfig vornehmen, dort zieht sie IMO allerdings für alle Benutzer (ungetestet), Admins inbegriffen – und als Admin möchte ich immer alles sehen.

    Veröffentlicht unter TSConfig Snippets | Hinterlasse einen Kommentar

    RTE in eigener Extension verwenden

    Ich hatte gerade das Problem, dass in einer selbst erstellten Extension die Formatierung eines RTE-Textfeldes nicht dem Standard entsprach. P-Tags fehlten, ‘a-href’s wurden zu ‘link’s, keine spam-geschützten Email-Adressen, usw. Die Formatierungen sollten eigentlich den Standard-Formatierungen entsprechen, die auch bei normalen Text-Elementen verwendet werden.

    Hierzu muss sichergestellt sein, dass in der tca.php (Extension-Root) folgendes eingestellt ist:

    rte_transform[mode=ts_css]
    

    Im Quelltext der Extension verwendet man dann anstatt

    $row['rtetextfeld']
    

    folgendes:

    $this->pi_RTEcssText($row['rtetextfeld'])
    

    ‘rtetextfeld’ ist entsprechend durch den eigenen Feldnamen zu ersetzen.

    Veröffentlicht unter Extension Snippets | Hinterlasse einen Kommentar

    Elternseite in eigener Extension verlinken

    In der pages-Tabelle sind alle im Typo3-Projekt befindlichen Seiten hinterlegt. Das Feld UID ist die eindeutige ID der jeweiligen Seite. Im Feld PID ist, falls vorhanden, die ID der Elternseite enthalten. Zum Auslesen der Werte der Pages-Tabelle ist keine zweizeilige SQL-Abfrage erforderlich. Alternativ kann man das TSFE-Objekt verwenden:

        $elternpid = $GLOBALS['TSFE']->page['pid'];
        $link = $this->pi_getPageLink($elternpid);
        < zurück zur Übersicht
    
    Veröffentlicht unter Extension Snippets | Hinterlasse einen Kommentar

    FE Login: (deutsche) Texte In der System-Extension anpassen

    Die ehemalige newloginbox gehört seit einigen Typo3-Versionen zum Standard, heißt jetzt felogin, wird als Systemextension mitgeliefert und kann im Erweiterungsmanager unter ‘Erweiterungen installieren’ aktiviert werden.

    Um die Loginbox in deutscher Sprache verwenden zu können, muss via Translation-Handling im Erweiterungsmanager die deutsche Sprache installiert sein. Weiterhin ist wichtig, dass die selbst eingetragenen Texte im Plugin unter ‘Meldungen’ vor allen anderen Einstellungen greifen. Lässt man alle Felder im Reiter ‘Meldungen’ leer, werden die Standardwerte aus der de.locallang.xml verwendet. Die Sprachdateien zur FELogin-Extension finden sich in den Ordnern typo3conf/l10n/de/felogin/ und typo3conf/l10n/de/felogin/pi1/

    Diese aber aus Gründen der Updateproblematik nicht manuell sondern via TS überschreiben. Folgende Codeschnipsel in der Setup.TS ändert bspw. die Statusanzeige in der ‘Passwort Vergessen?’-Ansicht:

    plugin.tx_felogin_pi1._LOCAL_LANG.de.ll_forgot_message (
        Bitte geben Sie die E-Mail-Adresse ein, mit der Sie sich registriert haben. Anschließend klicken Sie auf "Passwort senden" und Ihnen wird umgehend ein neu generiertes Passwort zugesandt. Achten Sie auf die korrekte Schreibweise Ihrer E-Mail-Adresse.
    )
    
    Veröffentlicht unter TypoScript Snippets | Hinterlasse einen Kommentar

    Bilder croppen – auch für Redakteure

    Hierfür sehr hilfreich ist die Extension nwt_imagecrop.

    Nach der Installation wird im Medienreiter die Option ‘Bildzuschnitt aktivieren’ bereitgestellt. Diese anhaken, Breite und Größe fest definieren und schon werden überstehende Pixel im Bild entsprechend abgeschnitten.

    Veröffentlicht unter nützliche Extensions | Hinterlasse einen Kommentar

    CSS für eine bestimmte Seite per TS beeinflussen

    [globalVar = TSFE:id = 26]
    	page.10.marks.BIGPIC < lib.test
    	page.CSS_inlineStyle (
    		.content.col.w160 		{ width:160px; float:right; padding:0; margin:0; }
    		.content.col.w160 img 	{ border:0px; }
    		.content.col.w160 a 	{ font:normal 11px/16px "DroidSans", "Lucida Grande", "Lucida Sans Unicode", Verdana, Sans-Serif; }
    		.content.col.w410 h2 	{ margin-top:100px; }
    	)
    [global]
    
    Veröffentlicht unter TypoScript Snippets | Hinterlasse einen Kommentar

    Parameter aus eigener Extension in TS abfangen und per CONTENT-DB-Abfrage weiterverwenden

    Zum Link erzeugen in Extensions siehe vorheriger Artikel.

    lib.test = CONTENT
    lib.test {
    	table = tx_extension_main
    	select {
            pidInList = 18
    		andWhere {
    			// wenn der Parameter wie folgt deklariert wurde: $conf['additionalParams'] = '&tx_extname[uid]='.$row["uid"];
    			// funktioniert die Abfrage so:
    			data = GPvar:tx_extension|uid
    			wrap = tx_extension_main.uid=|
    		}
    	}
    	renderObj = COA
    	renderObj.10 = TEXT
    	renderObj.10 {
    		field = titlepic
    		wrap = 
    	}
    }
    
    Veröffentlicht unter TypoScript Snippets | Hinterlasse einen Kommentar

    Aus Extension verlinken (typoLink)

    $conf['useCacheHash'] = 0; // make it a caching link
    $conf['parameter'] = 26; // target page id or external Url, Email, etc.
    $conf['returnLast'] = 'url'; // get it as URL
    $conf['additionalParams'] = '&tx_extname[uid]='.$row["uid"]; // Extension parameters
    $url = $cObject->typolink(NULL, $configurations);
    

    Parameter entgegennehmen:

    if(isset($_GET['tx_extname']['uid'])) {
    	$uid = $_GET['tx_extname']['uid'];
    }
    
    Veröffentlicht unter Extension Snippets | 1 Kommentar

    Bildverarbeitung in eigenen bzw. selbst erstellten Typo3-Extensions

    Ein Bild mit dem GIFBUILDER generieren, das wiederum selbst weitere Bilder oder auch Text enthalten kann:

    $img["file"] = "GIFBUILDER";
    $img["file."]["XY"] = "240,80";
    $img["file."]["backColor"] = "#ffffff";
    $img["file."]["10"] = "IMAGE";
    $img["file."]["10."]["file"] = $imgpfad.$row['titlepic'];
    $img["file."]["10."]["file."]["width"] = 120;
    $img["file."]["10."]["file."]["height"] = 80;
    $img["file."]["15"] = "IMAGE";
    $img["file."]["15."]["file"] = $imgpfad.$row['titlepic'];
    $img["file."]["15."]["offset"] = '120,0';
    $img["file."]["15."]["file."]["width"] = 120;
    $img["file."]["15."]["file."]["height"] = 80;
    

    Ein Bild bearbeiten, das bspw. aus einem Extension-Datensatz heraus verwendet wird:

    $bild1['file'] = $imgpfad.$row['titlepic'];
    $bild1['file.']['params'] = "-colorspace GRAY -sharpen 40 -quality 90";
    $bild1['file.']['height'] = 80;
    $bild1['file.']['width'] = '120c';
    $img_grau = $this->cObj->IMG_RESOURCE($bild1); // weist nur den Pfad zum bearbeiteten Bild zu
    $img_grau = $this->cObj->IMAGE($bild1); // erstellt den gesamten img-Tag
    

    Bildinformationen des übermittelten Bildes auslesen:

    $bildinfo = getimagesize($bild['file']);
    $bildw = $bildinfo[0];
    $bildh = $bildinfo[1];
    

    Prüfen ob Hoch- oder Querformat und für die erstellten Bilder einheitliche Größen gewährleisten:

    if($bildw > $bildh){ // querformat
      $bild1['file.']['height'] = 80;
      $bild1['file.']['width'] = '120c';
    }else{ // hochformat
      $bild1['file.']['width'] = 120;
      $bild1['file.']['height'] = '80c';
    }
    
    Veröffentlicht unter Extension Snippets | Hinterlasse einen Kommentar