如何在 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(...);

}

如果您需要在每个插件基础上切换它,请通过读取配置变量来决定使用哪个模板。