Вызов плагина TYPO3 из тела другого плагина - PullRequest
4 голосов
/ 26 августа 2011

Мне нужно вызвать плагин typo3 из тела другого плагина и передать его результат в шаблон.Это псевдокод, описывающий то, чего я хочу добиться:

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

Возможно ли это?

Спасибо!

Ответы [ 5 ]

6 голосов
/ 04 декабря 2012

Это работает, если вы используете всю конструкцию 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
4 голосов
/ 29 августа 2011

Вы должны использовать метод t3lib_div: makeInstance.

Есть рабочий пример из расширения "powermail" TYPO3.

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
        }
    }

}
1 голос
/ 21 марта 2014

Ответ @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);
0 голосов
/ 29 августа 2011

Это будет работать наверняка (я проверял это): http://lists.typo3.org/pipermail/typo3-english/2008-August/052259.html.

Возможно, ответ Федира тоже верен, но у меня не было возможности его попробовать.

ура!

0 голосов
/ 26 августа 2011

Во-первых, вы должны включить свой класс плагина перед его использованием или за его пределами:

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

Во-вторых, в своем коде (в основном в качестве примера)

$res = tx_myext_pi1::myMethod();
...