问题描述
我想链接到一个页面,在那里我有一个插件,我想通过 GET 发送一个变量并在该页面中显示该插件的一些记录。
这个想法是有一个扩展,我可以有一个插件来列出记录和另一个插件来显示记录的详细视图。 (另一个为此创建一个新记录)
我收到了这个错误,但我不知道这是什么意思,我应该在哪里指定插件?作为哪个参数?因为 <f:link.page>
没有 pluginName 参数。
有不止一个插件可以处理这个请求(扩展: “MyExtension”,控制器:“MyController”,动作:“new”)。请 指定“pluginName”参数。
<f:link.page pageUid="{settings.pageUid}" additionalParams="{theIdINeed: theIdINeed}">
link
</f:link.page>
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'Myvendor.MyExtension','ViewPlugin',[
\Myvendor\MyExtension\Controller\TheController::class => 'show',],[
\Myvendor\MyExtension\Controller\TheController::class => '',]
);
public function showAction()
{
$model = $this->someRepository->findByUid( $_GET['theIdIneed']);
$this->view->assign('model',$model);
}
解决方法
您通常使用特定参数,例如 theIdIneed
、pluginname[action]
和 pluginname[controller]
,而不是一般参数 (pluginname[tablename]
)。
如果大多数情况下您有一个带有 pluginname[tablename]
的 ID,很明显您希望使用匹配的控制器 show
这条记录并且可以省略这些参数。
通过这种方式识别插件。
为了更好的可读性,您可以将此参数映射到伪路径段(slugs)中。
另一个想法(您可能需要更具体):
如果您在页面上多次插入相同的插件,并且您希望这些不同的内容元素表现不同,则需要额外的信息。要么存储在全局变量中(例如 ext:news 存储已显示新闻的列表,因此同一新闻不会在同一页面上多次调侃),或者您提供一个附加参数(tt_content 记录的 uid)来标识特定插件应该回应。但您需要自行评估。
请使用