[Typo3-dev] The quest of optionSplit : a first approach
Jochen Rieger
j.rieger at connecta.ag
Tue Nov 15 13:44:56 CET 2005
Hi Jean-Baptiste,
thanks a lot for sharing! For sure this'll help a lot of people as it is
really asked very often in any language throughout all mailing lists! :)
Regards,
Jochen
Jean-Baptiste Rio wrote:
> Every month in the typo3.english list, someone asks for the famous
> question "How to use optionSplit when it's not a menu ?".
> The answer is quite simple : "no way for the moment".
>
> But sometimes, it could be very useful to have this option in order to
> alternate styles or color in a table built with rows returned by a
> CONTENT or RECORDS object.
>
> So i tried to find a solution for this high quest based on one simple
> rule : no Typo3 core hack.
>
> The goal :
> - Build a CONTENT object and render it as a table
> - Alternate line styles
>
> The result :
>
> First of all, i need to count each line. Is it possible in typoscript ?
> => Yes, with an undocumented getText property : *cobj : parentRecordNumber*
> This property is set as the row number (1,2,3,4,5...) for CONTENT and
> RECORDS results
>
> So my typoscript is :
>
> 20 = CONTENT
> 20 {
> table = tx_myext_mytable
>
> renderObj = COA
> renderObj {
> stdWrap.innerWrap = <tr> | </tr>
> stdWrap.innerWrap.addParams.class = |
> stdWrap.innerWrap.addParams.class.data = cobj : parentRecordNumber
> stdWrap.innerWrap.addParams.class.postUserFunc = user_optionSplit
> stdWrap.innerWrap.addParams.class.postUserFunc.optionSplit =
> |*|odd||even|*|
>
> ...
>
> }
>
> And the php function is light version of the menu optionSplit function :
>
> function user_optionSplit($content, $conf) {
>
> // Initialize variables:
> $content = intval($content);
>
> if ($content && is_array($conf)) {
>
> $val = $conf['optionSplit'];
> // Splitting of all values on this level of the TypoScript
> object tree:
> if (!strstr($val,'|*|') && !strstr($val,'||')) {
> return $val;
> } else {
> $main = explode ('|*|',$val);
> $mainCount = count($main);
>
> $lastC = 0;
> $middleC = 0;
> $firstC = 0;
>
> if ($main[0]) {
> $first = explode('||',$main[0]);
> $firstC = count($first);
> }
> if ($main[1]) {
> $middle = explode('||',$main[1]);
> $middleC = count($middle);
> }
> if ($main[2]) {
> $last = explode('||',$main[2]);
> $lastC = count($last);
> $value = $last[0];
> }
>
> $aKey = $content - 1;
> if ($firstC && isset($first[$aKey])) {
> $value = $first[$aKey];
> } elseif ($middleC) {
> $value = $middle[($aKey-$firstC)%$middleC];
> }
> if ($lastC && $lastC>=($content-$aKey)) {
> $value = $last[$lastC-($content-$aKey)];
> }
> return trim($value);
> }
> }
> return $content;
> }
>
> You have to include this function in a library and include your library
> in the TS template :
>
> #include library
> includeLibs.commonLib = fileadmin/common/my_option_split_lib.php
>
> That's all !!
>
> Enjoy :)
>
> Jean-Baptiste
>
--
:: innovative it-strategies ::
:: ::
:: www.connecta.ag ::
More information about the TYPO3-dev
mailing list