Zurück-Link (Back-Link) in typoscript
Um das veraltete Javascript-Verfahren (history.back) umgehen zu können, lässt sich in TYPOSCRIPT wunderbar ein Link um den HTTP_REFERER wrappen. Damit das Ganze auf mehreren Seiten zum Einsatz kommen kann, darf es natürlich nicht gecached werden. Deshalb das COA_INT:
temp.backlink = COA_INT
temp.backlink {
10 = TEXT
10.data = getIndpEnv:HTTP_REFERER
10.wrap = <a href="|">Zurück</a
}
Mehrsprachige News ohne Entsprechung in der Standardsprache
Will man auch Newsbeiträge in einer Fremdsprache darstellen, die nicht lokalisiert sind, also keinen Datensatz in der Standardsprache haben, kann man dies durch setzen der folgenden TS-Parameter im tt_news Plugin erreichen:
plugin.tt_news {
showNewsWithoutDefaultTranslation = 1
select.languageField = sys_language_uid
}
Möchte man auf der SINGLE Ansicht auch zwischen den Sprachen hin- und herschalten können (vorausgesetzt, die entsprechende News ist übersetzt), verschluckt das HMENU zur Umschaltung bei mir immer die GET-Variablen. Das resultiert dann in einem profanen "no news_id given".
Mit folgender Parametrierung im NO des Menus kann man Abhilfe schaffen:
NO.additionalParams.cObject = COA
NO.additionalParams.cObject {
10 = TEXT
10.data = GPvar : tx_ttnews|backPid
10.wrap = &tx_ttnews[backPid]=|
10.required = 1
20 = TEXT
20.data = GPvar : tx_ttnews|tt_news
20.wrap = &tx_ttnews[tt_news]=|
20.required = 1
30 = TEXT
30.data = GPvar : cHash
30.wrap = &cHash=|
30.required = 1
}
institut für interdisziplinäre restrukturierung e.v.
http://www.iir-hu.de für hagemannplus
programmierung: TYPOSCRIPT / (X)HTML / CSS
dettmer rechtsanwälte
http://www.dettmer-rechtsanwaelte.de für hagemannplus
programmierung: TYPOSCRIPT / (X)HTML / CSS
architekt ralf breuer
http://www.ralf-breuer-architekt.de für hagemannplus
programmierung: TYPOSCRIPT / (X)HTML / CSS
TMENU navigation in verschiedene richtungen
möchte man eine navigation in dieser art und weise per TMENU erstellen, bekommt man probleme mit dem css:

