2013-02-19 123 views
3

我试图使Kickstarter的扩展覆盖页面的正常渲染,并呈现PDF文件。对于这个即时通讯使用FPDF。但我不知道该怎么做。我试过这样做,但它没有工作:TYPO3扩展:生成PDF

<?php 

// require_once(PATH_tslib . 'class.tslib_pibase.php'); 

class tx_ishurkunde_pi1 extends tslib_pibase { 
    public $prefixId  = 'tx_ishurkunde_pi1'; 
    public $scriptRelPath = 'pi1/class.tx_ishurkunde_pi1.php'; 
    public $extKey  = 'ish_urkunde'; 
    public $pi_checkCHash = TRUE; 

    public function main($content, array $conf) { 

     if (!t3lib_extMgm::isLoaded('fpdf')) return "Error!"; 

     $pdf = new FPDF(); 
     $pdf->AddPage(); 
     $content = $pdf->Output('', 'S'); 
     return $content; 

    } 
} 
?> 

它仍然保持渲染正常的网页模板。我错过了什么?

仅供参考,我不试图将HTML呈现为PDF。我试图从头开始生成PDF,使用URL参数是文本变量。

+0

你正在创建一个插件(如'_pi1'在你的类名中声明)。插件旨在用于页面,如内容元素。 – pduersteler 2013-02-19 11:17:47

+0

是的。这不是正确的做法吗?我应该怎么做呢? – 2013-02-19 11:19:47

+0

这取决于你如何实现它。你是在单独的PAGE对象中调用插件,还是像普通的内容元素那样将它插入页面? – pduersteler 2013-02-19 11:22:37

回答

0

据我所知,你的目标是呈现PDF而不是页面元素。

您目前的方法将无法​​正常工作,因为您将插件插入页面。插件的返回值将返回给TYPO3内容解析器,并且如果页面已经完成解析,则会显示它。没有任何部分可以抛弃整个页面渲染;至少它不打算这样做,而且你不应该(尽管有扩展这样做)。

eID方法将创建一个eID脚本(查看dd_googlesitemap),它通过GET参数调用并呈现您所需要的。你基本上可以做你想做的一切。

在您的扩展ext_localconf.php您注册的eID脚本,像这样:

$GLOBALS['TYPO3_CONF_VARS']['FE']['eID_include'][$_EXTKEY] = "EXT:{$_EXTKEY}/path/to/my/EIDHandler.php"; 

一个例子的eID处理结​​构:

class Tx_MyExt_EIDHandler 
{ 
    public function main() 
    { 
    // Your code here 
    } 
} 

$output = t3lib_div::makeInstance('Tx_MyExt_EIDHandler'); 
$output->main(); 

要呼叫您的eID脚本在前端,你追加适当的GET参数,如http://example.com/index.php?eID=tx_myext。这是你在ext_localconf.php中定义的数组键(在我的例子中,它是$_EXTKEY,但它基本上可以是任何字符串)。

插件/错字脚本方法将像例如, TemplaVoila做到这一点:你创建一个PAGE类型并调用你的东西的user_func。这将是最快的方法,因为你已经有了一个插件。重要的是你只用你的插件渲染你自己的页面类型。

例Typo脚本:

specialPage = PAGE 
specialPage { 
    type = 2 
    10 = USER 
    10.userFunc = tx_myextension_pi1->myFunc 
} 

之后,你可以用http://example.com/index.php?type=2打电话给你的新的一页。但是,标题等仍然呈现,你可能需要删除它们。

+0

看到我的编辑,添加了一些例子。 – pduersteler 2013-02-19 11:56:21

+0

我已经使用了你的最后一个例子,它似乎更好一些,但问题是,即时通讯仍然收到信息作为“文本/ HTML”。有没有办法将它改为pdf?我试过了,但它没有工作:header('Content-type:application/pdf'); – 2013-02-19 11:57:48

+0

好的,我发现了。我必须使用$ this-> response-> setHeader。我认为我从这里开始的问题是无关紧要的。感谢你的回答! – 2013-02-19 12:05:45