3

我正在尝试使用 Kickstarter 进行扩展,以覆盖页面的正常呈现,并呈现 PDF 文件。为此我使用 FPDF。但我不知道该怎么做。我试过这样做,但没有奏效:

<?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;

    }
}
?>

它仍然会继续呈现正常的 Web 模板。我错过了什么?

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

4

1 回答 1

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 类型并调用 auser_func来完成您的工作。这将是最快的方法,因为您已经有一个插件。重要的是您呈现自己的页面类型,其中仅包含您的插件。

示例排版:

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

之后,您可以使用http://example.com/index.php?type=2调用您的新页面。但是,标题等仍会呈现,您可能需要删除它们。

于 2013-02-19T11:41:51.580 回答