[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