7

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

ID 通过将查询参数 ID 传递给 mod.php 模块来更改,并按预期工作。我尝试通过更新页面树

   t3lib_BEfunc::openPageTree($this->id);
   t3lib_BEfunc::setUpdateSignal('updatePageTree');

然后

   <script type="text/javascript">'.t3lib_BEfunc::getUpdateSignalCode().'</script>

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

关于如何使页面树反映新的任何想法$this->id

4

2 回答 2

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']在刷新后选择。可悲的是,我无法确定如何在那里正确注入价值。在我看来,该值似乎只能通过用户交互来调整(意思是用户点击了页面树中的一个节点)。

于 2012-11-23T18:49:09.897 回答
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 替换“uid_page”即可:)

于 2014-09-23T09:50:51.803 回答