Доступ к содержимому TemplaVoila из сценария eID

У меня есть веб-сайт TYPO3 на основе TemplaVoila, и мне нужно получить доступ к содержимому моей телевизионной страницы из сценария eID. Как я могу получить доступ к содержимому в этом поле CE из моего скрипта? Я знаю, как предоставить сценарию eID идентификатор нужной страницы и имя поля ТВ.

Кажется, что я не могу найти какую-либо информацию о том, как получить доступ к телевизионному контенту из моего собственного расширения или сценария eID, хотя я искал в Интернете взад-вперед.

1 ответ

Основная проблема моего вопроса заключается в том, что процесс eID не предназначен для задач, требующих таких сложных функций TYPO3, как механизм записи телепередач или HTML-рендерер TYPO3.

На самом деле я решил вернуться к полному движку TYPO3, используя выделенный тип страницы. Но мне приходилось многократно вызывать свой код на одной странице для рендеринга изображений из телевизионного контента, поэтому мне пришлось искать упрощенный процесс. Я решил остаться с eID вместо того, чтобы запускать полное ядро ​​TYPO3.

Вот хак, который я наконец придумал.

Имейте в виду:
Этот код имеет несколько недостатков:

  1. Это не заботится о наложениях языка (но, вероятно, может быть расширено для этого).
  2. Он не использует какой-либо специальный рендерер TYPO3 HTML, и вывод HTML не будет проверяться во многих случаях. (В частности, выходные данные могут содержать теги H1, H2, ... и P, вложенные в окружающие теги P, из-за очень простого средства визуализации, которое я здесь нарисовал.)
  3. Любые набранные ссылки не будут содержаться - выживет только самый простой вывод HTML.

Но это хорошо сработало для моей особой проблемы (одноязычный веб-сайт, 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);
}

// ----------
?>

Если кто-то найдет способ использовать оригинальный рендерер TYPO3 в eID, я буду рад принять ваш лучший ответ!

Другие вопросы по тегам