Шаблон изменения TYPO3 внутри метода действия

В моем расширении у меня есть метод singleAction. Я хочу изменить шаблон внутри этого метода, потому что у меня есть 2 шаблона для одного действия. Является ли это возможным? Если это невозможно, как я могу решить эту проблему? Может быть, сгенерировать другое действие?


person V-K    schedule 03.08.2016    source источник


Ответы (2)


Установить шаблон не так просто. setTemplate и getTemplate не существуют в представлении. Вы можете вернуться к реализации автономного представления, которая поддерживает использование setTemplatePathAndFilename

(пример скопирован из Ludwig)

/**
 * Renders the fluid email template
 * @param string $template
 * @param array $assign
 * @return string
 */
public function renderFluidTemplate($template, Array $assign = array()) {
    $templatePath = \TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName('EXT:myextension/Resources/Private/Templates/' . $template);

    $view = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Fluid\\View\\StandaloneView');
    $view->setTemplatePathAndFilename($templatePath);
    $view->assignMultiple($assign);

    return $view->render();
}

echo renderFluidTemplate('mail.html', array('test' => 'This is a test!'));

Вы также можете переключиться на другой шаблон с помощью typoscript.

plugin.tx_yourpluginname.view.templateRootPaths = EXT:extension_name/Resources/Private/CustomPath/Templates/

И это может быть помещено в любое условие типоскрипта, которое вы хотите.

person Pim Broens    schedule 08.08.2016
comment
Ха, оказывается, ты прав. Я использовал свой код в контексте StandaloneView. - person j4k3; 09.08.2016

Лучший способ справиться с этим — просто включить в шаблоне действия переключатель, загружающий другой фрагмент. Таким образом, весь поток логики остается нетронутым и сразу становится понятным для всех, кому впоследствии придется редактировать ваш код.

person Waldgeist    schedule 20.03.2020