TYPO3 Agency - coding, design and website development

TYPO3 CMS 6.2 LTS - čo nové v TypoScript-e?

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.

Include TypoScript

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">

strPad

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 = .
  }
}

_DEFAULT_PI_VARS

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
}

Debug Output

Ladiaci výpis (debug) pre globálne premenné register a page:

$GLOBALS[’TSFE’]->register
$GLOBALS[’TSFE’]->page

Príklad:

10 = LOAD_REGISTER
10.variable = value
20 = TEXT
20.data = debug:register
30 = TEXT
30.data = debug:page

Výstup na FE:

Debug Output

tt_content.uploads

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

Príklad:

# 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
}

stdWrap - replacement

Voľba replace vo funkcii stdWrap.replacement teraz podporuje optionSplit.

Príklad č. 1:

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

Príklad č. 2:

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

Object FILE

Boli pridané dve premenné register v TypoScript objekte FILES:

FILE_NUM_CURRENT
FILES_COUNT

Príklad:

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

Object FILES teraz podporuje voľby begin a maxItems.

Príklad:

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>
  }
}

Category Menu

Generuje menu zo stránok, ktoré majú priradené kategórie.

Príklad:

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>
  }
}

Access Categories

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.

Príklad:

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>
}

Include CSS & Javascript

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

Conditions

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, ...)]

Príklad (TS setup a PHP):

[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.

Príklady:

[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.

Príklad:

[IP = devIP]
  page.10 = TEXT
  page.10.value = Hello Developer!
[global]

Records Without Default Translation

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.

Príklad:

pageContent = CONTENT
pageContent {
  table = tt_content
  select.includeRecordsWithoutDefaultTranslation = 1
  ...
}

Exclude doktypes From Page Tree

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ľ).

Príklady:

# okrem typu "folder"
options.pageTree.excludeDoktypes = 254

# okrem typov "folder" a "standard"
options.pageTree.excludeDoktypes = 254, 1

Hide Modules In Backend

Možnosť skrývať moduly v BE.
Voľba nemá vplyv na nastavenie prístupu (access).

Príklady:

options.hideModules = file, help
options.hideModules.web := addToList(func,info)
options.hideModules.system = BelogLog

Preview Domain

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.

Príklad:

TCEMAIN.viewDomain = example.com

Conditions in Backend Layouts

Backend layouts teraz podporujú podmienky.

Príklad:

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]

Iné...

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).