【问题标题】:TYPO3 RealUrl - shorten extbase detail path to second levelTYPO3 RealUrl - 将 extbase 详细信息路径缩短到第二级
【发布时间】:2017-05-20 12:50:37
【问题描述】:

我有一个自己的作业插件,带有一个列表和一个显示视图(在同一页面上)。 我在 realurl_conf.php 的“postVarSets”中输入了我的参数(按“job-view”分组),所以我的链接如下所示:

/jobs - 列表视图

/jobs/job-view/show/Job/testjob - 详细视图


现在我可以使用“encodeSpURL_postProc”缩短我的路径:

$params['URL'] = str_replace('job-view/show/Job', 'job-detail', $params['URL']);

并通过解码

$params['URL'] = str_replace('job-detail', 'job-view/show/Job', $params['URL']);

/jobs - 列表视图

/jobs/job-detail/testjob - 详细视图


但我希望我的详细视图看起来像:

/jobs/testjob

但是我不能用

$params['URL'] = str_replace('jobs/job-view/show/Job', 'jobs', $params['URL']);

因为解码

$params['URL'] = str_replace('jobs', 'jobs/job-view/show/Job', $params['URL']);

还会尝试将列表视图解码回来。


那么,是否可以将详情页的URL路径缩短到二级呢?

【问题讨论】:

  • 你尝试过使用 switchableControllerActions 吗?
  • 不知道switchableControllerActions跟这个有什么关系?

标签: typo3 extbase realurl


【解决方案1】:

使用fixedPostVars 和 TS 条件的组合很容易实现。

假设您的扩展程序的参数类似于tx_jobs_list,您将在 realurl 配置中拥有以下内容:

'fixedPostVars' => [
   $jobDetailPagePid => [
        [
            'GETvar' => 'tx_jobs_list[uid]',
            'lookUpTable' => [
                ...
            ]
        ],
        [
            'GETvar' => 'tx_jobs_list[controller]',
            'noMatch' => 'bypass'
        ],
        [
            'GETvar' => 'tx_jobs_list[action]',
            'noMatch' => 'bypass'
        ],
   ],
],

$jobDetailPagePid 必须是页面 ID。你不能在这里使用_DEFAULT

详情页还需要TS条件:

[globalString = GP:tx_jobs_list|uid = /\d+\]
config.defaultGetVars {
    tx_jobs_list {
        controller = List
        action = single
    }
}
[global]

就是这样。

【讨论】:

  • 良好且高效的解决方案。不过,有一个需要提到的要求:listshow 需要在同一个插件/switchableControllerAction 中运行(在同一页面上)。如果您需要一个专用页面或扩展程序为 listshow 强制执行单独的插件,无论出于何种原因,这都无济于事。
  • 我的详细信息页面上还有一个 ajax url - 这个也将使用默认的单个操作 - 我可以以某种方式排除 ajax url 吗?
  • @undko,不是真的。我们在许多项目的不同页面上使用它。
  • @PhilippParzer,是的,您仍然可以使用valueMap,但请保留noMatch,并且不要在valueMap 中添加单个。
  • @DmitryDulepov 我指的是 Philipp 的要求,他想要 /jobs 用于列表,/jobs/job-title 用于单 - 这不能用你的建议在不同的页面上实现,可以吗?如果有,怎么做?
【解决方案2】:

仔细查看文档:https://github.com/dmitryd/typo3-realurl/wiki/Configuration-reference#fixedpostvars 也许这可以帮助你。

我无需更改解码/编码功能即可获得所需的功能。

【讨论】:

  • 这种情况下的 URL 将是:/listPage/newsDetail/Testnews - 但我希望它是:/listPage/Testnews
  • @philipp-parzer /newsDetail/Testnews 你可以接受吗?这就是我通常的方式。
  • 这是我的问题的重点 - 是否有可能摆脱路径“newsDetail”?
  • 我的建议是/jobs 用于列表,/job/job-title-slug 用于单一视图。我认为这是创建 uris 的最“说话”的方式,因为它使用正确的语法数字。不幸的是,news 失败了,至少在英语中:-(.
【解决方案3】:

您可以在 real_conf.php 文件中使用encodeSpURL_postProcdecodeSpURL_preProc,如下所示。

'encodeSpURL_postProc' => array('user_encodeSpURL_postProc'),
'decodeSpURL_preProc' => array('user_decodeSpURL_preProc'),

function user_encodeSpURL_postProc(&$params, &$ref) {
   $params['URL'] = str_replace('jobs', 'job-view/show/Job/', $params['URL']);
}
function user_decodeSpURL_preProc(&$params, &$ref) {
   $params['URL'] = str_replace('job-view/show/Job/', 'jobs', $params['URL']);
}

【讨论】:

  • 首先,您切换了这两个功能 - 但主要问题是,此路径也会覆盖列表视图路径,即“/jobs”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多