我有一个基于TemplaVoila的TYPO3网站,我需要从eID脚本中访问我的电视页面内容。如何从我的脚本访问该CE字段中的内容?我知道如何为eID脚本提供所需页面的ID以及TV字段的名称。
我似乎找不到有关如何从我自己的扩展程序或eID脚本中访问电视内容的任何信息,尽管我来回搜索网页。
答案 0 :(得分:0)
我的问题的基本问题是,eID流程不适用于需要像电视录制机制或TYPO3 HTML渲染器这样复杂的TYPO3功能的任务。
我实际上考虑过使用专用页面类型恢复到完整的TYPO3引擎。但是我不得不在一个页面中多次调用我的代码来从电视内容中呈现图像,所以我不得不寻找一个简化的过程。我决定继续使用eID,而不是启动完整的TYPO3核心。
这是我最终提出的黑客攻击。
警告:
此代码有许多缺点:
但这对我的特殊问题很有效(单一语言网站,PDF渲染器使用创建的HTML)。所以它也可以帮助别人。
<?php
if (!defined('PATH_typo3conf'))
die('Could not access this script directly!');
tslib_eidtools::connectDB(); //Connect to database
$id = t3lib_div::_GP('id');
$htmlData = readContentfromDB($id, 'myFieldName');
if(is_string($htmlData)) exit('Error: '.$htmlData);
$html = $htmlData['html'];
$lastChange = $htmlData['tstamp'];
exit($html);
// ----------
// readContentfromDB()
// returns string with error msg or assoc array with array( 'html'=>string([HTML CODE]), 'tstamp'=>int([LAST CHANGE TIMESTAMP]) )
// ----------
function readContentfromDB($id, $fieldName){
global $TYPO3_DB;
$res = $TYPO3_DB->exec_SELECTgetRows('tx_templavoila_flex', 'pages', 'uid='.(int)$id);
if(!$res) return 'Reading flexXML from page '.$id.' failed.';
$flexXml = simplexml_load_string($res[0]['tx_templavoila_flex']);
$recordsNodes = $flexXml->xpath('//field[@index="'.$fieldName.'"]/value');
$records = explode(',', (string)$recordsNodes[0]);
$html = '';
$htmlTstamp = 0;
foreach($records as $rec){
$res = $TYPO3_DB->exec_SELECTgetRows('header, bodytext, tstamp', 'tt_content', "uid=$rec");
if(!$res) return 'Reading tt_content record '.$rec.' failed.';
$tstamp = (int)$res[0]['tstamp'];
$htmlTstamp = max($tstamp, $htmlTstamp);
$header = '<h1>' . $res[0]['header'] . '</h1>';
$bodyRaw = $res[0]['bodytext'];
$bodyArr = explode("\n", $bodyRaw);
$body = '';
foreach($bodyArr as $bodyLine) $body .= '<p>'.trim($bodyLine).'</p>';
$html .= $header . $body;
}
return array('html'=>$html, 'tstamp'=>$htmlTstamp);
}
// ----------
?>
如果有人想出一种在eID中使用原始TYPO3渲染器的方法,我将很乐意接受您的更好答案!