[TYPO3-50-general] TypoScript syntax: Array indexes
Robert Lemke
robert at typo3.org
Thu Jul 19 10:36:30 CEST 2007
Hi folks,
I've been thinking for some time now about an issue with the syntax
of array indexes in TypoScript.
Consider the following example:
myArrayObject = ContentArray
myArrayObject.10 = Text
myArrayObject.10.value = "Hello "
myArrayObject.20 = Text
myArrayObject.20.value = "world!"
"myArrayObject" is a regular TypoScript content object which can be
rendered. It probably has no properties itself but it does have Array
capabilities, ie. it has sub objects. There are two sub objects,
namely "10" and "20". When the ContentArray is rendered, it just
aggregates the content of all sub objects.
So far so good. But not for the parser and not if we don't use
numerical indexes. Consider this:
myObject = Template
myObject.file = xyz
myObject.subParts.footer = Text
"file" is a property of the "Template" object and so is "subParts".
However, subParts has Array behaviour (although it's no object) and
footer is the index in that array. Now, from the parser's view this
looks very ambiguous: How can it know (without knowing the internals
of an object) that subParts behaves like an array?
A cleaner approach would be to distinguish between properties and
array indexes by using a different syntax:
myArrayObject = ContentArray
myArrayObject[10] = Text
myArrayObject[10].value = "Hello "
myArrayObject[20] = Text
myArrayObject[20].value = "world!"
and
myObject = Template
myObject.file = xyz
myObject.subParts["footer"] = Text
To me that looks intuitive enough and the parser is especially happy
because he now gets a hint.
But there's even more trouble at the horizon: TypoScript allows for
implicitly defining array objects, on the fly:
anotherObject.sub1.sub2.sub3 = ContentArray
anotherObject.sub1.sub2.sub3.1 = Text
anotherObject.sub1.sub2.sub3.1.value = "Yawn"
This definition implies that "anotherObject", "sub1" and "sub2"
should behave like an array, but they haven't been defined anywhere!
We could agree on that if objects are created _implicitly_, they
don't become true "ContentArray" objects but are just dumb PHP arrays
which don't have any object behaviour, they only exist for containing
sub arrays or objects. This compromise would read like this with the
new syntax:
anotherObject.sub1.sub2.sub3 = ContentArray
anotherObject.sub1.sub2.sub3[1] = Text
anotherObject.sub1.sub2.sub3[1].value = "Yawn"
So, what's your opinion? Can you live with that new syntax? Is it
intuitive enough? Or do you see another loophole out of the parser
dilemma?
Cheers,
robert
--
http://typo3.org/gimmefive
More information about the TYPO3-project-5_0-general
mailing list