um die zweite ebene an der x-position des aktiven hauptpunkts darzustellen, muss man diese mittels "wrapItemAndSup" zusammenfassen.
kommen jetzt die dritte und vierte ebene hinzu - diese müssen ja als eigene HMENUs realisiert werden, damit sie in eigenen divs dargestellt werden können - verschieben sich entweder die restlichen hauptpunkte nach rechts, oder man bekommt die divs nur unterhalb der ebene 2 dargestellt.
gelöst habe ich das problem nun so:
1. ein HMENU für die Hauptnavigation
temp.navi1 = HMENU
temp.navi1 {
entrylevel = 1
wrap = <div id="menu1">|</div>
1 = TMENU
1 {
NO = 1
NO {
wrapItemAndSub = <div class="untermenu">|</div>
linkWrap = <span class="menu_ebene1">|</span>
stdWrap.case = upper
}
ACT = 1
ACT < .NO
ACT {
linkWrap = <span class="menu_ebene1 aktiv">|</span>
}
}
}
2. Ein zweites HMENU für die Hauptnavigation und die erste Unternavigation:
temp.navi2 = HMENU
temp.navi2 {
special = directory
special.value = 20
wrap = <div id="menu2">|</div>
1 = TMENU
1 {
itemArrayProcFunc = user_nArray->user_naviArray
NO = 1
NO {
wrapItemAndSub = <div class="untermenu">|</div>
linkWrap = <span class="menu_ebene1">|</span>
stdWrap.case = upper
}
ACT = 1
ACT < .NO
ACT {
linkWrap = <span class="menu_ebene1 aktiv">|</span>
}
}
2 = TMENU
2 {
NO = 1
NO {
linkWrap = <br /><span class="menu_ebene2">|</span>
stdWrap.case = upper
}
ACT = 1
ACT < .NO
ACT.linkWrap = <br /><span class="menu_ebene2 aktiv">|</span>
}
}
3. wobei die erste ebene jedoch durch folgende userfunction gejagt wird:
function user_naviArray($nArr, $conf) {
$rootlineArr = $GLOBALS["TSFE"]->sys_page->getRootLine($GLOBALS["TSFE"]->id);
$rootlineListe = array();
foreach($rootlineArr as $seite) {
array_push($rootlineListe,$seite['uid']);
}
$newArr = array();
$z = 0;
foreach($nArr as $seite) {
if($seite['uid'] != $GLOBALS["TSFE"]->id && !in_array($seite['uid'],$rootlineListe) && $z == 0) {
array_push($newArr,$seite);
} else if($seite['uid'] == $GLOBALS["TSFE"]->id || in_array($seite['uid'],$rootlineListe)) {
array_push($newArr,$seite);
$z = 1;
}
}
return $newArr;
}
diese schneidet alle hauptpunkte nach dem aktiven einfach ab.
das bedeutet, dass man nun die dritte und vierte (und ggfls. folgende) ebene schön rechts neben die ebene zwei positionieren kann, da dort nun keine hauptpunkte mehr im weg sind.
als letztes setzt man noch die hauptpunkte der zweiten navigation auf "visibility:hidden" und die gesamte zweite navigation ein stück nach oben.
kleiner div im internet explorer 6
der internet explorer 6 scheint ein problem damit zu haben, kleinere divs als ein paar pixel höhe darzustellen. selbst wenn man die height per css auf 1px setzt, nimmt der div immer noch mindestens 5 pixel platz ein. das ganze passiert, weil der ie6 auf jeden fall platz für eventuell vorhandenen text reserviert - das ganze lässt sich also so umgehen:
line-height:0px; font-size:0px;
dann kann der div notfalls auch auf 0 pixel höhe gestyled werden.
stolperfalle bei FIND_IN_SET
wenn man in einem where-statement mit "NOT FIND_IN_SET" filtern möchte, kann es zu unerwünschten ergebnissen kommen wenn der zu durchsuchende teil NULL ist:
SELECT FIND_IN_SET('x','y,z')
// liefert je nach vorkommen von 'x' in 'y,z' 0 oder die
// position des gefundenen elements zurück.
SELECT FIND_IN_SET('x',NULL)
SELECT NOT FIND_IN_SET('x',NULL)
SELECT !FIND_IN_SET('x',NULL)
// liefern alle NULL
im where-statement wird NULL dann leider als 0 interpretiert, ist also immer falsch.
abhilfe schafft hier, den fall NULL gesondert abzufangen, z.b. so:
...WHERE (NOT FIND_IN_SET(wert,feld) OR feld IS NULL)
gedankenstrich (–) in grafischen headlines
aus unerfindlichen gründen kann man im gifbuilder keine langen trennstriche benutzen (ndash, bzw alt+0150). da man aber theoretisch – in das headline feld eintragen könnte, damit der ndash korrekt gerendert wird, kann man dies auch einfach mittels einer userfunc simulieren, um dem redakteur solch kryptische eingaben zu ersparen. der fehler wird wahrscheinlich irgendwann einmal gefixt, in der version 4.2.6 ist er jedenfalls noch vorhanden.
ndash_bugfix.php
function user_replace_ndash($content, $conf) {
return str_replace(chr(150),"–",$content);
}
typoscript
includeLibs.ndash = pfad/ndash_bugfix.php
temp.headline = IMAGE
temp.headline {
file = GIFBUILDER
file {
XY =
backColor =
10 = TEXT
10 {
text.field = header
text.listNum = 0
text.listNum.splitChar = |
text.postUserFunc = user_replace_ndash
fontSize =
fontColor =
fontFile =
offset =
}
20 < .10
20 {
text.listNum = 1
offset = x,y
}
}
}
lib.stdheader.10.1 < temp.headline
indexed_search in teilbereichen bzw. unterbäumen
über einen hook in der extension indexed_search kann man diese gezielt in teilbereichen und unterbäumen der site suchen lassen. das ganze lässt sich realisieren, weil der hook einen zusätzlichen, selbst zu definierenden string an das sql statement anhängt. hier ein beispiel:
ext_localconf.php
$TYPO3_CONF_VARS['EXTCONF']['indexed_search']['pi1_hooks'] ['execFinalQuery_idList'] = 'EXT:meine_ext/class.meine_ext_pagewhere.php:meine_ext_pagewhere'
class.meine_ext_pagewhere.php
class meine_ext_pagewhere {
function execFinalQuery_idList($list) {
$pagewhere = " ISEC.page_id IN (XX,XX,XX,XX) ";
// oder z.B.
$pagewhere = " ISEC.page_id IN (SELECT pages.uid FROM
pages WHERE pages.doktype != 'XX') ";
return $pagewhere;
}
}
will man in einem kompletten unterbaum suchen, kann man sich die liste der zu durchsuchenden pids z.b. so zusammenbauen:
function suchSeitenListeErstellen($seite) {
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('uid,
doktype','pages',"pid='".$seite."' and deleted=0");
while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
$this->suchSeitenListe .=
($this->suchSeitenListe != '') ? "','".$row['uid'] : $row['uid'];
}
$this->suchSeitenListeErstellen($row['uid']);
}
$this->suchSeitenListeErstellen('XX');


