thomas hirt . visuelle kommunikation
Typo3 Lightbox mit Lupen Icon und Download Link
tt_news: Auswahl der Kategorie mit einer Auswahlliste (Dropdown Menü)
 
Montag, 13. Dez 2010

tt_news um ein Feld mit RTE erweitern und Links ermöglichen

Die tt_news Erweiterung ist ja so zusagen die eierlegende Wollmilchsau unter den TYPO3 Extensions. In diesem Beitrag erkläre ich, wie man tt_news um Felder inklusive RTE erweitern kann und so auch Links im Frontend anzeigen kann.

Da ich nicht direkt die PHP Dateien der Erweiterung tt_news bearbeiten möchte, lege ich mit der Erweiterung "Extension Kickstarter" eine eigene Erweiterung an. Änderungen direkt in den tt_news Dateien würden ja beim nächsten Update von tt_news überschrieben werden.

Zuerst wird mal die Extension kickstarter via Extension Manger installiert.

Danach kann man direkt im Extension Manager mit einem Click auf "Create New Extension" eine neue Erweiterung anlegen.

Im folgendem Bildschirmfoto sieht man, welche wichtigen Angaben für diese neue Erweiterungen gemacht werden sollten. Erwähnenswert ist hier eigentlich nur der "Extension Key". Falls man die Erweiterung nicht in das "Extension Repository" hochladen möchte, kann dieser Name fast beliebig sein. Ansonsten sollte man sich die Richtlinien für die korrekte Namensgebung von Erweiterungen zu Gemüte führen. (typo3.org/extensions/extension-keys/)



Nun trifft man unter "Extend existing Tables" folgende Einstellung. Dazu muss die Erweiterung tt_news bereits im System installiert sein.

Ich nutze für den Ort ein Feld mit Rich Text Editor. Einerseits ein gutes Beispiel und andererseits kann man so die Orte mit anderen Seiten verlinken.

Nachdem die Erweiterung erstell wurde (WRITE) und auch installiert wird, ist das neue Feld für den Ort normalerweise unter "Extra Fields" im tt_news Record zu finden. Will man das ändern, kommt in etwa folgende Zeile in die Datei "ext_tables.php" der neuen Erweiterung:

$TCA ['tt_news']['types']['0']['showitem'] = 'hidden, type;;;;1-1-1,title;;;;2-2-2,short, bodytext;;2;richtext:rte_transform[flag=rte_enabled|mode=ts];4-4-4,--div--;LLL:EXT:tt_news/locallang_tca.xml:tt_news.tabs.special, datetime;;;;2-2-2,archivedate,tx_ttnewserweiterung_ort;;;richtext[]:rte_transform[mode=ts];1-1-1, author;;3;; ;;;;2-2-2, keywords;;;;2-2-2, sys_language_uid;;1;;3-3-3,--div--;LLL:EXT:tt_news/locallang_tca.xml:tt_news.tabs.media, image;;;;1-1-1, imagecaption;;5;;, links;;;;2-2-2, news_files;;;;4-4-4,--div--;LLL:EXT:tt_news/locallang_tca.xml:tt_news.tabs.catAndRels, category;;;;3-3-3,related;;;;3-3-3,--div--;LLL:EXT:tt_news/locallang_tca.xml:tt_news.tabs.access,  starttime, endtime, fe_group, editlock';

Folgende Teil ist dabei relevant und entscheidet, wo das neue Feld auf scheint:

tx_ttnewserweiterung_ort;;;richtext[]:rte_transform[mode=ts];1-1-1

Jetzt gibt es zwar schon ein Feld im Backend, aber noch keinen passenden Marker um eine Ausgabe im Frontend zu erzeugen. Dazu erstellen wir im Verzeichnis der neuen Erweiterung eine PHP-Datei namens "class.ttnewserweiterung_marker.php". In diese neue Datei kommt nun folgender PHP-Code, der einen Hook von tt_news zur Erstellung von Markern nutzt:

<?php
class tx_ttnewserweiterung_marker {
    function extraItemMarkerProcessor($markerArray, $row, $lConf, $obj) {
        $markerArray['###NEWS_ORT###'] = nl2br($obj->local_cObj->stdWrap($row['tx_ttnewserweiterung_ort'], $lConf['tx_ttnewserweiterung_ort_stdWrap.']));
        return $markerArray;
    }
}
?>

Danach legen wir noch eine weitere Datei namens "ext_localconf.php" im Verzeichnis der neuen Erweiterung an. Diese Datei beinhaltet folgenden Code und bindet die von uns angelegte Klasse mit dem Hook ein. Erst danach kann der Market im HTML Template von tt_news durch ###NEWS_ORT### wie gewöhnlich eingefügt werden.

<?php
if (!defined ('TYPO3_MODE')) die ('Access denied.');

