如何更改 TYPO3 页面树中选定的条目

问题描述 投票:0回答:3

我正在制作一个后端扩展,通过单击页面树右侧工作区域中的链接来更改它正在处理的页面。问题是:页面树不会根据工作区中显示的 ID 进行更新。

通过将查询参数 ID 传递给 mod.php-module 来更改 ID,并按预期工作。我尝试通过

更新页面树
 t3lib_BEfunc::openPageTree($this->id);
   t3lib_BEfunc::setUpdateSignal('updatePageTree');

及以后

 

包含在输出中。这也有效(页面树被刷新,并且所传递的 ID 的隐藏子页面被显示),除了指示页面树中当前页面的灰色保留在其先前的位置。

关于如何使页面树反映新的

$this->id
,有什么想法吗?

typo3
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']
。遗憾的是,我无法确定如何在那里正确注入值。在我看来,该值只能通过用户交互进行调整(也就是说,用户单击页面树中的节点)。


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 :)


0
投票

在 TYPO3 11 中,

fsMod
已被
ModuleStateStorage
取代:https://docs.typo3.org/c/typo3/cms-core/main/en-us/Changelog/11.4/Deprecation-94762-DeprecateJavaScriptTopfsModState。 html

ModuleStateStorage.update('web', 123, true, '0');
© www.soinside.com 2019 - 2024. All rights reserved.