1

我有一个自写的 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
    }
}

我使用了一个简单的流体样式内容模板:

<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 没有激活控制器(以正确的方式)。但如果有人能帮助我,我很高兴。

4

2 回答 2

0

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

于 2019-12-25T18:57:18.493 回答
0

好像Default.htmlFLUIDTEMPLATE. 因此,我假设该<f:link.action ...标签已放置在该文件中 - 至少当前生成的链接似乎可以确认它,并且如下所示:

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

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

简要说明

  • Default.html模板在 Extbase 范围之外,因此不知道应该使用的当前扩展、控制器和插件
  • 通常链接出现在相同扩展名的模板中(例如 in 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>
于 2019-12-26T13:34:00.783 回答