我正在开发一个TYPO3 6.0插件,它将当前页面的子页面显示为标签。例如,在以下页面中,我的插件插入TabRoot
:
如果请求TabRoot
,插件的ActionController
会在数据库中查找子页面标题和内容,并将所有收集的数据传递给Fluid模板。然后该页面呈现如下:
有了JS,我总是根据选择隐藏/显示下面的内容。我的问题是我想根据当前语言选择显示子页面的 翻译内容 。我怎么能这样做?我用几种方法尝试过它,但它们都没有完美无缺。这些是我尝试过的方法:
使用RECORDS
此方法不受所选语言的影响,它始终以默认语言返回内容:
//Get the ids of the parts of the page
$select_fields = "uid";
$from_table = "tt_content";
$where_clause = 'pid = ' . $pageId;
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
$select_fields,
$from_table,
$where_clause,
$groupBy='',
$orderBy='sorting',
$limit=''
);
$ids = '';
$firstIteration = true;
while ( $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc( $res ) ) {
if (!$firstIteration) $ids .= ",";
$ids .= $row ['uid'];
$firstIteration = false;
}
$GLOBALS['TYPO3_DB']->sql_free_result( $res );
//Render the parts of the page
$conf ['tables'] = 'tt_content';
$conf ['source'] = $ids;
$conf ['dontCheckPid'] = 1;
$content = $this->cObj->cObjGetSingle ( 'RECORDS', $conf );
使用CONTENTS
根据TYPO3: How to render localized tt_content in own extension,这是执行此操作的方法,但对我来说,这也会返回使用默认语言呈现的内容。它不受语言变化的影响。
$conf = array(
'table' => 'tt_content',
'select.' => array(
'pidInList' => $pageId,
'orderBy' => 'sorting',
'languageField' => 'sys_language_uid'
)
);
$content = $this->cObj->cObjGetSingle ( 'CONTENT', $conf );
使用VHS:Fluid ViewHelpers 我安装了vhs
扩展程序并尝试使用<v:content.render />
呈现内容。结果与CONTENTS
相同;它只适用于默认语言。
{namespace v=Tx_Vhs_ViewHelpers}
...
<v:content.render column="0" order="'sorting'" sortDirection="'ASC'"
pageUid="{pageId}" render="1" hideUntranslated="1" />
使用我自己的SQL查询我尝试获取页面的bodytext
字段,然后使用\TYPO3\CMS\Frontend\Plugin\AbstractPlugin::pi_RTEcssText()
呈现这些字段。此方法基于当前语言返回内容,但问题是bodytext
不包含完整内容(图像,其他插件等)。
$select_fields = "bodytext";
$from_table = "tt_content";
$where_clause = 'pid = ' . $pageId
. ' AND sys_language_uid = ' . $GLOBALS ['TSFE']->sys_language_uid;
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
$select_fields,
$from_table,
$where_clause,
$groupBy='',
$orderBy='sorting',
$limit=''
);
$content = '';
while ( $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc( $res ) ) {
$content .=
\TYPO3\CMS\Frontend\Plugin\AbstractPlugin::pi_RTEcssText( $row ['bodytext'] );
}
$GLOBALS['TYPO3_DB']->sql_free_result( $res );
我错过了什么?在CONTENTS
方法的情况下,为什么不使用当前语言呈现内容?
答案 0 :(得分:0)
在TYPO3 4.x中,您可以使用以下方法加载已翻译的记录:
t3lib_pageSelect->getRecordOverlay
t3lib_pageSelect->getPageOverlay
它们也可在$GLOBALS['TSFE']->sys_page->getRecordOverlay()
获得。
答案 1 :(得分:0)
最简单的方法是使用cObject viewhelper从TypoScript
直接呈现。
在TypoScript
模板中提供配置:
lib.myContent = CONTENT
lib.myContent {
...
}
顺便说一句,您正在绕过TYPO3 CMS API。请不要这样做。始终使用API方法查询数据。
例如\TYPO3\CMS\core\Database\DatabaseConnection
始终可以使用GLOBALS['TYPO3_DB']->
。请勿使用mysql
功能。
最重要的是,我相信您可以使用纯TypoScript
存档您想要做的任何事情,而无需编写任何内容。随意提出新问题以获得帮助。