无法从顶层Fluid模板调用控制器动作

问题描述 投票:1回答:2

我有一个自写的TYPO3扩展名(我使用ext:extension_builder创建它)

我的顶级TypoScript看起来像这样:

page = PAGE
page.10 = FLUIDTEMPLATE
page.10 {
    format = html
    file = EXT:cmsp/Resources/Private/Templates/User/Default.html
    partialRootPaths {
        10 = EXT:cmsp/Resources/Private/Partials/
    }
    layoutRootPaths {
        10 = EXT:cmsp/Resources/Private/Layouts/
    }
    templateRootPaths
        10 = EXT:cmsp/Resources/Private/Templates/
    }
    variables {
        content_main < styles.content.get
        content_main.select.where = colPos = 0
    }
}

我使用了一个简单的Fluid Styled Content模板:

<f:link.action controller="user" action="search" class="btn btn-secondary">action link</f:link.action>

search操作已在ext_localconf.php中注册:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    'SimpleParser.Cmsp',
    'Cmspfe',
     [
         'User' => 'list,search'
     ],
     // non-cacheable actions
     [
         'User' => 'list,search'
     ]
);

我也有模板Search.html

<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<f:layout name="Search" />

<f:section name="content">
    <h1>Search Template</h1>

    <f:flashMessages />

    <table  class="tx_cmsp" >
        <tr>
            <th> </th>
            <th> </th>
        </tr>
    </table>
     <form action="SearchConfim.php">
        Searchterm: <input type="text" name="sTerm"><br>
<input type="submit" value="Submit">
</form> 
</f:section>
</html>

问题是我无法在网站前端中创建或跟踪从顶层Default.htmlFLUIDTEMPLATE对象)到Search.html(Extbase控制器模板)的链接:

<f:link.action controller="user" action="search" class="btn btn-secondary">action link</f:link.action>

即使单击控制器的动作链接,我也一直保持在Default.html上。我可以使用

创建外部链接
<f:link.external ... ></f:link.external>

外部链接正在工作,但是我无法使用链接来访问Search.html。也许问题是我使用的TypoScript无法激活控制器(以正确的方式)。但是我很高兴有人可以帮助我。

typo3 fluid extbase fluid-styled-content
2个回答
0
投票

您的控制器名称是具有大写字母U的用户。在f:link.action中使用相同的名称,如果不更改控制器,甚至可以删除此参数。


0
投票

Default.html似乎是FLUIDTEMPLATE中顶层渲染模板​​的名称。因此,我假设将<f:link.action ...标记放置在该文件中-至少当前生成的链接似乎可以确认它,如下所示:

index.php?id=1
&tx__%5Baction%5D=search
&tx__%5Bcontroller%5D=User
&cHash=dffabf13e973c371d14fb2e34b23d1a0

它使用tx__作为前缀,实际上应该类似于tx_cmsp_cmspfe(您的扩展名和要使用的相应插件名称的组合。)]

简要说明
  • Default.html模板不在Extbase范围内,因此不知道当前应使用的扩展,控制器和插件

  • 通常链接出现在具有相同扩展名的模板中(例如Resources/Private/Templates/List.html中的]
  • 否则必须明确定义范围(如下所示)
  • 在顶级渲染模板中放置指向Extbase插件的链接的解决方案

    此示例可以在Default.html模板的Extbase范围之外用于当前页面布局,但是,它必须显式地使用正确的Extbase插件范围:

    <f:link.action
        action="search"
        controller="User"
        pluginName="Cmspfe"
        extensionName="Cmsp"
        pageUid="4321"
        class="btn btn-secondary">
    
        action link
    </f:link.action>
    
    © www.soinside.com 2019 - 2024. All rights reserved.