WebsiteBaker Community Forum

WebsiteBaker Support (2.8.x) => Templates, Menus & Design => Topic started by: markherrmann on April 02, 2019, 04:46:05 PM

Title: Template dynamisch festlegen 2.12.1
Post by: markherrmann on April 02, 2019, 04:46:05 PM
Hallo Leute,
weiß jemand von Euch ob man das Template dynamisch festlegen kann.

Bsp. Ich rufe eine Seite mit Standart-Template auf und wenn die Seite erkannt hat, dass ein POST_Request erfolgte möchte ich das Template auf ein anderes setzen (also OVERWRITE der im Editor festgelegten Werte).

Warum das ganze?
Auf der Standartseite stehen Formularfelder, im Zieltemplate wird ein PDF erstellt (da würden mich meine normalen WEB FORMATIERUNGEN stören).
Title: Re: Template dynamisch festlegen 2.12.1
Post by: sstvmaster on April 02, 2019, 11:24:11 PM
Hi,

leider habe ich jetzt gerade kein Zugriff auf mein WSB. Aber kann man nicht z.B. im mpForm eine Zielseite setzen wenn das Formular abgesendet wurde?

Und auf der Zielseite kannst du ja das Template ändern.

Ich hoffe ich habe dich richtig verstanden :-)
Title: Re: Template dynamisch festlegen 2.12.1
Post by: markherrmann on April 03, 2019, 08:40:10 AM
Vielen Dank für Dein Feedback. Ich denke mal "mpForm" ist ein separates Modul.
Von denen nutze ich ehrlich gesagt nur möglichst wenige.
Ich kenne die Variablen TEMPLATE und TEMPLATE_DIR, diese kann man auslesen. Aber ehrlich gesagt hab ich es nicht hinbekommen diese dynamisch zu überschreiben.
Ich hab folgendes versucht: $_SESSION["TEMPLATE"] zu setzen, das ging aber nicht.

Ich habe ein Template für Standart HTML auf dem sind diverse Formulare, als Form_Target hab ich einen andere Seite mit einem anderen Template ausgewählt (auf dem wird aus den kommenden Daten eine PDF (Inline) erstellt). Jetzt wollte ich das ganze auf 1 Seite unterbringen. Ich frage am Start der Seite ab ob ein POST erkannt wird, dann die üblichen Sicherheitsabfragen (WB hat da schöne eigene Dinge im Angebot), dann das Template auf das neue PDF-Template setzen und fertig. Somit kann ich alles mit nur 1 physischen Seite erledigen.

Title: Re: Template dynamisch festlegen 2.12.1
Post by: DarkViper on April 03, 2019, 10:15:09 AM
Ich kenne die Variablen TEMPLATE und TEMPLATE_DIR, diese kann man auslesen. Aber ehrlich gesagt hab ich es nicht hinbekommen diese dynamisch zu überschreiben.
Weshalb wundert mich das jetzt nicht? ;)

Bezeichner ohne das vorangestellte $ - Zeichen sind keine Variablen (https://www.php.net/manual/de/language.variables.basics.php), sondern Konstanten (https://www.php.net/manual/de/language.constants.syntax.php).
Und wie schon der Name sagt, sind die Werte von Konstanten bis zum Ende des kompletten Scriptes konstant, unveränderbar, sobald sie einmal definiert sind.
Konstanten sind auch sonst auffällig und leicht erkennbar, da sie in der Regel immer in GROSS_BUCHSTABEN (https://www.php-fig.org/psr/psr-1/#4-class-constants-properties-and-methods) und mit _ zwischen den Wörtern geschrieben werden.

Manuela
Title: Re: Template dynamisch festlegen 2.12.1
Post by: Gast on April 03, 2019, 10:27:51 AM
Ich kenne die Variablen TEMPLATE und TEMPLATE_DIR, diese kann man auslesen.

es sind keine Variablen, sondern Konstanten  :wink:
Es ist der Sinn einer Konstante, später nicht mehr überschreibbar zu sein. Jeder nachträgliche Versuch sollte in einem "is already defined"-Error enden.

Zäumst du das Pferd nicht von der falschen Seite auf?
Was stört denn an der PDF bzw dessen CSS?
Title: Re: Template dynamisch festlegen 2.12.1
Post by: markherrmann on April 03, 2019, 11:06:45 AM
Danke Euch beiden für die ausführliche Erklärung.

Ich benutze mpdf 7.1.9 (composer) um bestimmte Inhalte als PDF auszuliefern.
Leider funktioniert es nicht, sobald ich mein Standart-Template benutze.

Ich glaube es liegt daran, dass mpdf den header verändert, was eigentlich für mich logisch wäre weil ich ja eine pdf ausliefern lasse. Vielleicht macht das der ein oder andere eleganter, aber ich mag
meine Funktion weil sehr minimalistisch aufgebaut:

Code: [Select]
function generatePDF($in_cfg, $in_content)
{
require_once('/.../vendor/autoload.php');
$mpdf = new \Mpdf\Mpdf([
        'mode' => 'utf-8',
        'format' => [210, 297],
        'orientation' => 'P'
]);
$mpdf->pdf_version = '1.5';
$mpdf->SetTitle($in_cfg["title"]);
$mpdf->SetAuthor($in_cfg["author"]);
$mpdf->WriteHTML($in_content);
$mpdf->Output($in_cfg["filename"], \Mpdf\Output\Destination::INLINE);
exit;
}
Title: Re: Template dynamisch festlegen 2.12.1
Post by: Gast on April 03, 2019, 11:12:12 AM
ist INLINE denn zwingend?
Title: Re: Template dynamisch festlegen 2.12.1
Post by: markherrmann on April 03, 2019, 11:15:41 AM
Eher als Komfort gedacht...
Title: Re: Template dynamisch festlegen 2.12.1
Post by: Gast on April 03, 2019, 11:21:18 AM
Nur mal als Gedankenspiel, hast du so vielleicht schon probiert...

Wenn du ein anderes WB-Template benutzt und bei Inline bleibst, müßte es, wenn es denn der header ist, genau so schlecht funktionieren.
Ist es doch eher CSS, würde sich etwas verändern.

Ich mach das eher mit FPDF, seit Jahren schon, aber eben auch nicht inline, weil ich am Ende immer ein Ergebnis habe, das der Besucher herunterladen soll, darum neues Fenster mit Stand-Alone - outside from WB
Title: Re: Template dynamisch festlegen 2.12.1
Post by: markherrmann on April 03, 2019, 11:30:51 AM
Muss ich mal drüber nachdenken, klar ich lass das Ergebnis mit "target_blank" ja in neuem Register anzeigen, da kann ich genau so gut auch einen Download initieren. Eigentlich wollt ich immer nur verhindern, dass mein Server anschließend viele Dateileichen beeinhaltet.

Ich denk da noch mal drüber nach.

Danke für den Input !
Title: Re: Template dynamisch festlegen 2.12.1
Post by: Gast on April 03, 2019, 11:42:38 AM
Wieso Dateileichen? Wenn überhaupt, sollten die in den tmp-Ordner des Servers fliegen und dort auch wieder gelöscht werden.
Aber vielleicht ist das schon wieder ein Schritt zu weit.

Hast diese Templategeschichte mal ausprobiert? Das würde zeigen, wo die störenden Formatierungen herkommen.
Und meiner Meinung nach, sollte sich das CSS des Templates z.b. durch Übergabe einer Klasse um den Inline-Output auch überschreiben lassen. @media-queries machen es ja genauso