如何在 TYPO3 中以不同的布局显示前端插件?
How to display frontend plugin in different layouts in TYPO3?
我有一个 TYPO3 前端插件,现在我想要两种不同的方式来显示 "list" 控制器。我怎样才能做到这一点?
您需要使用 flexform
作为前端插件,如下所示。
在你的 ext_tables.php 文件中。
//extenstion name
$extensionName = \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToUpperCamelCase($_EXTKEY);
//plugin integration
$frontendpluginName = 'Plugin name';
$pluginSignature = strtolower($extensionName) . '_'.strtolower(
$frontendpluginName
);
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
$pluginSignature,
'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/configure.xml'
);
现在在此路径上创建 configure.xml
文件 /Configuration/FlexForms/
<T3DataStructure>
<sheets>
<!--
################################
SHEET General Settings
################################
-->
<sDEF>
<ROOT>
<TCEforms>
<sheetTitle>General</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<!-- View -->
<settings.layout>
<TCEforms>
<label>Select Frontend Layout</label>
<config>
<type>select</type>
<items>
<numIndex index="0">
<numIndex index="0">Layout 1</numIndex>
<numIndex index="1">1</numIndex>
</numIndex>
<numIndex index="1">
<numIndex index="0">Layout 2</numIndex>
<numIndex index="1">2</numIndex>
</numIndex>
</items>
<size>10</size>
<minitems>0</minitems>
<maxitems>1</maxitems>
<suppress_icons>1</suppress_icons>
</config>
</TCEforms>
</settings.layout>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>
现在在前端模板文件中使用这个值,如下所示。
<f:if condition="{settings.layout} == 1">
<f:then>
Layout 1 html
</f:then>
<f:else>
Layout 2 html
</f:else>
</f:if>
我已经有一段时间没有使用它了,所以我不是 100% 这仍然是相关的,API 文档建议您仍然可以这样做:
public function listAction() {
{your_code}
$this->view->setTemplatePathAndFilename(
'typo3conf/ext/' .
$this->request->getControllerExtensionKey() .
'/{path_to}/OtherTemplate.html');
$this->view->assign(...);
}
如果您需要在每个插件基础上切换它,请通过读取配置变量来决定使用哪个模板。
我有一个 TYPO3 前端插件,现在我想要两种不同的方式来显示 "list" 控制器。我怎样才能做到这一点?
您需要使用 flexform
作为前端插件,如下所示。
在你的 ext_tables.php 文件中。
//extenstion name
$extensionName = \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToUpperCamelCase($_EXTKEY);
//plugin integration
$frontendpluginName = 'Plugin name';
$pluginSignature = strtolower($extensionName) . '_'.strtolower(
$frontendpluginName
);
$GLOBALS['TCA']['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
$pluginSignature,
'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/configure.xml'
);
现在在此路径上创建 configure.xml
文件 /Configuration/FlexForms/
<T3DataStructure>
<sheets>
<!--
################################
SHEET General Settings
################################
-->
<sDEF>
<ROOT>
<TCEforms>
<sheetTitle>General</sheetTitle>
</TCEforms>
<type>array</type>
<el>
<!-- View -->
<settings.layout>
<TCEforms>
<label>Select Frontend Layout</label>
<config>
<type>select</type>
<items>
<numIndex index="0">
<numIndex index="0">Layout 1</numIndex>
<numIndex index="1">1</numIndex>
</numIndex>
<numIndex index="1">
<numIndex index="0">Layout 2</numIndex>
<numIndex index="1">2</numIndex>
</numIndex>
</items>
<size>10</size>
<minitems>0</minitems>
<maxitems>1</maxitems>
<suppress_icons>1</suppress_icons>
</config>
</TCEforms>
</settings.layout>
</el>
</ROOT>
</sDEF>
</sheets>
</T3DataStructure>
现在在前端模板文件中使用这个值,如下所示。
<f:if condition="{settings.layout} == 1">
<f:then>
Layout 1 html
</f:then>
<f:else>
Layout 2 html
</f:else>
</f:if>
我已经有一段时间没有使用它了,所以我不是 100% 这仍然是相关的,API 文档建议您仍然可以这样做:
public function listAction() {
{your_code}
$this->view->setTemplatePathAndFilename(
'typo3conf/ext/' .
$this->request->getControllerExtensionKey() .
'/{path_to}/OtherTemplate.html');
$this->view->assign(...);
}
如果您需要在每个插件基础上切换它,请通过读取配置变量来决定使用哪个模板。