Internetservice - Blog

bit4you präsentiert einen Blog rund um die Themen TYPO3, MySQL und PHP

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.

8) 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’], 0100)).‘_’.$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

Kommentare sind zur Zeit geschlossen.

Internetservice - Blog läuft unter Wordpress 2.3.2
Anpassung und Design: bit4you :: Waldseer Str. 14 :: 88250 Weingarten