PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Styleswitcher für Druckversion


Gil
17.06.2006, 16:58
Ich möchte den Besuchern die Möglichkeit geben, sich jede Seite in einem neuen Fenster mit Drucklayout anzusehen.
Dazu möchte ich einen Styleswitcher im Head-Bereich einbauen

<?php
if($_GET['druck']==1)
{
echo ('<link rel="stylesheet" type="text/css" href="print.css">');
}
else
{
echo ('<link rel="stylesheet" type="text/css" href="screen.css">');
}
?>


und einen Link im Footerbereich

<a href="<?php echo $_SERVER['PHP_SELF']; ?>?druck=1" target="druckfenster" onclick="window.open(this.href,this.target,'width=800,height=600,left=200,top=150,resizable=yes,toolbar=yes,l ocation=no,status=yes,menubar=yes'); return false;">Printversion</a>

Vielleicht kann mir jemand sagen, wie das zu realisieren ist. In den Templates ist ja kein PHP erlaubt.

Boothby
17.06.2006, 17:35
Vielleicht hilft dir dieser Artikel auf SelfHTML weiter.

http://de.selfhtml.org/css/formate/einbinden.htm#link_media

Ansonsten gibt es für Templates die Conditionals

<if condition="$_GET['druck']==1">
<link rel="stylesheet" type="text/css" href="print.css">
<else />
<link rel="stylesheet" type="text/css" href="screen.css">
</if>


Und den Link im Footer einfach so:

<a href="$_SERVER[PHP_SELF]$session[sessionurl]&amp;druck=1" target="druckfenster" onclick="window.open(this.href,this.target,'width=800,height=600,left=200,top=150,resizable=yes,toolbar=yes,l ocation=no,status=yes,menubar=yes'); return false;">Printversion</a>

StGaensler
17.06.2006, 17:39
Hallo!

Dafür gibt es in den Templates die sog. Conditionals:<if condition="$_GET[druck] == 1">
<link rel="stylesheet" type="text/css" href="print.css">
<else />
<link rel="stylesheet" type="text/css" href="screen.css">
</if>Für den Druckversion-Link kannst du folgenden Code verwenden:<a href="$_SERVER[PHP_SELF]?druck=1" target="druckfenster" onclick="window.open(this.href,this.target,'width=800,height=600,left=200,top=150,resizable=yes,toolbar=yes,l ocation=no,status=yes,menubar=yes'); return false;">Printversion</a>

Viele Grüße,
Stefan

PS: Zu langsam :D

Gil
17.06.2006, 18:14
Herzlichen Dank für die schnellen Anworten.

Eine frage hätte ich noch:
Wie verweise ich in dem Styleswitcher auf die richtige, d.h. im ACP bearbeitbare css-Datei, bzw. wo wird $style[css] definiert (habe ich noch nicht gefunden)?

StGaensler
17.06.2006, 18:55
Die CSS-Datei ist doch standardmäßig schon eingebunden, oder? Das wird irgendwo in einer php-Datei definiert, denn die Datei wird immer wieder neu erstellt, wenn du im AdminCP wieder etwas änderst (und ausgewählt hast, dass das als Datei gespeichert werden soll). Wozu brauchst du das? Vielleicht können wir dir dann besser weiterhelfen.

Viele Grüße,
Stefan

Gil
17.06.2006, 19:12
Sicher, noch ist die css-Datei über $style[css] im headinclude eingebunden, aber wenn ich stattdessen den Styleswitcher einbaue, möchte ich auch darin auf die richtige d.h. auf die im ACP bearbeitbare css-Datei für die Screenanzeige verweisen.
$style[css] muss doch entweder durch den Switcher ersetzt werden oder in ihm enthalten sein - oder verstehe ich da etwas falsch?
mfG

StGaensler
17.06.2006, 19:16
Das kommt drauf an, wie du die CSS-Datei für den Druck anlegst. Wenn du dort noch einmal alles neu definierst, dann stimmt das, was du sagst. Wenn du dort aber nur das "nötige" überschreibst, dann darfst du da nichts ändern.

Mit deiner Lösung würde das dann so aussehen:<if condition="$_GET[druck] == 1">
<link rel="stylesheet" type="text/css" href="print.css">
<else />
$style[css]
</if>Meinst du das?

Viele Grüße,
Stefan

Gil
17.06.2006, 19:27
Genau, so ähnlich wollte in das Ganze angehen – wußte nur nicht, ob ich $style[css] so einbinden darf.
Die print.css muss ich noch erstellen, aber das ist kein Problem. Da werden natürlich Hintergründe und Schriftfarben geändert und außerdem die kompletten Header (incl. Navbar) und Footer ausgeblendet und dafür andere eingeblendet.

Vielen Dank für die Hilfe - dann werde ich ich jetzt mal basteln.
mfG

Hoffi
17.06.2006, 23:27
Warum der Unterschied? Man kann doch via CSS direkt eine Datei einbinden die für den Druck benutzt wird.

Gil
18.06.2006, 00:58
Sorry, aber das verstehe ich nicht ganz. Wie bindet man eine Datei über css ein?
Die Seite soll nicht nur in der Druckvorschau, sondern bereits im neuen Browserfenster in der Druckversion zu sehen sein.
mfG

StGaensler
18.06.2006, 07:44
Das, was Hoffi meint, ist das media-Attribut:<link rel="stylesheet" type="text/css" href="print.css" media="print">Aber genau desswegen, weil du die "Druckvorschau" in einem neuen Fenster anbieten willst, geht das schlecht.

Viele Grüße,
Stefan

Hoffi
18.06.2006, 10:32
OK, mit Vorschau geht das natürlich nicht. Aber man könnte es so einbauen, das man die CSS beim Drucken grundsätzlich benutzt und so einbindet wie Stefan geschrieben hat, kombiniert mit dem oben genannten System. Dann wäre es perfekt. Denn dann ist es egal, ob via Vorschau oder ohne gedruckt wird.

