从其他插件的主体调用TYPO3插件

时间:2011-08-26 11:34:53

标签: typo3 typoscript typo3-tca

我需要从其他插件的主体调用typo3插件并将其结果传递给模板。这是伪代码,描述了我想要实现的目标:

$data['###SOME_VARIABLE###'] = $someOtherPlugin->main();
$this->cObj->substituteMarkerArray($someTemplate, $data);

有可能吗?

谢谢!

5 个答案:

答案 0 :(得分:6)

如果你使用整个pi结构,它不起作用,例如对于链接,标记功能等,TSFE数据可能已损坏。

德米特里说: http://lists.typo3.org/pipermail/typo3-english/2008-August/052259.html

$cObjType = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_rgsmoothgallery_pi1'];
$conf = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_rgsmoothgallery_pi1.'];
$cObj = t3lib_div::makeInstance('tslib_cObj');
$cObj->start(array(), '_NO_TABLE');
$conf['val'] = 1;
$content = $cObj->cObjGetSingle($cObjType, $conf); //calling the main method

答案 1 :(得分:4)

你应该使用t3lib_div:makeInstance方法。

TYPO3的“powermail”扩展程序有一个工作示例。

function getGeo() {
    // use geo ip if loaded
    if (t3lib_extMgm::isLoaded('geoip')) {
        require_once( t3lib_extMgm::extPath('geoip').'/pi1/class.tx_geoip_pi1.php');
        $this->media = t3lib_div::makeInstance('tx_geoip_pi1');
        if ($this->conf['geoip.']['file']) { // only if file for geoip is set
            $this->media->init($this->conf['geoip.']['file']); // Initialize the geoip Ext
            $this->GEOinfos = $this->media->getGeoIP($this->ipOverride ? $this->ipOverride : t3lib_div::getIndpEnv('REMOTE_ADDR')); // get all the infos of current user ip
        }
    }

}

答案 2 :(得分:1)

@mitchiru的答案很好,基本上是正确的。

如果您使用Kickstarter创建了外部扩展,并且您正在使用pi_base,那么已经有一个tslib_cObj实例,整个构造变得更简单:

// get type of inner extension, eg. USER or USER_INT
$cObjType = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_innerextension_pi1'];
// get configuration array of inner extension
$cObjConf = $GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_innerextension_pi1.'];
// add own parameters to configuration array if needed - otherwise skip this line
$cObjConf['myparam'] = 'myvalue';
// call main method of inner extension, using cObj of outer extension
$content = $this->cObj->cObjGetSingle($cObjType, $cObjConf);

答案 3 :(得分:0)

首先,您必须在使用之前或在课堂之外包含您的插件类:

include_once(t3lib_extMgm::extPath('myext').'pi1/class.tx_myext_pi1.php');

其次在你的代码中(在主要的例子中)

$res = tx_myext_pi1::myMethod();

答案 4 :(得分:0)

这肯定会有效(我已经检查过了):http://lists.typo3.org/pipermail/typo3-english/2008-August/052259.html

Fedir的答案可能也是正确的,但我没有机会尝试。

干杯!