dompdf: шаблоны и переменные $ _SESSION - PullRequest
0 голосов
/ 27 октября 2011

Мне было интересно, будет ли эта установка работать. мне нужно вывести пакет PDF из группы переменных, которые я загружаю в $ _SESSION через форму (да ...). идея состоит в том, чтобы передать файл шаблона в механизм dompdf и заполнить шаблон из $ _SESSION, а затем в PDF. мне кажется, что когда $ template загружается, он должен это делать, да?

вот основной код:

<?php
function renderToPDF($theTemplate = "template.php") // this is just to show the value
{
  require_once("dompdf/dompdf_config.inc.php");

  $content = file_get_contents($theTemplate); 

  if ($content !== false)
  {
    $dompdf = new DOMPDF();
    $dompdf->load_html($content);
    $dompdf->render();
    $dompdf->stream("kapow_ItWorks.pdf");
  }
}
?>

и это файл template.php (в основном ... вам не нужны все 16 страниц ...)

<html>
<meta>
<head>
  <link href="thisPage.css" type="text/css" rel="stylesheet">
</head>
  <body>
    <h1><?php echo $_SESSION['someTitle'] ?></h1>
    <h2>wouldn't it be nice, <?php echo $_SESSION['someName'] ?></h2>
  </body>
</html>

так что я думаю, что template.php извлечет переменные прямо из массива $_SESSION без какого-либо вмешательства, выглядя так:

БОЛЬШОЕ НАЗВАНИЕ

Разве это не было бы хорошо, Красавчик Лулу?

Полагаю, суть вопроса в следующем: оцениваются ли $_SESSION переменные, когда файлы PHP загружаются, но не отображаются?

WR!

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

file_get_contents не оценивает файл PHP, он просто получает его содержимое (файл, который находится на жестком диске).

Чтобы сделать то, что вы хотите, вам нужно использовать вывод буферизация и include.

ob_start(); // Start Output beffering
include $theTemplate; // include the file and evaluate it : all the code outside of <?php ?> is like doing an `echo`
$content = ob_get_clean(); // retrieve what was outputted and close the OB
1 голос
/ 29 октября 2011

по какой-то причине код на странице, которая вызывает функцию ТАКЖЕ, выгружается в файл.это было помещено перед заголовком.Теперь я понимаю, почему: я не ссылался на внешнюю страницу, я импортировал и внешнюю страницу.не знаю, почему это не щелкнуло.

в любом случае.как только я избавился от лишних страниц, все заработало.В ретроспективе, dompdf должен был указать, что на странице, вызывающей функцию, НЕТ никакого ЛЮБОГО HTML (echo, print и т. д.).по крайней мере, то, что, по-видимому, требуется на этом уровне моих знаний.

для тех, кто, как и я, барахтается в мисме «все, кроме ответа», вот простой код, который сделал эту работу:

buildPDF.php:

<?php
session_start();
$_SESSION['someTitle'] = "BIG FAT TITLE";
$_SESSION['someName'] = "HandomeLu";

$theTemplate = 'template.php';

function renderToPDF($templateFile)
{
  require_once("_dox/dompdf/dompdf_config.inc.php");
  ob_start();
  include $templateFile;
  $contents = ob_get_clean(); 

  if ($contents !== false)
  {
    $dompdf = new DOMPDF();
    $dompdf->load_html($contents);
    $dompdf->render();
    $dompdf->stream("kapow_ItWorks.pdf");
 }
}

renderToPDF($theTemplate);
?>

, и это template.php:

    <!DOCTYPE HTML>
    <html>
    <meta>
    <head>
      <meta charset="utf-8">
      <link href="thisPage.css" type="text/css" rel="stylesheet">
    </head>
    <body>
      <h1><?php echo $_SESSION['someTitle'] ?></h1>
      <p>wouldn't it be nice, <?php echo $_SESSION['someName'] ?></p>
    </body>
   </html>

, также обратите внимание, что внешний файл CSS читается очень хорошо.так что вы все еще можете держать структуру и стиль отдельно.кроме того, переменные $ _SESSION могут быть установлены где угодно, очевидно, я просто установил их здесь, чтобы облегчить тестирование.

надеюсь, что это полезно для тех, кто начинает работать с этим классом GREAT.если вы хотите запустить и запустить PDF-файлы, это очень много значит, у него должен быть триггер и хватка.:)

спасибо всем, кто прокомментировал.ты получил меня в том месте, где я должен был быть.:)

этот сайт ROCKS.

WR!

...