Содержимое wordpress PHP/html в PDF (domPDF). мне нужна помощь

Мне только что дали приказ: «Создайте кнопку, которая при нажатии создает PDF-файл из страницы, которую пользователь в данный момент просматривает. Это компания, занимающаяся коврами, и им нужна кнопка PDF, при нажатии которой создается PDF-файл с заголовком страницы. /коврик/описание коврика и т. д.

Чтобы было ясно, все это в Wordpress с динамическими данными. Я не нашел плагина, который будет делать то, что я хочу, поэтому я пытаюсь вручную.

В целом, это то, что я пробовал:

Я сделал это следующим образом: - Для одного я использую DOMPDF. С этим ниже он создает pdf. Он находится в файле с именем "createpdf.php".

$htmlToPdf = //MY HTML HERE\\ ;

$dompdf = new DOMPDF(); 
$dompdf->load_html( $htmlToPdf );
$dompdf->render();
$dompdf->stream("sample.pdf");

Часть, которая читается как $htmlToPdf = //MY HTML HERE\\ ;, — это то, куда пойдет мой HTML.

Теперь, поскольку это WordPress, я генерирую содержимое страницы с помощью простого цикла WP, например:

<!-- post starts here -->
        <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <div class="post">
            <h2 class="post-title"><?php the_title(); ?></h2>
            <span class="meta"><?php _e('Published'); ?> <?php the_time('F j, Y'); ?> <?php _e('in'); ?> <?php the_category(', ') ?></span>
            <div class="entry">
                <?php the_content(); ?>
            </div><!-- end entry -->
        </div><!-- end post -->
        <?php endwhile; endif;?>
<!-- post ends here -->

Теперь я хочу взять важные части страницы, которая является оболочкой содержимого (включая цикл), и вставить ее в переменную PHP с именем (как показано выше) $htmlToPdf = //MY HTML HERE\\ ; Затем вывести эту переменную на страницу (single. php). Таким образом, страница отображается для пользователя как обычно, НО с дополнительным преимуществом, заключающимся в том, что содержимое теперь находится в переменной, поэтому, когда пользователь нажимает кнопку «создать pdf», он берет текущее содержимое этой страницы и отправляет его в « createpdf.php" через что-то вроде кнопки

и т.д. Тогда я могу сделать:

$htmlToPdf = $_GET['maketopdf']; 

и нажмите $htmlToPdf вперед для создания PDF.

я так запуталась, лол....

Поэтому я помещаю содержимое в переменную следующим образом:

 <?php 
$htmlToPdf = '
<!-- post starts here -->

        <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <div class="post">
            <h2 class="post-title"><?php the_title(); ?></h2>

            <div class="entry">
                <?php the_content(); ?>
            </div><!-- end entry -->
        </div><!-- end post -->
        <?php endwhile; endif;?>
<!-- post ends here --> ';

echo $htmlToPdf;
?>

Проблема сейчас в том, что нет, я не получаю ошибок на странице, но ничего не отображается в столбце содержимого. Страница загружается нормально, но там, где должен быть контент, она оказывается пустой.

Как я могу заставить это нормально отображаться на single.php? пока все еще использую методы, которые я пробовал выше.

Надеюсь, это не слишком запутанно. Любая помощь ОЧЕНЬ приветствуется. Заранее спасибо.


person somdow    schedule 07.01.2014    source источник


Ответы (2)


Всегда есть этот уродливый обходной путь...

<?php
$htmlToPdf = '';
if (have_posts()){
    while (have_posts()){
        the_post(); 
        $htmlToPdf .= '<div class="post">';
        $htmlToPdf .= '<h2 class="post-title">'.the_title().'</h2>';
        $htmlToPdf .= '<div class="entry">';
        $htmlToPdf .= the_content();
        $htmlToPdf .= '</div><!-- end entry -->';
        $htmlToPdf .= '</div><!-- end post -->';
    }
}
echo $htmlToPdf;
?>
person Kostis    schedule 07.01.2014
comment
Хорошо, поэтому я решил сначала попробовать это, я вставил его, и хотя содержимое отображалось, $htmlTopdf не имеет значения. Когда я помещаю $htmlTopdf в ссылку получения, например: LINK-HERE/createpdf.php?dom2pdf=$htmlToPdf, в файле createpdf используйте переменную для получения переменной получения через: $toMakeIntoPdf = $_GET['dom2pdf'] ; , когда я нажимаю кнопку, PDF-файл создается правильно, но вместо отображения содержимого отображается само имя переменной. Почти там, лол. Любые идеи, что еще им не хватает? - person somdow; 08.01.2014
comment
Какая именно переменная? $toMakeIntoPdf? - person Kostis; 08.01.2014

Я буду использовать JS/jQuery, чтобы получить текущий источник страницы и отправить его в ваш php-скрипт (тот, кто генерирует PDF):

$('.yourButton').click(function(e){
   e.preventDefault();
   var dataToSend = document.documentElement.outerHTML;
   $.post('/path/to/your/DOMPDFfile.php', {data: dataToSend});
   window.open('path/to/the/generated.pdf');
});

Затем ваш файл DOMPDF:

$htmlToPdf = $_POST['data']; ;

$dompdf = new DOMPDF(); 
$dompdf->load_html( $htmlToPdf );
$dompdf->render();
$dompdf->stream("sample.pdf");

Обратите внимание, что он использует метод jQuery AJAX.

person enguerranws    schedule 07.01.2014
comment
забавно, что вы говорите ajax, я думал об использовании функции $.get() из jquery lib. По сути, я хотел, чтобы при щелчке он выдвигал эту pdf-библиотеку для создания pdf-файла без необходимости переходить на другую страницу, но да ........ по беспорядку за раз, лол. Спасибо за ваш ответ, я попробую, как только вернусь домой - person somdow; 08.01.2014
comment
Я думаю, вам понадобятся некоторые исправления, чтобы найти URL-адрес сгенерированного PDF-файла. Вы можете получить это в функции успеха $.post();. - person enguerranws; 08.01.2014