Silverstripe 3 - RenderWith无法找到模板

时间:2014-09-17 23:16:27

标签: silverstripe

我想用DOMPdf创建一个PDF。我的PDF模板位于

themes/Template/
themes/Template/templates
themes/Template/templates/Pdf
themes/Template/templates/Layout

但我总是收到模板未找到错误。

根据此问题silverstripe Sitetree onAfterWrite - renderWith Error: Template not found我将模板放入mysite/templates/Pdf并且有效。

是否无法将模板保留在主题文件夹中?

这是我的代码。

public function createPdf(){
        $pdf = new SS_DOMPDF();

        $data = array(

        );

        $pdf->setHTML($this->customise($data)->renderWith('InvOffPdf'));
        $pdf->render();

        $pdfFilename = str_replace(array(' ', '#'), '', $this->Title) . '.pdf';
        $pdfFolder = 'clientcenter/' . $this->Client()->CID . '-' . $this->Client()->Random;

        $pdf->toFile($pdfFilename, $pdfFolder);

        $filename = 'assets/' . $pdfFolder . '/' . $pdfFilename;

        $file = File::get()->Filter('Filename', $filename)->First();
        if( $file ){
            $file->ClientID = $this->ClientID;
            $file->ShowInSearch = 0;
            $file->write();

            $this->Download = '<a href="' . $filename . '">PDF herunterladen</a>';
            $this->write();
        }
    }

修改 尝试用spekulatius解决方案。但我已经做了什么。错。

$pdfTemplate = SSViewer::setTemplateFile('Layout', 'InvOffPdf');
$pdf->setHTML($this->customise($data)->renderWith($pdfTemplate));

这是我收到的错误

[Strict Notice] Non-static method SSViewer::setTemplateFile() should not be called statically, assuming $this from incompatible context

正确的语法是什么?

1 个答案:

答案 0 :(得分:1)

而不是给 renderWith 一个字符串而Silverstripe搜索模板文件本身你可以给renderWith一个 SS_Viewer http://api.silverstripe.org/3.1/class-SSViewer.html的实例并设置你的模板文件想与 setTemplateFile 一起使用。

通过这种方式,您可以构建查看器并定义渲染的外观,以避免Silverstripe在错误的位置查找。

编辑以更详细地解释它。我记得更多这个:

$pdfTemplate = new SSViewer();
$pdfTemplate->setTemplateFile('themes/Template/templates/Pdf/InvOffPdf.ss');
$pdf->setHTML($this->customise($data)->renderWith($pdfTemplate));

当然没有经过测试。