Gil
18.06.2006, 14:06
Danke für eure Bemühungen.
Ich hab' es jetzt mal zusammengestrickt. Auf den ersten Blick funktionierte es auch ganz gut. Wenn ich allerdings Themen-Seiten oder Beitragsseiten mit dem Druckversionslink aufrufe, kommt jeweils eine Fehlermeldung:

Ungültige Angabe: Forum
Wenn Sie einem normalen, gültigen Link im Forum gefolgt sind, wenden Sie sich ... usw.

Keine Angabe: Thema
Wenn Sie einem normalen, gültigen ...usw.

Bei Aufruf der Hilfe wird immer nur die erste Seite (mit Suchmaske) angezeigt, auch wenn man sich eigentlich schon 2 Ebenen tiefer befindet.

Es müssen also mit dem Druckversionslink noch andere Parameter übergeben werden, nur welche?
Für etwas Aufklärung wäre ich dankbar.
mfG

StGaensler
18.06.2006, 14:17
Alles, was halt noch so in der URL mit drinnensteht :D
Das Wichtigste dürfte die Seitennummer und die ThreadID sein.

Viele Grüße,
Stefan

Gil
18.06.2006, 15:10
Ok, das war mir schon klar. Nur, wie bekomme ich diese Angaben in den Druckversionslink, egal auf welcher Seite ich mich gerade befinde?
Der Link befindet sich im includierten Footer und soll eigentlich für alle Seiten gelten. Sorry, PHP zählt nicht zu meinen Stärken.
Mit der Version von Boothby (href="$_SERVER[PHP_SELF]$session[sessionurl]&amp;druck=1") habe ich es auch mal versucht, erhielt aber nur einen Error 404.
mfG

StGaensler
18.06.2006, 15:42
Sag das doch gleich ;)

Den Druckversions-Link gibt es bei dir nur auf Themen- oder Beitragsseiten? Er wird ausgeblendet, wenn die Druckversion angezeigt wird? Wenn ja, dann verwende diesen Link:<a href="$_SERVER[REQUEST_URI]&amp;druck=1"
Viele Grüße,
Stefan

Gil
18.06.2006, 15:59
Danke, jetzt klappt es mit Themen, Beiträgen, Hilfe usw. aber noch nicht mit den Nachbarn.
Es gibt jetzt bei anderen Seiten (Start, Benutzerliste usw.) einen Error 404. Eigentlich sollte der Drucklink (und die Anzeige im neuen Fenster) für jede beliebige Seite funktionieren (wenn das denn geht – sollte aber doch, oder?).
mfG

Nachtrag:
Bei der Hilfe funktioniert es jetzt mit den Unterebenen (faq.php?faq=vb_faq#faq_vb_user_maintain) aber nicht mehr mit der Einstiegsseite (faq.php). Die Einstiegsseite führt auch zu einem Error 404.
mfG

StGaensler
18.06.2006, 16:24
Ich weiß - weil eben das Fragezeichen nach dem Dateinamen fehlt. Deshalb habe ich ja meine Frage gestellt, ob der Drucklink nur auf Themen- oder Beitragsseiten angeboten werden soll - anscheinend nicht.
Verwende dann folgenden Code. Der ist zwar nicht ganz optimal, aber somit umgeht man eine eigene Funktion dafür schreiben zu müssen:<if condition="$_SERVER['PHP_SELF'] == $_SERVER['REQUEST_URI']">
<a href="$_SERVER[PHP_SELF]?druck=1">Druckversion</a>
<else />
<a href="$_SERVER[REQUEST_URI]&amp;druck=1">Druckversion</a>
</if>Der Drucklink wird ausgeblendet, wenn die Druckversion angezeigt wird?

Viele Grüße,
Stefan

Gil
18.06.2006, 16:53
Danke erst mal für die Tipps.
Der Drucklink wird auf allen Seiten angeboten, da im includierten Footer enthalten. Dieser Footer wird jedoch per Druck-Stylesheet in der Druckversion ausgeblendet und durch einen anderen (nur Copyrighthinweis, keine Links) ersetzt.

Im Prinzip sind alle Seiten nach dem gleichen Schema aufgebaut:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html dir="ltr" lang="de">
<head>
<!-- Styleswitcher -->
<!-- Weitere head-Angaben -->
</head>
<body>

<div id="screenheader">
Header mit Grafiken auf farbigem Hintergrund<br />
Hauptnavigation<br />
Breadcrumbs
</div>

<div id="printheader">
Header mit Logo und Text-Headline auf weißem Hintergrund
</div>

<div id="main">
<div id="leftbox" style="width:200px; float:left;">
Login, Private Nachrichten usw.
</div>

<div id="content">
Inhalt<br /><!-- Foren, Themen, Hilfe, einfach alles -->
Inhalt<br />
Inhalt<br />
</div>
</div>

<div id="screenfooter">
Normaler Footer mit Zeitangabe, Sprachwahl usw. auf farbigem Hintergrund
und Link zum Öffnen der Seite mit Druck-Stylesheet in neuem Fenster
</div>

<div id="printfooter">
Nur Copyrighthinweis auf weißem Hintergrund, keine Links
</div>

</body>
</html>


Sreenheader, Screenfooter und Leftbox werden im Druck-CSS ausgeblendet, Printheader und Printfooter eingeblendet.
mfG

Gil
18.06.2006, 17:14
So, ich habe jetzt mal die conditionale Version des Druckversionlinks eingebaut und mich durch etliche Seiten geklickt – so scheint es zu funktionieren!
Nochmals vielen Dank für die Lösungsvorschläge.
mfG