Zum Inhalt springen

<link> statt <a> im FE

Erstellt am 21. Juni 2013 · 6 Antworten · letzte Antwort am 23. Juni 2013

Tags: Frage

adrian_sch ·

Ich weiß, dass dieses Thema schon oft aufkam - allerdings habe ich keine Lösung für Typo3 >6.0 gefunden.

Unter diesem Forum habe ich einen angeblichen Lösungsweg gefunden. Allerdings bin ich absoluter Anfänger und habe absolut keine Ahnung, wie ich diesen PHP Code einfügen/ausführen soll.

Gibt es keinen reinen Ansatz via TypoScript?
Ich hatte es einmal so versucht - aber das war wohl auch nicht das richtige:

seite.10.marks.INHALT.parseFunc < t3lib_parsehtml_proc

Für Hilfe wäre ich sehr dankbar - ich sitze schon etliche Stunden am Suchen nach einer Lösung vor dem Rechner...

EDIT:
die parsehtml_proc ist nun nicht mehr aktuell. Sie wurde verschoben in typo3/sysext/core/Classes/Html/RteHtmlParser.php

Dort findet sich in Zeile 731 die Funktion, die ich irgendwie aufrufen sollte...
function TS_links_rte

Chrissli ·

Ich bin lange nicht mehr in die Verlegenheit gekommen darauf zurück zu greifen,
aber bisher hieß das eigentlich

seite.10.marks.INHALT.parseFunc < lib.parseFunc_RTE

das sollte vermutlich immer noch funktionieren.
Natürlich nur wenn der Rest von INHALT dafür ausgelegt ist, aus einem Einzeiler lässt sich nicht allzu viel heraus interpretieren

adrian_sch ·

hm nein.. das war es leider nicht.

zu meiner Art, wie ich es gemacht habe (sicher komplett falsch?!):
Ich habe ein Backend-Layout mit 3 Spalten angelegt, Inhalt, Teaser und RECHTE_BOX.

In meinem HTML Template habe ich einen Marker INHALT, an dem ich alles einfüge. Das TypoScript dazu lautet:

tt_content.stdWrap.innerWrap >
###### Template #######
seite.10 = TEMPLATE
seite.10 {
  template = FILE
  template.file = fileadmin/template/template.txt
  
  marks {
    INHALT = CONTENT
    INHALT {
      table = tt_content 
    }
  }
}

tt_content = COA
tt_content {
  10 = TEXT
  10.field = header
  10.wrap = <b> | </b><br>
  20 = TEXT
  20.field = bodytext
}

seite.10.marks.INHALT < styles.content.get
seite.10.marks.INHALT.HTMLparser=1

# Startseite
[PIDinRootline = 15]
seite.10.marks.TEASER < styles.content.get
seite.10.marks.RECHTE_BOX < styles.content.get

seite.10.marks.TEASER.select.where = colPos=0
seite.10.marks.TEASER.wrap = <div class="teaser">|</div>

seite.10.marks.INHALT.select.where = colPos=1
seite.10.marks.INHALT.wrap = <div class="main_content">|</div>
seite.10.marks.INHALT.parseFunc < lib.parseFunc_RTE

seite.10.marks.RECHTE_BOX.select.where = colPos=2
seite.10.marks.RECHTE_BOX.wrap = <div class="right_box">|</div>
[else]
seite.10.marks.TEASER = ""
seite.10.marks.RECHTE_BOX = ""
seite.10.marks.INHALT.select.where = colPos=0
[GLOBAL]

das ELSE nutze ich nur, weil Teaser und die rechte Box nur auf der Startseite benötigt werden und ich nicht herausbekommen hatte, wie ich das mittels TypoScript anders lösen kann. Für Tipps hierfür wäre ich auch dankbar, wenn es einen schöneren/einfacheren Weg gibt..

Du hast erwähnt, dass du lange nicht mehr darauf zurück greifen musstest. Nur für die (meine) Zukunft: wie löst du dieses Problem?

Chrissli ·

>> Du hast erwähnt, dass du lange nicht mehr darauf zurück greifen musstest. Nur für die (meine) Zukunft: wie löst du dieses Problem?

Änhlich wie du, ganz einfach deshalb, weil du beim Zugriff über styles.content.get das nicht mehr machen musst.
Leider weiß ich auch nicht was der HTMLparser in diesem Zusammenhang macht, da dieser ja nur dazu da ist diverse HTML-Tags zuzulassen oder zu verbieten und so alleingesellt nicht wirklich Sinn macht.
Probiers doch mal so:

seite.10.marks.INHALT < styles.content.get
# seite.10.marks.INHALT.HTMLparser=1 < das da weg
(...)
seite.10.marks.INHALT.select.where = colPos=1
seite.10.marks.INHALT.wrap = <div class="main_content">|</div>
# seite.10.marks.INHALT.parseFunc < lib.parseFunc_RTE < das da auch weg
adrian_sch ·

ok habe es mal entfernt.
Es scheint sich nichts geändert zu haben. Habe auch mal testweise das styles.content.get entfernt, um zu schauen was dann passiert.. auch das hatte an sich keinen Effekt..

Habe immer noch Links à la

<link 25 - internal-link "Öffnet internen Link im aktuellen Fenster">Testlink</link>

.

die css styled content ist auch in meinen TS eingebunden.

EDIT:

Habe nun den Fehler gefunden.
Ich musste den TS Code

tt_content = COA
tt_content {
  10 = TEXT
  10.field = header
  10.wrap = <b> | </b><br>
  20 = TEXT
  20.field = bodytext
}

entfernen. Aber warum das einen so großen Einfluss hatte weiß ich nicht. Wäre dankbar, wenn mir das wer erklären könnte.

Chrissli ·

Sorry mein Fehler, das hatte ich übersehen!

styles.content.get verwendet für das renderObj, also die Definition welche Felder der Datensätze wie dargestellt werden, tt_content.
Wenn du das globale tt_content selbst überschreibst stimmt das natürlich anschließend nicht mehr.

Für ein korrektes rendering sollte das so aussehen:

tt_content = COA
tt_content {
  10 = TEXT
  10.field = header
  10.wrap = <b> | </b><br>
  20 = TEXT
  20.field = bodytext
  20.parseFunc < lib.parseFunc_RTE
}

Generell würde ich aber davon abraten das global zu tun. Der bessere Weg wäre, tt_content in dein rendering zu kopieren und anschliesst anzupassen, bzw. wenn du nur 2 Felder brauchst dies von vorneweg selbst zu definieren:

seite.10.marks.INHALT < styles.content.get
seite.10.marks.INHALT.select.where = colPos=1
seite.10.marks.INHALT.wrap = <div class="main_content">|</div>
seite.10.marks.INHALT.renderObj > # entfernt evtl vorhandene renderAngaben
seite.10.marks.INHALT.renderObj = COA
seite.10.marks.INHALT.renderObj {
  10 = TEXT
  10.field = header
  10.wrap = <b> | </b><br>
  20 = TEXT
  20.field = bodytext
}
adrian_sch ·
Chrissli schrieb

Sorry mein Fehler, das hatte ich übersehen!

styles.content.get verwendet für das renderObj, also die Definition welche Felder der Datensätze wie dargestellt werden, tt_content.
Wenn du das globale tt_content selbst überschreibst stimmt das natürlich anschließend nicht mehr.

Super - danke dir für diese Erklärung. Nun ist es klar. Ich hoffe, dass mir so ein (dummer) Anfängerfehler nicht nochmals passiert!