[TYPO3-english] Plugin Development

Kay Strobach typo3 at kay-strobach.de
Sat Sep 12 18:04:04 CEST 2009


Hello Dimitry,

The trick was to ensure, that $pid contains a pageId, that have a 
template. That was the problem during the debugging, with admin i used a 
page with a template with the normal user i used a subpage of the page 
with a template.

My solution was reading a constant which contains the id of the page 
with the template. Another solution would be to use 
t3lib_BEfunc::BEgetRootLine(...) and interate through the array until 
you find a page with a template on it.

Perhaps this information will help somebody.

Best regards

Kay Strobach

Kay Strobach schrieb:
> Hello Dimitry,
> 
> thanks for your answere.
>> Basically you did what I said: you moved 
>> "$GLOBALS['BE_USER']->user['admin'] = 1" above "$tce->start(...)".
> 
> This line was in the beginning of the function in the first post, thats 
> why i meant, thats not the goal - as far as i understand what you meant.
> 
> For some reason the following code is working now, I've debugged all the
> variables again and again - it was a small typo ...
> 
> Perhaps it's helpfully for someone else ;)
> 
> Thanks a lot.
> Best regards
> 
> Kay
> 
> 
> 
> function setTSConstantValue($pid,$name,$value) {
>            
>             $userStatus = $GLOBALS['BE_USER']->user['admin'];
>             $GLOBALS['BE_USER']->user['admin']=1;
> 
>             $template_uid = 0;
>             $pageId = $pid;
>             $tmpl = t3lib_div::makeInstance("t3lib_tsparser_ext");    // 
> Defined global here!
>             $tmpl->tt_track = 0;    // Do not log time-performance 
> information
>             $tmpl->init();
>     
>             $tplRow = $tmpl->ext_getFirstTemplate($pageId,$template_uid);
>             if (is_array($tplRow) || 1)    {
>                 $sys_page = t3lib_div::makeInstance("t3lib_pageSelect");
>                 $rootLine = $sys_page->getRootLine($pageId);
>                 $tmpl->runThroughTemplates($rootLine,$template_uid);    
> // This generates the constants/config + hierarchy info for the template.
>                 $theConstants = $tmpl->generateConfig_constants();    // 
> The editable constants are returned in an array.
>                 
> $tmpl->ext_categorizeEditableConstants($theConstants);    // The 
> returned constants are sorted in categories, that goes into the 
> $tmpl->categories array
>                 
> $tmpl->ext_regObjectPositions($tplRow["constants"]);        // This 
> array will contain key=[expanded constantname], value=linenumber in 
> template. (after edit_divider, if any)
>                
>                 $tmpl->ext_putValueInConf($name,$value);
>                
>                 $recData=array();
>                 $saveId = $tplRow['_ORIG_uid'] ? $tplRow['_ORIG_uid'] : 
> $tplRow['uid'];
>                 $recData["sys_template"][$saveId]["constants"] = 
> implode($tmpl->raw,chr(10));
>                            
>                 print_r($saveId);
>                
>                 // Create new  tce-object
>                 $tce = t3lib_div::makeInstance("t3lib_TCEmain");
>                 $tce->stripslashes_values=0;
>                 // Initialize
>                 $tce->start($recData,Array());
>                 // Saved the stuff
>                 $tce->process_datamap();
>                 // Clear the cache (note: currently only admin-users can 
> clear the cache in tce_main.php)
>                 $tce->clear_cacheCmd("all");
>                
>                
>                 $tce->admin = $userStatus;
>                 $GLOBALS['BE_USER']->user['admin']=$userStatus;
>                 
>             } else {
>                 throw new Exception('No Template found!!!');
>             }
>         }
> 
> 
>         function getTSConstantValue($pid,$name) {
>             $template_uid = 0;
>             $pageId = $pid;
>             $tmpl = t3lib_div::makeInstance("t3lib_tsparser_ext");    // 
> Defined global here!
>             $tmpl->tt_track = 0;    // Do not log time-performance 
> information
>             $tmpl->init();
>     
>             $tplRow = $tmpl->ext_getFirstTemplate($pageId,$template_uid);
>             if (is_array($tplRow) || 1)    {    // IF there was a 
> template...
>                     // Gets the rootLine
>                 $sys_page = t3lib_div::makeInstance("t3lib_pageSelect");
>                 $rootLine = $sys_page->getRootLine($pageId);
>                 $tmpl->runThroughTemplates($rootLine,$template_uid);    
> // This generates the constants/config + hierarchy info for the template.
>                 $theConstants = $tmpl->generateConfig_constants();    // 
> The editable constants are returned in an array.
>                 
> $tmpl->ext_categorizeEditableConstants($theConstants);    // The 
> returned constants are sorted in categories, that goes into the 
> $tmpl->categories array
>                 
> $tmpl->ext_regObjectPositions($tplRow["constants"]);        // This 
> array will contain key=[expanded constantname], value=linenumber in 
> template. (after edit_divider, if any)
>             } else {
>                 throw new Exception('No Template found!!!');
>             }
>             return $tmpl->setup['constants'][$name];
>         }


More information about the TYPO3-english mailing list