2017-02-12 4 views
1

Hallo ich eine druckbare Seite zu erstellen versuche von Daten, die von einer Form in octobercms senden ich eine Plugin-Komponente erstellt haben, die ichDer Versuch, eine druckbare Webseite in octobercms erstellen

PrintPageForm
<?php namespace Acme\PrintPage\Components; 

use Cms\Classes\ComponentBase; 
use Input; 
class PrintPageForm extends ComponentBase 
{ 
    public function componentDetails() 
    { 
     // TODO: Implement componentDetails() method. 
     return 
     [ 
      'name' => 'Print Page Form', 
      'description' => 'Detail page print form' 
     ]; 
    } 
    public function onHandleForm() 
    { 
     $var = 
      [ 
       'overview' => Input::get('print_overview'), 
       'photos' => Input::get('print_photos') 
      ]; 

ich genannt habe haben dies in der Standard-htm-Datei

<form action="/print" data-request-data="printpageform::onHandleForm" data-request-validate data-request-flash accept-charset="utf-8" class="form ajax-form"> 
<h3 class="sub-heading">Print Details</h3> 
    <p>To build a printer friendly formatted page, please select from the options shown below:</p> 
    <ul class="print-section"> 
     <li> 
      <input type="checkbox" class="checkbox-input" value="1" name="print_overview" id="print_overview"> 
      <label class="checkbox-label period" for="print_overview">Overview: Summary and key features alongside a photo of the property.</label> 
     </li> 
     <li> 
      <input type="checkbox" class="checkbox-input" value="1" name="print_photos" id="print_photos"> 
      <label class="checkbox-label period" for="print_photos">Photos: Photo gallery of the property.</label> 
     </li> 
        </ul> 
    <input type="hidden" name="print" value="1"> 
    <button class="btn button-large one-third palm-one-whole" type="submit" rel="print" >Print</button> 
</form> 

ich versuche, den Wert von print_overview und print_photo Werte in meiner Druckansicht Seite zuzugreifen, kann aber nicht herausfinden, wie diese Werte für den Zugriff auf I wobei diese Werte übergeben DebugBar sehen können, wie folgt "request_query Array: 2 [ "print_overview" => "1" "print" => "1"]“und in meiner Ansicht Datei Ich habe

{%if "print_overview" == "1" %} 
{{ 'checked' }} 
    {% else %} 
    {{ 'Not Checked' }} 
    {% endif %} 

aber es scheint der Wert von print_overview Rolle, was das ist Seite nur Echos aus Nicht überprüft Ich bin in einer Spur, dass ich keine Gedanken finden kann, würde dankbar angenommen werden.

+0

eine Alternative ein PDF mit https://octobercms.com/plugin/renatio-dynamicpdf –

Antwort

2

Paar Zeiger. Beim Rendern eines Formulars in Twig sollten Sie entweder

verwenden. Zweitens können Sie über die Funktion post() in Ihrer Komponentenklasse auf die Anfragedaten zugreifen; und Sie übergeben es an Ihre Sicht (die Komponente teilweise) durch die page Eigenschaft. So würde der Handler mögen so etwas wie:

public function onHandleForm() 
{ 
    // Pass the variables to the view renderer 
    $this->page['print_overview'] = (bool) post('print_overview'); 
    $this->page['print'] = (bool) post('print'); 

    // Return a partial response http://octobercms.com/docs/ajax/update-partials#pushing-updates 
    return ['#view-response-element' => $this->makePartial('@response')];  
} 

Während Ihre response.htm Teildatei wie folgt aussehen würde:

{% if print_overview %} 
    "checked" 
{% else %} 
    "not checked" 
{% endif %} 

Als Hinweis, wenn Sie die {% macro %}-Tags verwenden, diese zu tun Sie haben keinen Zugriff auf den lokalen Bereich der Teildatei, dh sie haben keinen Zugriff auf die Variablen, die der Sicht zur Verfügung gestellt werden. Jede Auswertung innerhalb von {% macro %} Tags muss auf Variablen basieren, die an sie übergeben werden.

+0

Danke Luke I‘könnte zu erzeugen lch probiere das aus Ich bin mit diesem im Kreis gelaufen –

+0

Ich bekomme einen Fehler PrintPageForm enthält keine Methode von makePartial –

2

Die beste Strategie für das Drucken ich finde, ist JavaScript zu verwenden:

<!-- Link to print --> 
<p><a href="javascript:printInvoice()">Print this invoice</a></p> 

<!-- Invoice printer --> 
<script type="text/template" id="invoiceTemplateContents"> 
    Printable contents go in here 
</script> 

<!-- Script --> 
<script> 
    function printInvoice() { 
     var printWindow = window.open('','','left=0,top=0,width=950,height=500,toolbar=0,scrollbars=0,status=0') 
     printWindow.document.write($('#invoiceTemplateContents').html()) 
     printWindow.document.close() 
     printWindow.focus() 
     printWindow.print() 
     printWindow.close() 
    } 
</script> 
+0

Danke Samuel Ich habe einige von euch beobachtet und habe versucht, die beste Methode herauszufinden Um das gewünschte Ergebnis zu erzielen, werde ich es versuchen und Ihnen mitteilen, wie es mir geht –

Verwandte Themen