Zum Inhalt springen

parseFunc funz aber zweimal Output. Eins OK Eins NOK

Erstellt am 8. Januar 2007 · 3 Antworten · letzte Antwort am 30. Januar 2007

Tags: Inhaltselemente, Frage

typolino ·

Hallo Alle,

Habe da ein grosses Problem und bitte um Hilfe. Ich rendere mein content mit parseFunc und das ist OK. Aber ich bekomme den gleichen content ein zweites Mal auf dem Bildschirm, und zwar nicht gerendert. Woher kommt das und wie kann ich es löschen (lassen)? Wäre schön wenn jemand nen Tipp hätte.

1. Habe ein einfaches content item mit 3 bullet text und links (cType Text), sieht im browser source view so aus:

<ul>
<li><a href="#12710" target="_self">testtab1</a></li>
<li><a href="#12711" target="_self">testtab2</a></li>
<li><a href="#12712" target="_self">testtab3</a></li>
</ul>

2. Habe mit parseFunc so gerendert, dass target="_self" entfernt wird und class="toggle" eingefügt wird (case 7, sh. unten) und es funz auch:

page.430 = CONTENT
page.430 {
table = tt_content
select {
pidInList = this
orderBy = sorting
languageField = sys_language_uid
where=colPos=0
}
ifEmpty =

renderObj.stdWrap.innerWrap.cObject=CASE
renderObj.stdWrap.innerWrap.cObject {
key.field = header_layout
default=TEXT
default.value=|
1=TEXT
1.value=<div class="feature">|</div>
4=TEXT
4.value= <div id="tabsfeature">|</div>
5=TEXT
5.value= <div id="preview">|</div>

# case 7 begin vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv[​b]
7=TEXT
7.field = bodytext
7.wrap = <div id="tabsfeature"><div id="featuretabs">|</div></div>
7.parseFunc {
tags {
link = TEXT
link {
current = 1
typolink.extTarget = _blank
typolink.target =
typolink.parameter.data = parameters : allParams
typolink.ATagParams = class="toggle"
}
}
}
[/b]# case 7 end ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

8=TEXT
8.value=<div id="{field:uid}" class="panel hide">|</div>
8.insertData=1

} //end renderObj
}

3. Hier der Output im Browser Source view:

<a name="12713"></a><div id="tabsfeature"><div id="featuretabs">
<ul>
<li><a href="#12710" class="toggle">testtab1</a></li>
<li><a href="#12711" class="toggle">testtab2</a></li>
<li><a href="#12712" class="toggle">testtab3</a></li>
</ul>
</div></div>
<!-- Text: [begin] -->
<ul>
<li><a href="#12710" target="_self">testtab1</a></li>
<li><a href="#12711" target="_self">testtab2</a></li>
<li><a href="#12712" target="_self">testtab3</a></li></ul>
<!-- Text: [end] -->

??? der code oben zw. <!-- Text: [begin] --> und <!-- Text: [end] --> ist es !!!

typolino ·

Habe ein Workaround gefunden, das mir das erwartete Ergebnis liefert. Es ist ein Beispiel aus dem Internet das ich etwas nachbearbeitete (ein paar Zeile entfernt). Diese Codes habe ich beim Punkt 2 nach der Zeile page.430 eingefügt. Keine Ahnung wieso das dann funz :o , verstehe ehrlich gesagt nur Bahnhof. Bin eben ein Pröbler, hoffe es hat keine Nebenwirkungen... o.O Mache hier ein Symtombekämfung weil die Ursache nicht klar ist. Aber ich bleibe dran, vielleicht findet sich eine Erklärung für eine elegantere Lösung. Wenn jemand eine Lösung hat, bitte nich zögern.
Danke vielmals!

typolino ·

Hier noch der Workaround code (sh. auch unten im TS Listing) nach der Zeile page.430 = CONTENT

(Code Quelle http://www.typo3wizard.com)

temp.tt_content.text < tt_content.text
tt_content.text >
tt_content.text = CASE
tt_content.text {
default < temp.tt_content.text
}
temp.tt_content >

page.430 = CONTENT

temp.tt_content.text < tt_content.text
tt_content.text >
tt_content.text = CASE
tt_content.text {
   default < temp.tt_content.text 
}
temp.tt_content >

page.430 {
table = tt_content
select {
pidInList = this
orderBy = sorting
languageField = sys_language_uid
where=colPos=0
}
ifEmpty =

renderObj.stdWrap.innerWrap.cObject=CASE
renderObj.stdWrap.innerWrap.cObject {
key.field = header_layout
default=TEXT
default.value=|
1=TEXT
1.value=<div class="feature">|</div>
4=TEXT
4.value= <div id="tabsfeature">|</div>
5=TEXT
5.value= <div id="preview">|</div>

# case 7 begin vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
7=TEXT
7.field = bodytext
7.wrap = <div id="tabsfeature"><div id="featuretabs">|</div></div>
7.parseFunc {
tags {
link = TEXT
link {
current = 1
typolink.extTarget = _blank
typolink.target =
typolink.parameter.data = parameters : allParams
typolink.ATagParams = class="toggle"
}
}
}
# case 7 end ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

8=TEXT
8.value=<div id="{field:uid}" class="panel hide">|</div>
8.insertData=1

} //end renderObj
}
typolino ·

Lösung gefunden 😃

Workaround hatte ein paar Nebeneffekte hevor gebracht.

Hier die elegante Lösung:

Im Admin Panel, ganz unten im FE, kann man die Option "Track content rendering" auswählen und man sieht dann die Schritte was so beim Seitenaufbau alles gemacht wird. Da habe ich gesehen, dass tt_content.text.20 die links vor meinem code parsen tut :o .

Im Typoscript object browser sieht man auch, dass er dafür lib.parseFunc_RTE verwendet [parseFunc]=<lib.parseFunc_RTE.

Diese habe ich gezielt für meinen Fall dann übersprungen indem ich CASE verwende (Switch bei anderen sprachen) und mittels tt_content.text.20 > wegwerfe. Das mache ich nur wenn eine 8 im header_layout steht, das ich selber im TSconfig gesetzt habe (Achtung, oben im Listing hatte ich die 7 abgefragt und da ich diese anders verwendet habe, wurde sie neu ersetzt durch die 8-).

Hier das Typoscript (für mein content item Ctype = Text):

# überspring standard Text content item parsing ( header_layout = 8 ) 

temp.tt_content.text < tt_content.text
tt_content.text = CASE
tt_content.text {
  key.field=header_layout
  8 = tt_content.text.20 >
  default < temp.tt_content.text 
}
temp.tt_content >

tt_content.text gilt nur für Ctype gleich Text, nicht für Text w/image, Image, Bullet list etc.
Siehe "Typoscript object browser" im BE Modul "Template" für mehr Details.

Ich hoffe es ist hilfreich für die Nachwelt.

Happy Typo!
typolino