我想用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
正确的语法是什么?
答案 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));
当然没有经过测试。