EXT.pdfgenerator2 - Newsmeldungen als PDF ausgeben
Das Problem: Sie verwenden TYPO3 mit Templavoilá und möchten Newsmeldungen als PDF ausgeben. Die PDF- Datei soll die News in einem individuellen Layout wiedergeben.
Sie müssen mehrere Probleme lösen um dieses Ziel zu erreichen:
1) Legen Sie zwei unterschiedliche Seiten im Typo3-Seitenbaum an, je eine für die HTML-Anzeige und eine für die PDF-Ausgabe der single News.
2) Installieren Sie EXT:pdfgenerator2 und für die Templavoilá- Unterstützung EXT:tv_pdfgen
3) EXT:pdfgenerator2 erkennt am Seitentyp (?type=123), dass eine Seite der Homepage als PDF ausgegeben werden soll.
In Verbindung mit EXT:tv_pdfgen wird hierbei nach einem Subtemplate mit dem rendertyp “pdf” eines Templavoilá- Seitentemplates gesucht. Das Problem dabei ist, dass mit dem Templavoilá- Assistenten erstellte Subtemplates einen eigene Template- Datensatzeintrag besitzen. Der verweist jedoch auf die Datenstruktur des Haupttemplates.
Wir wollen aber, dass unsere PDF-Datei ein anders Layout hat als die eigentliche HTML-Anzeige. Wir müssen also zu einem brachialen Trick greifen:
4) Erstellen Sie ein eigenes Seitentemplate für die PDF-Ausgabe mit Templavoilá und mappen Sie dieses.
5) Sie müssen nun das unter 4) neuerstellte Template zu einem Subtemplate des Haupttemplates degradieren.
Hierzu trägt man in der TYPO3-Datenbank in das Feld “parent” des Template-Datensatzes des neuen Templates die Datensatz-Id des Eintrags des Haupt-Seitentemplates ein. Zusätzlich muß in das Feld ‘rendertype” der Template- / Rendertyp “pdf” eingetragen werden.
6) Nehmen Sie nun die Typoscript-Konfiguration vor:
# pdf_generator2 konfigurieren pdf_generator = PAGE pdf_generator { includeCSS.file1 = fileadmin/css/style-pdf.css includeCSS.file1.media = print
config { typeNum = {$extension.pdf_generator2.typeNum} #ist die gleiche, die bei der Extensioninstallation angegeben wird pageGenScript = EXT:pdf_generator2/gen_pdf.php admPanel = 0 xhtml_cleaning = 0 USERNAME_substToken = ftu = 0 disableCharsetHeader = 1 prefixLocalAnchors = 0 }
50 > 50 = USER 50.userFunc = tx_templavoila_pi1->main_page 50.childTemplate = pdf #Templatetyp des Templavoila-Subtemplates, nicht der Name !! } # pdf_generator2 Einstellungen ENDE
7) Sie benötigen nun noch einen Link in der HTML-Anzeige der News, der auf die PDF-Version mit einer anderen Seiten-ID (?id=xyz), dem Seitentyp Typ, der bei der Installation von EXT:pdfgenerator2 festgelegt wurde (z.B. ?type=123) und den Pdfgenerator2 spezifischen GET-Parametern (z.B. &attachment=1&filename=mypdffile.pdf), verweist.
Sie können diesen Link sehr elegant erstellen, indem Sie ausnützen, dass es tt-news erlaubt per Hook-Funktion eigene Marker für tt_news - Templates anzulegen.
Die nötige PHP-Datei könnte so aussehen:
<?php
function user_displayPDFlink($markerArray, $conf){
$row = $conf[‘parentObj’]->local_cObj->data; // get the data array of the current news record
// $row[’uid’] ID of current newsmessage
// $this->piVars[’tt_news’][’backPid’] // Id Back page
// $conf[’parentObj’]->conf[’PDFnews.’][’type’] // document type id for PDF documents
// $conf[’parentObj’]->conf[’PDFnews.’][’pageID’] // page.ID for PDF single news
// $conf[’parentObj’]->conf[’PDFnews.’][’attachment’] // attachment parameter for pdf-generator2
// $conf[’parentObj’]->conf[’PDFnews.’][’target’] // target parameter for pdf-generator2
// $conf[’parentObj’]->conf[’PDFnews.’][’include_post_vars’] // include_post_vars parameter for pdf-generator2
// $conf[’parentObj’]->conf[’PDFnews.’][’linktitle’] // Linktitle
// $conf[’parentObj’]->conf[’PDFnews.’][’lbl_wordcount’] // label wordcount field
// $conf[’parentObj’]->conf[’PDFnews.’][’lbl_charcount’] // label charcount field
$urlParameters=array();
$urlParameters[‘id’] = $conf[‘parentObj’]->conf[‘PDFnews.’][‘pageID’];
$urlParameters[‘type’] = $conf[‘parentObj’]->conf[‘PDFnews.’][‘type’];
if ($conf[‘parentObj’]->conf[‘PDFnews.’][‘include_post_vars’] == 1) {
$urlParameters[$conf[‘parentObj’]->prefixId][‘backPid’] = $conf[‘parentObj’]->piVars[‘tt_news’][‘backPid’];
$urlParameters[$conf[‘parentObj’]->prefixId][‘tt_news’] = $row[‘uid’];
}
$urlParameters[‘attachment’] = $conf[‘parentObj’]->conf[‘PDFnews.’][‘attachment’];
$urlParameters[‘filename’] = str_replace(‘ ’, ‘-’, substr($row[‘title’], 0, 100)).‘_’.$row[‘crdate’].‘.pdf’;
$link = $conf[‘parentObj’]->pi_GetPageLink($conf[‘parentObj’]->conf[‘PDFnews.’][‘pageID’], $conf[‘parentObj’]->conf[‘PDFnews.’][‘target’], $urlParameters);
$markerArray[‘###PDF_LINK###’] = ‘<a href=”‘.$link.‘” target=”‘.$conf[‘parentObj’]->conf[‘PDFnews.’][‘target’].‘”>’.$conf[‘parentObj’]->conf[‘PDFnews.’][‘linktitle’].‘</a>’;
countWordsAndChars($conf, $markerArray, $row[‘bodytext’], $row[‘title’]);
return $markerArray;
}
function countWordsAndChars(&$conf, &$markerArray, &$body, &$title) {
$text = strip_tags($body);
$text = html_entity_decode($text);
$text = htmlspecialchars_decode($text);
$titletmp = strip_tags($title);
$titletmp = html_entity_decode($titletmp);
$titletmp = htmlspecialchars_decode($titletmp);
$nochars1 = strlen($text);
$nochars2 = strlen($titletmp);
$nowords1 = str_word_count($text);
$nowords2 = str_word_count($titletmp);
$markerArray[‘###PDF_NO_WORDS###’] = $nowords1 + $nowords2;
$markerArray[‘###PDF_NO_CHARS###’] = $nochars1 + $nochars2;
$markerArray[‘###LBL_PDF_NO_WORDS###’] = $conf[‘parentObj’]->conf[‘PDFnews.’][‘lbl_wordcount’];
$markerArray[‘###LBL_PDF_NO_CHARS###’] = $conf[‘parentObj’]->conf[‘PDFnews.’][‘lbl_charcount’];
return true;
}
?>
Ganz nebenbei liefert dieses PHP - Programm noch Marker mit für die Anzahl der Wörter und Zeichen in der Newsmeldung.
9) Den Hook aktivieren Sie per Typoscript im Extension Template der HMTL-Anzeige der Single-News:
# include the php script includeLibs.displayFileLinks = EXT:bit4you_ttnewspdflink/res/generatePDFlinkFunc.php # call user function plugin.tt_news.itemMarkerArrayFunc = user_displayPDFlink plugin.tt_news{ PDFnews { # the pag ID of your special PDF single news page pageID = 71 # document type id for PDF documents type = {$extension.pdf_generator2.typeNum} # attachment-parameter for pdfgenerator2 attachment = 1 # target-parameter for pdfgenerator2 target = _blank # include_post_vars-parameter for pdfgenerator2 include_post_vars = 1 # linktitle linktitle = PDF-Version anzeigen… lbl_wordcount = Wörter: lbl_charcount = Zeichen: } }
10 ) Last but not least sollten Sie nicht vergessen die neuen Marker im Single-News-HTML-Template einzufügen.
Have some fun with this Information
Ihr bit4you Team