$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tt_news']['extraItemMarkerHook'][] = 'EXT:tt_newserweiterung/class.ttnewserweiterung_marker.php:tx_ttnewserweiterung_marker';
?>

Was jetzt aber noch immer nicht geht, ist das Links aus dem RTE auch tatsächlich im Frontend zu sehen sind. Das hängt mit den Einstellungen wie tt_news Inhalte rendert zusammen. Folgende Typoscript Snipsel bewirken, dass auch Links im RTE korrekt im Frontend erzeugt werden:

 // tt_news standard wraps entfernen
plugin.tt_news.general_stdWrap >

// wraps für das Feld Ort entfernen
plugin.tt_news.displayList.tx_ttnewserweiterung_ort_stdWrap.wrap >
plugin.tt_news.displayList.tx_ttnewserweiterung_ort_stdWrap.wrap = |

// parseFunc des RTE für das Feld Ort nutzen
plugin.tt_news.displayList.tx_ttnewserweiterung_ort_stdWrap.parseFunc < lib.parseFunc_RTE

# stripHtml auf 0 setzen
plugin.tt_news.displayList.tx_ttnewserweiterung_ort_stdWrap.stripHtml = 0

Eine Hilfe für Redakteure kann es auch sein unnötige Felder der tt_news Records im Backend auszublenden. Dies kann man erreichen indem man zum Beispiel folgende Zeilen in das Feld TSConfig der Seiteneigenschaften schreibt:

TCEFORM.tt_news.author.disabled = 1

Der Befehl dazu lautet:
TCEFORM.[DBtabelle].[DBFeld].disabled = 1

 
 
Huzur Polat schrieb am 10.11.11, 16:39
Hi Thomas,

Danke für das super Tutorial.
Funktioniert super.

Thomas wenn ich den field namen mit ausgeben will wie müsste mein TypoScript dann aussehen?

also im Frontend sollte dan setehen Ort:: "ort"

danke
www.thomas-hirt.atThomas schrieb am 11.11.11, 09:11
Versuche doch mal:
plugin.tt_news.displayList.tx_ttnewserweiterung_ort_stdWrap.wrap = ort:

Thomas
Mio Kiena schrieb am 30.1.12, 14:53
Hi Thomas,

vielen Dank für das Tutorial, ich habe mein (gefühltes) halbes Leben dran gesessen und es nun endlich geschafft. Nirgends fand ich es so gut erklärt wie bei dir!

Ich habe es genutzt um ein zweites Überschriftenfeld mit Marker hinzuzufügen, dein Beispiel mit dem RTE für Links finde ich allerdings auch sehr interessant.

Ich hoffe andere stoßen früher auf diese Seite als ich es tat.
sebastian schrieb am 2.4.12, 22:30
genau das hatte ich eben gesucht.
Leider erscheinen bei mir im FE vor jeder Zeile ein br-Tag. Dieses br-Tag ist aber weder im Backend/RTE zusehen, noch in der Datenbank.
Irgendwie fügt er immer bei jeder neuen Zeile ein zusätzliches br tag ein (die br Tags innerhalb des p-Tags sind gewollt und richtig):

was ist da falsch? ich habe 1:1 deine Anleitung befolgt...

RTE-Code:
<h2><a href="http://www.sebastian-reinhardt.com/?id=4" class="internal-link" title="Opens internal link in current window">Foto</a></h2>
<p>test<br />test<br />test</p>


FE-Code:
<h2><a class="internal-link" title="Opens internal link in current window" href="photography.html">Foto</a></h2>
<br>
<p class="bodytext">test<br>
test<br>
test<br>
</p>
sebastian schrieb am 3.4.12, 00:00
^gelöst. bin kein php-nerd, aber ich habs gefunden:
der Grund warum bei mir im RTE bzw. im FE immer Zeilenubrüche auftauchen ist die funktion nl2br(). Wenn man also keine Zeilenumbrüch emöchte, da der RTE dies vornimmt( automatische P-tags für absätze + manuelle Umbrüche) muss man diese Funktion oben in der localconf ändern, bzw. entfernen.
sebastian schrieb am 3.4.12, 00:02
^sorry ich meine in der class.ttnewserweiterung_marker.php
www.thomas-hirt.atThomas schrieb am 3.4.12, 10:21
Freut mich, dass es schlussendlich geklappt hat...
Christian schrieb am 5.4.12, 16:13
Danke für diese TOLLE Beschreibung,

kann mir jemand sagen was ich in die .php datei schreiben muss, dass es mir Bilder anzeigt.

Danke
http://www.agentur-steckenpferd.deMathias schrieb am 17.1.13, 18:05
@Thomas

Vielen Dank für die TYPO3 Anleitung. Genau so eine TYPO3 EXT habe ich heute für ein Online Projekt gebraucht.
 
 
kalender
Dezember 2010
M D M D F S S
« Nov   Mär »
 12345
6789101112
13141516171819
20212223242526
2728293031