25. 3. 2014 bola uvedená nová verzia Typo3 6.2.0 LTS.
V nasledujúcom texte popíšem zmeny v 6.2 LTS ohľadom TSconfig a TypoScriptu.
Niektoré veci určte stoja za vyskúšanie.
1. Vloženie všetkých súborov TypoScript-u z určenej zložky (adresára) rekurzívne:
<INCLUDE_TYPOSCRIPT: source="DIR:directory">
<INCLUDE_TYPOSCRIPT: source="DIR:EXT:myextension/res/setup">
2. Poradie, v ktorom budú súbory vložené:
abecedne podľa názvu, najprv súbory, potom podradené zložky (pod-adresáre)
3. Obmedzenie vkladaných súborov podľa prípony pridaním vlastnosti extensions:
<INCLUDE_TYPOSCRIPT: source="DIR:directory" extensions="ts">
4. Štandardné nastavenie vloží všetky súbory s týmito príponami: ts, t3, t3s, t3c, txt.
5. Toto nastavenie je konfigurovateľné v Install Tool:
$TYPO3_CONF_VARS[’SYS’][’tsfile_ext’] = 'ts, txt';
6. V prípade, že je INCLUDE_TYPOSCRIPT definované v súbore, môžeme použiť relatívne definovanú cestu k súborom, pričom:
a) prvé vloženie musí byť absolútne
b) ./ - aktuálna zložka - podľa posledného vloženia
c) ../ - rodičovská zložka - podľa posledného vloženia
Napríklad:
<INCLUDE_TYPOSCRIPT: source="FILE:directory/typoscript/setup.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:./filename.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:../filename.ts">
<INCLUDE_TYPOSCRIPT: source="FILE:../directory/filename.ts">
Funkcii strPad bola pridaná voľba stdWrap:
page = PAGE
page.10 = TEXT
page.10 {
value = Hello World!
strPad {
length = 5
length {
current = 1
setCurrent.data = TSFE:page|uid
setCurrent.wrap = | + 80
prioriCalc = 1
}
padWith = .
}
}
Do _DEFAULT_PI_VARS bola pridaná voľba.
_DEFAULT_PI_VARS sa používa na definovanie prednastavených (default) hodnôť premennej piVars v plugine (premenné GET/POST).
TYPO3 < 6.2
plugin.tt_news._DEFAULT_PI_VARS {
year = 2013
}
TYPO3 >= 6.2
plugin.tt_news._DEFAULT_PI_VARS {
year.stdWrap.data = date:Y
}
Ladiaci výpis (debug) pre globálne premenné register a page:
$GLOBALS[’TSFE’]->register
$GLOBALS[’TSFE’]->page
10 = LOAD_REGISTER
10.variable = value
20 = TEXT
20.data = debug:register
30 = TEXT
30.data = debug:page
Odkazy na súbory (obsahový prvok) teraz ponúka možnosť popisu a alternatívneho textu pre každý súbor.
Všetko je prístupné cez premenné register:
register:description
register:titleText
register:altText
# odkazy na súbory
tt_content.uploads.20 {
# popis odkazu namiesto názvu súboru
labelStdWrap.data = register:description
# alternatívny popis
itemRendering.20.data = register:titleText
}
Voľba replace vo funkcii stdWrap.replacement teraz podporuje optionSplit.
page.10 = TEXT
page.10.value = TYPO3_inspires_people_to_share
page.10.replacement.10 {
search = _
replace = -1- || -2- || -3-
useOptionSplitReplace = 1
}
Výstup č. 1:
TYPO3-1-inspires-2-people-3-to-3-share
page.20 = TEXT
page.20.value = TYPO3 inspires people to share
page.20.replacement.10 {
search = #(TYPO3|people|share)#i
replace = ${1} CMS || all ${1} || collaborate and ${1}
useOptionSplitReplace = 1
useRegExp = 1
}
Výstup č. 2:
TYPO3 CMS inspires all people to collaborate and share
Boli pridané dve premenné register v TypoScript objekte FILES:
FILE_NUM_CURRENT
FILES_COUNT
10 = FILES
10 {
references {
table = tt_news
uid.field = uid
fieldName = media
}
renderObj = COA
renderObj {
10 = TEXT
10.value = Renders first file twice
10.if.isFalse.data = register:FILE_NUM_CURRENT
20 = TEXT
20.value = file {register:FILE_NUM_CURRENT} of {register:FILES_COUNT}
20.insertData = 1
}
}
Object FILES teraz podporuje voľby begin a maxItems.
page.10 = FILES
page.10 {
references {
table = pages
uid.data = page:uid
fieldName = media
}
# vráti 5 súborov, začne prvým v poradí (begin = 0)
begin = 0
maxItems = 5
renderObj = TEXT
renderObj {
data = file:current:size
wrap = <p>File size: <strong> | </strong></p>
}
}
Generuje menu zo stránok, ktoré majú priradené kategórie.
page.10 = HMENU
page.10 {
special = categories
special {
# zoznam kategórií oddelený čiarkou
value = 1, 2
# zoradiť podľa názvu (title)
sorting = title
# zoradiť vzostupne alebo zostupne ("asc" alebo "desc")
order = desc
}
wrap = <ul> | </ul>
1 = TMENU
1.NO {
allWrap = <li> | </li>
}
}
Vlastnosť categories umožňuje pristupovať objektu RECORDS ku kategóriám.
Ani pri najlepšej vôli mi to však nefungovalo, netuším, kde je problém.
categorized_content = RECORDS
categorized_content {
categories.field = selected_categories
categories.relation.field = category_field
tables = tt_content
conf.tt_content = TEXT
conf.tt_content {
field = header
typolink.parameter = {field:pid}#{field:uid}
typolink.parameter.insertData = 1
wrap = <li>|</li>
}
wrap = <ul>|</ul>
}
Pre allWrap teraz môže byť definovaná vlastnosť splitChar.
Nastavenie wrap funguje ako štandardná funkcia stdWrap.wrap.
Preddefinovaná hodnota splitChar je znak "|".
Predošlé zmeny sú aplikované na tieto nastavenia:
includeCSS
includeJSlibs
includeJSFooterlibs
includeJS
includeJSFooter
1. Užívateľsky definovaná podmienka userFunc teraz akceptuje viac ako jeden vstupný parameter PHP funkcie.
TYPO3 < 6.2
[userFunc = user_function(argument1)]
TYPO3 >= 6.2
[userFunc = user_function(argument1, argument2, ...)]
[userFunc = user_match(checkSubnet, 192.168)]
function user_match($command, $subnet) {
switch($command) {
case ’checkSubnet’:
if (strstr(getenv(’REMOTE_ADDR’), $subnet)) { ... }
}
}
2. Ďalej v podmienkach môže byť použitý aplikačný kontext.
3. Taktiež sú podporované zástupné znaky "+" a "*" a regulárne výrazy.
[applicationContext = Development/Debugging, Development/Profiling]
# TYPO3 site in development stage
[global]
[applicationContext = Production*]
# TYPO3 site in production stage
# for example "Production/Live" or "Production/Staging"
[global]
[applicationContext = /^TestServer\d+$/]
# TYPO3 site on TestServer1 or TestServer2 or TestServer3, etc.
[global]
4. V podmienke s IP adresou možno kľúčové slovo devIP použiť pre kontrolu, či IP adresa klienta zodpovedá nastaveniu devIpMask v Install Tool.
[IP = devIP]
page.10 = TEXT
page.10.value = Hello Developer!
[global]
Nová voľba includeRecordsWithoutDefaultTranslation umožňuje získať záznamy v aktuálnom jazyku bez toho,
aby mali svoj rodičovský ekvivalent v štandardnom (default) jazyku.
pageContent = CONTENT
pageContent {
table = tt_content
select.includeRecordsWithoutDefaultTranslation = 1
...
}
Možnosť odstrániť vybrané typy stránok zo stromu stránok v BE.
Nastavuje sa v BE user TSconfig (BE užívateľská skupina alebo BE užívateľ).
# okrem typu "folder"
options.pageTree.excludeDoktypes = 254
# okrem typov "folder" a "standard"
options.pageTree.excludeDoktypes = 254, 1
Možnosť skrývať moduly v BE.
Voľba nemá vplyv na nastavenie prístupu (access).
options.hideModules = file, help
options.hideModules.web := addToList(func,info)
options.hideModules.system = BelogLog
Možnosť nastaviť alternatívne domény pre náhľad stránok v Page TSsetup.
Využiteľné pre viac-doménové stránky.
TCEMAIN.viewDomain = example.com
Backend layouts teraz podporujú podmienky.
backend_layout {
colCount = 2
rowCount = 1
rows {
1 {
columns {
1.name = Main
1.colPos = 0
2.name = Right
2.colPos = 1
}
}
}
}
[PIDupinRootline = 123]
# skryť pravý stĺpec na podstránkach stránky s uid = 123
backend_layout.rows.1.columns.2 >
[global]
1. Možnosť zapnúť/vypnúť odkaz "forgot password" použitím voľby showForgotPassword
(napr. ak potrebujeme viacero prihlasovacích formulárov modulu felogin na jednej stránke).
2. HTTP hlavička štandardne obsahuje informáciu Content-length.
Konfigurovateľné pomocou voľby config.enableContentLengthHeader.
3. Zoznam výsledkov vyhľadávania modulu indexed_search má k dispozícii funkciu stdWrap
(plugin.tx_indexedsearch.resultlist_stdWrap).