如何在TYPO3页面树中更改所选条目

7
我正在制作一个后端扩展,通过在页面树右侧的工作区单击链接来更改它正在处理的页面。问题是:页面树没有根据工作区中呈现的ID进行更新。
通过将查询参数ID传递到mod.php模块来更改ID,并且按预期工作。我尝试通过以下方式更新页面树:
t3lib_BEfunc::openPageTree($this->id); t3lib_BEfunc::setUpdateSignal('updatePageTree');
稍后,在输出中包含以下内容:
这也有效果(刷新了页面树,并显示了传递ID的隐藏子页面),但是,在页面树中指示当前页面的灰度值保留在其先前位置。
有什么想法可以让页面树反映新的$this->id吗?

你找到解决方案了吗?你指的是哪个版本的TYPO3? - Mateng
抱歉,目前还没有找到任何东西。这个项目已经被忽视了一段时间,但似乎又重新获得了动力(取决于客户资金),所以我可能会在接下来的几个月里再次研究它。我会分享任何我找到的解决方案。感谢你在我的脑海中提出这个问题。 - norwebian
要不要考虑设置悬赏?如果你愿意继续维护这个问题,我可以“捐献”100声望分给你 :)。 - Mateng
这真是太棒了,Mateng!就我而言,我仍在等待相关客户的决定。很抱歉没有时间去研究它,但我相信这将是对知识库的一个很好的贡献。 - norwebian
奇怪,还没有回答。看起来有点可疑。顺便问一下,你能包含 TYPO3 版本吗? - Mateng
它是在4.4.0中实现的,所以需要更新,这将成为该项目复兴的一部分。本应在假期前完成,但目前还存在一个关于修补与重写的问题,不确定应该做什么。 - norwebian
3个回答

2

以下是我的做法。在我的BE模块的PHP代码中,我只调用了openPageTree

t3lib_BEfunc::openPageTree(76,false);

我没有调用setUpdateSignal,因为整个“更新信号”过程对我来说有点奇怪。请注意, openPageTree 现在有第二个必填参数。

据我理解,这个调用足以在用户会话服务器端设置树的状态。现在是客户端的工作。

在我的扩展程序的JavaScript代码中,我只需选择适当的页面ID即可:

<script type="text/javascript">
  if (top && top.TYPO3.Backend.NavigationContainer.PageTree) {
    top.TYPO3.Backend.NavigationContainer.PageTree.select(76);
  }
</script>

浏览页面树的源代码时,我发现每次刷新后它都会选择top.fsMod.recentIds['web']。可惜的是,我无法确定如何在那里正确注入一个值。在我看来,该值似乎只应通过用户交互进行调整(也就是说,用户点击了页面树中的一个节点)。


Oliver,你的建议可能需要一些时间才能得到验证。我猜Norwebian会让我们知道这是否有效。 - Mateng
@Mateng:没问题。我很想知道这是否真正解决了他的问题,还是只是看起来没问题 :) - Oliver Salzburg
感谢您对我的问题的关注!我刚刚重新访问了stackoverflow并看到了您的解决方案。我非常感激,将尽快测试它。 - norwebian

0
在 TYPO3 6.1 中,您可以使用 Javascript 函数跳转到 Web 模块:
/**
 * jump the backend to a module
 */
function jump(url, modName, mainModName, pageId) {
    if (isNaN(pageId)) {
        pageId = -2;
    }
    // clear information about which entry in nav. tree that might have been highlighted.
    top.fsMod.navFrameHighlightedID = [];
    top.fsMod.recentIds['web'] = pageId;

    if (top.TYPO3.Backend.NavigationContainer.PageTree) {
        top.TYPO3.Backend.NavigationContainer.PageTree.refreshTree();
    }

    top.nextLoadModuleUrl = url;
    top.TYPO3.ModuleMenu.App.showModule(modName);
}

你可以这样使用它:
<a onclick="jump('alt_doc.php?&edit[pages][\'uid_page\']=edit','web_list', 'web', 'uid_page')" href="#"><span class="t3-icon t3-icon-actions t3-icon-actions-document t3-icon-document-open">&nbsp;</span></a>

只需将“uid_page”替换为您正确的UID即可 :)


为了可移植性,您应该使用某个实用程序函数替换 alt_doc.php 以获取 URL。此外,请参见 https://docs.typo3.org/typo3cms/extensions/core/8.7/singlehtml/Index.html#breaking-72360-removed-deprecated-entry-point-fallback。 - Sybille Peters
https://docs.typo3.org/typo3cms/extensions/core/latest/Changelog/8.0/Breaking-72360-RemovedDeprecatedEntryPointFallback.html - Sybille Peters

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接