未登录后端时,扩展中的转换失败

时间:2017-12-22 08:18:07

标签: typo3 extbase typo3-8.x

我有一个extbase扩展,使用此

翻译页面上的一些变量
if (is_array($row) && $row['sys_language_uid'] != $GLOBALS['TSFE']->sys_language_content && $GLOBALS['TSFE']->sys_language_contentOL) {
     $row = $GLOBALS['TSFE']->sys_page->getRecordOverlay($table, $row,$GLOBALS['TSFE']->sys_language_content, $GLOBALS['TSFE']->sys_language_contentOL);
}

但是这是一个奇怪的错误。它只有在我登录后端时才有效。一旦我退出,我只能看到默认语言。

使用Typo3 8.7

任何想法可能会导致什么?

2 个答案:

答案 0 :(得分:0)

如果您在Typoscript设置中的页面对象上定义了config.sys_language_overlay = 0全局,则会发生这种情况。

Typo3 Forge中有一个ticket条目可以更深入地了解为什么会发生这种情况,并提供一些工作周期(如果您需要的话)。

答案 1 :(得分:0)

所以,我没有弄清楚问题是什么,但找到了我自己解决问题的方法。这是更新的代码:

$table = 'tx_myExt';
        $query = "SELECT * FROM ".$table." WHERE pid=".$pid;
        $query .= ' AND (sys_language_uid IN (-1,0) OR (sys_language_uid = ' .$GLOBALS['TSFE']->sys_language_uid. ' AND l10n_parent = 0))';
        $query .= " AND deleted=0 AND hidden=0";

        $res = $GLOBALS['TYPO3_DB']->sql_query($query);

        while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {

            //localization
            // check for language overlay if:
            // * row is valid
            // * row language is different from currently needed language
            // * sys_language_contentOL is set


            if (is_array($row) && $row['sys_language_uid'] != $GLOBALS['TSFE']->sys_language_content && $GLOBALS['TSFE']->sys_language_contentOL) {

                $query2 = "SELECT * FROM ".$table." WHERE pid=".$pid;
                $query2 .= ' AND sys_language_uid = ' .$GLOBALS['TSFE']->sys_language_content;
                $query2 .= ' AND l10n_parent = ' . $row['uid'];
                $query2 .= " AND deleted=0 AND hidden=0";

                $res2 = $GLOBALS['TYPO3_DB']->sql_query($query2);
                $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res2);

                //$row = $GLOBALS['TSFE']->sys_page->getRecordOverlay($table, $row,$GLOBALS['TSFE']->sys_language_content, $GLOBALS['TSFE']->sys_language_contentOL);
            }
}

因此,我只是重复查询而不是使用getRecordOverlay,而是直接访问已翻译的记录。我确实在某处读过这是不好的做法,但是,嘿,它现在有效,重要的是这一切;)

但是,如果有人找到解决原始问题的方法,我很乐意看到。