我正在制作一个后端扩展,通过单击页面树右侧工作区域中的链接来更改它正在处理的页面。问题是:页面树不会根据工作区中显示的 ID 进行更新。
通过将查询参数 ID 传递给 mod.php-module 来更改 ID,并按预期工作。我尝试通过
更新页面树t3lib_BEfunc::openPageTree($this->id); t3lib_BEfunc::setUpdateSignal('updatePageTree');
及以后
包含在输出中。这也有效(页面树被刷新,并且所传递的 ID 的隐藏子页面被显示),除了指示页面树中当前页面的灰色保留在其先前的位置。
关于如何使页面树反映新的
$this->id
,有什么想法吗?
我就是这样做的。在我的 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']
。遗憾的是,我无法确定如何在那里正确注入值。在我看来,该值只能通过用户交互进行调整(也就是说,用户单击页面树中的节点)。
在 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"> </span></a>
只需将“uid_page”替换为您正确的 uid :)
在 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');