1
我有一個基於TemplaVoila的TYPO3網站,我需要從eID腳本中訪問我的電視頁面內容。如何從我的腳本訪問該CE字段中的內容?我知道如何爲eID腳本提供所需頁面的ID和電視字段的名稱。從eID腳本訪問TemplaVoila內容
似乎我無法從我自己的擴展或eID腳本中找到有關如何訪問電視內容的任何信息,儘管我在網上來回搜索。
我有一個基於TemplaVoila的TYPO3網站,我需要從eID腳本中訪問我的電視頁面內容。如何從我的腳本訪問該CE字段中的內容?我知道如何爲eID腳本提供所需頁面的ID和電視字段的名稱。從eID腳本訪問TemplaVoila內容
似乎我無法從我自己的擴展或eID腳本中找到有關如何訪問電視內容的任何信息,儘管我在網上來回搜索。
我的問題的基本問題是,eID過程不適用於需要像TV記錄機制或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渲染器,我會很樂意接受您的更好的答案!