3

ページの通常のレンダリングをオーバーライドし、PDF ファイルをレンダリングする拡張機能を Kickstarter で作成しようとしています。このために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 としてレンダリングしようとしていません。URLパラメーターを使用してPDFを最初から生成しようとしていますが、テキスト変数です。

4

1 に答える 1

0

私が理解している限り、あなたの目的はページ要素ではなくPDFをレンダリングすることです。

プラグインをページに挿入しているため、現在のアプローチは機能しません。プラグインの戻り値はTYPO3コンテンツパーサーに戻され、ページの解析が終了すると表示されます。ページ全体のレンダリングを破棄できる部分はありません。少なくともそれは意図されたものではなく、そうすべきではありません(これを行う拡張機能はありますが)。

eIDのアプローチは、GET paramを介して呼び出され、必要なものだけをレンダリングするeIDスクリプト(dd_googlesitemapを参照)を作成することです。そこでは基本的にあなたがやりたいことはすべて行うことができます。

拡張機能では、次の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スクリプトを呼び出すには、 http: //example.com/index.php?eID=tx_myextなどの適切なGETパラメータを追加します。これは、で定義した配列キーですext_localconf.php(私の例では$_EXTKEY、ですが、基本的には任意の文字列にすることができます)。

プラグイン/タイプミスのアプローチは、たとえばTemplaVoilaが行うようなものです。PAGEuser_funcタイプを作成し、それを呼び出すと、自分のことを実行します。すでにプラグインを持っているので、これが最速のアプローチです。重要なのは、プラグインのみを含む独自のページタイプをレンダリングすることです。

TypoScriptの例:

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 に答える