Routes Typo3自定义扩展路径增强器

Routes Typo3自定义扩展路径增强器,routes,typo3,typo3-9.x,typo3-extensions,Routes,Typo3,Typo3 9.x,Typo3 Extensions,我已经使用extension Builder扩展创建了一个定制的Typo3 v9.5.26扩展 我的扩展名驻留在typo3conf/ext/xyz_sortitems中,并对项目进行排序 项目具有itemid、name、date和amount属性 我的ext_localconf.php如下所示: 我的分机按预期工作 现在,当我查看显示项目排序列表(例如,按日期排序)的页面前端时,Fluid template engine会生成该列表中的项目到相应目标页面(每个页面显示一个项目)的链接,如下所

我已经使用extension Builder扩展创建了一个定制的Typo3 v9.5.26扩展

我的扩展名驻留在typo3conf/ext/xyz_sortitems中,并对项目进行排序

项目具有itemid、name、date和amount属性

我的ext_localconf.php如下所示:


我的分机按预期工作

现在,当我查看显示项目排序列表(例如,按日期排序)的页面前端时,Fluid template engine会生成该列表中的项目到相应目标页面(每个页面显示一个项目)的链接,如下所示:

http://example.com/item  
?tx_xzysortitems_sortitems%5行动%5D=showsingleitem
&tx_xzysortitems_sortitems%5b控制器%5D=sortitems
&tx_xzysortitems_sortitems%5Bitemid%5D=12345
&cHash=38a2dd43d7b0c4997c3b0ff6d4430e55
相反,我需要有指向各个页面的链接,显示一个项目,如下所示:

http://example.com/item/{itemid}/{name}
(例如。http://example.com/item/12345/ice-cream-on-toast)
由于RealURL在Typo2V9中消失了,我显然需要typo3conf/ext/xyz_sortitems/config.yaml中的路由增强器,从Typo3数据库中扩展的表中读取itemid和name,并将这些值放入指向单个项页面的URL中

不幸的是,在我能找到的所有代码示例中,大约有90%都引用了Georg Ringer基于pi的“News”扩展作为示例。这个扩展是一个非常特殊的扩展(因为它是基于pi的,并且出于许多其他原因),并且纯粹重复关于这个扩展的示例并不能让我更容易理解这个主题。我能找到的其余10%的指令,包括官方的Typo3文档(目前)提供了很好的例子,但没有提到哪个值来自何处

我主要对config.yaml的顶部部分感兴趣:

routeEnhancers:
{SecondLine}:
类型:{typedefinition}
扩展名:{extensionname}
插件:{pluginname}
命名空间:{namespace}
限制页:
-{a_page_id}
-{另一个页面{u id}
路线:
#这里的路线。。。
我需要这些值中的哪一个,以及从何处获取这些值?

到目前为止,我发现的指令通常要么根本不解释这些值,要么用“从ext_localconf.php获取这些值”来引用它们。这对我没有多大帮助,因为这没有解释config.yaml中的哪个值与ext_localconf.php中的哪个值相对应,如果相应值的语法需要小写,第一个字母大写,其余字母小写或camelcase,如果需要单引号或双引号,转义,可以包含空格,需要下划线或语法要求的任何其他内容才能有效。像“扩展名”这样的术语可能会产生误导,在我的示例中,这可能是“sortitems”、“xyz_sortitems”、“xyz.sortitems”、“XyzSortitems”或“sortitems”,仅举一些例子


如果能给出一个config.yaml代码示例,以一般方式详细解释这些值,我将不胜感激,因此,每个阅读此问题并有相同问题的人都可以像我一样理解手册,将这些宝贵的知识轻松地应用到他们自己的自定义Type3扩展中。

根据您的问题,这是对这些值的解释

routeEnhancers:  
    {SecondLine}:  
      type: {typedefinition}  
      extension: {extensionname}  
      plugin: {pluginname}  
      namespace: {namespace}  
      limitToPages:  
        - {a_page_id}  
        - {another_page_id}  
      routes:  
      # routes here...
{SecondLine}的值 示例:XzySortitemsShow

增强子的唯一名称,内部用于引用

{typedefinition}的值 示例:Extbase

TYPO3附带了以下现成的路由增强器:

  • 简单增强子(增强子类型“简单”)
  • 插件增强器(增强器类型“Plugin”)
  • Extbase插件增强器(增强器类型“Extbase”)
中介绍了更多类型

{extensionname}的值 示例:XyzSortitems

扩展名的大写字母(文件夹的名称) 扩展)

来源:typo3_src-10.4.14/sysext/extbase/Classes/Utility/ExtensionUtility.php

configurePlugin()的函数参数为

来自configurePlugin()代码的注释 *@param string$extensionName 扩展名(大写) 或扩展键(在较低的下划线中)

{pluginname}的值 示例:Sortitems

来源:typo3_src-10.4.14/sysext/extbase/Classes/Utility/ExtensionUtility.php

configurePlugin()的函数参数为

来自configurePlugin()代码的注释

{名称空间} 是extbase类型的替代类型

可以找到示例并描述插件增强器

对于Extbase插件增强器,还可以配置 通过跳过扩展和插件属性和 只需使用常规插件增强器中的namespace属性

主题外
格奥尔格·林格的分机:新闻不是基于pi的

请注意,上面的大部分代码都是伪代码,以尽可能保持示例的通用性,同时保留最详细的变量名,以避免出现诸如“controller”或“extension”之类的不可理解的关键字。非常感谢您提供这些详细而清晰的信息!关键是我要直接写入typo3conf/sites/{sitename}/config.yaml而不是typo3conf/ext/xyz_sortitems/config.yaml.Alternate您可以将其导入typo3conf/sites/{sitename}/config.yaml:imports:-resource:'ext:xyz_sortitems/Configuration/Routes/Default.yaml'
public static function configurePlugin(
    $extensionName, 
    $pluginName, 
    array $controllerActions, 
    array $nonCacheableControllerActions = [], 
    $pluginType = self::PLUGIN_TYPE_PLUGIN)
public static function configurePlugin(
    $extensionName, 
    $pluginName, 
    array $controllerActions, 
    array $nonCacheableControllerActions = [], 
    $pluginType = self::PLUGIN_TYPE_PLUGIN)
* @param string $pluginName must be a unique id 
      for your plugin in UpperCamelCase 
      (the string length of the extension key 
      added to the length of the plugin name 
      should be less than 32!)