[TYPO3-dev] [BE] makeInstance and call userfunc
Oliver Hader
oh at inpublica.de
Tue Jan 29 18:43:56 CET 2008
Hi,
Gijs Epping schrieb:
> Francois Suter schreef:
>> Hi,
>>
>>> Thanks, i replaced $this->IMAGE(); with
>>> $GLOBALS['TSFE']->cObj->IMAGE() and that is working but not for:
>>>
>>> $GLOBALS['TSFE']->cObj->pi_linkTP_keepPIvars_url
>>
>> No, this can't work. "cObj" is an instance of tslib_cObj, but
>> pi_linkTP_keepPIvars_url is a property of the tslib_pibase class.
>> There's no instance of tslib_pibase in the globals, because it is
>> instantianted specifically for each plugin.
>>
>> But if you create an instance of your plugin, e.g.
>>
>> $myplugin = t3lib_div::makeInstance('myplugin');
>>
>> then you can access the aforementioned variable as
>>
>> $myplugin->pi_linkTP_keepPIvars_url
>>
>> since your plugin class is supposed to extend tslib_pibase.
>>
>> HTH
>>
>
>
> he Francois,
>
> In pi3 i call pi1 with this: (thanks to you)
>
> $piConf = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_efrpho_pi1.'];
> $obj = t3lib_div::makeInstance("tx_efrpho_pi1");
> $content = $obj->main('',$piConf);
>
>
> In pi1 i tryed using $this->pi_linkTP_keepPIvars_url(); But then i get
> the following error:
>
> Fatal error: Call to a member function typoLink() on a non-object in.
>
>
> This is the inititation code of pi1:
>
> class tx_efrpho_pi1 extends tslib_pibase{
>
> }
>
> This should work as you say but it isn't.
>
> Any idea's?
The are two way how you can call a method of a different plugin from a
plugin.
1) Using TypoScript:
plugin.tx_efrpho_pi3.renderObjPi1 = USER
plugin.tx_efrpho_pi3.renderObjPi1.userFunc = tx_efrpho_pi1->main
plugin.tx_efrpho_pi3.renderObjPi1.anyOtherKey = my_data_whatever
or e.g. simpler by just using
plugin.tx_efrpho_pi3.renderObjPi1 < plugin.tx_efrpho_pi1
and then in the PHP code of class tx_efrpho_pi3:
class tx_efrpho_pi3 extends tslib_pibase {
...
function main($content, $conf) {
...
$content.= $this->getpi1content($content, $conf);
...
}
function getpi1content($content, $conf) {
return $this->cObj->cObjGetSingle(
$conf['renderObjPi1'],
$conf['renderObjPi1.']
);
}
}
2) Using the PHP only approach:
class tx_efrpho_pi3 extends tslib_pibase {
...
function main($content, $conf) {
...
$content.= $this->getpi1content($content, $conf);
...
}
function getpi1content($content, $conf) {
$piConf = $GLOBALS['TSFE']->tmpl->...
$piObj = t3lib_div::makeInstance("tx_efrpho_pi1");
$piObj->cObj =& $this->cObj;
$piObj->theVerySpecialFunction($piConf, ...);
}
}
olly
--
Oliver Hader
http://inpublica.de/
More information about the TYPO3-dev
mailing list