我需要从其他插件的正文中调用typo3插件并将其结果传递给模板。这是描述我想要实现的目标的伪代码:
$data['###SOME_VARIABLE###'] = $someOtherPlugin->main();
$this->cObj->substituteMarkerArray($someTemplate, $data);
可能吗?
谢谢!
我需要从其他插件的正文中调用typo3插件并将其结果传递给模板。这是描述我想要实现的目标的伪代码:
$data['###SOME_VARIABLE###'] = $someOtherPlugin->main();
$this->cObj->substituteMarkerArray($someTemplate, $data);
可能吗?
谢谢!
如果您使用整个 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
您应该使用 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
}
}
}
@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);
首先,您必须在使用之前或在您的类之外包含您的插件类:
include_once(t3lib_extMgm::extPath('myext').'pi1/class.tx_myext_pi1.php');
其次在您的代码中(主要作为示例)
$res = tx_myext_pi1::myMethod();
这肯定会起作用(我已经检查过了): http: //lists.typo3.org/pipermail/typo3-english/2008-August/052259.html。
可能费迪尔的回答也是正确的,但我没有机会尝试。
干杯!