[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