Zum Inhalt springen

Lernen am Beispiel: Printversion

Erstellt am 13. Juli 2005 · 64 Antworten · letzte Antwort am 8. Januar 2007 · Seite 1 von 4

Tags: Tipp

Amelia ·

@ _03_:
also wenn ich das nach deinem Beipiel umsetzte, bekomme ich genau die gleichen Fehler! :/
Was mache ich nur falsch ???

Habe die Print-Funktion jetzt integriert ins Setup meines TS-Main-Templates:

  # Print-Funktion #
  marks.PRINT = TEXT
  marks.PRINT {
    field = uid
    wrap = <a href="index.php?id=|&amp;type=98" target="_new"><img src="fileadmin/images/nav_print.gif"</a>
   }
   #druckansicht
   druckversion = PAGE
   druckversion{
     typeNum = 98
     stylesheet = fileadmin/style.css
     10 = TEMPLATE
     10 {
       template = FILE
       #HTML für Druckausgabe
       template.file = fileadmin/index.html
       #marker ansprechen
       marks{
         PRINT = CONTENT
         PRINT {
           table = tt_content
           select {
             where = colPos = 0
             orderBy = sorting
           }#select
        }#print
      }#marks
   }#druckversion
Proximo ·

*Kopfschüttel* fangen wir nochmal an:

Ich setze folgende Minimalzustände vorraus:
- Installiertes Typo
- Include static: styles.content (default) (im Maintemplate)
- Inhalt in irgendeiner Spalte (auf der jeweiligen Seite)

Als aller erstes füge ich nun ins Haupttemplate, UNTER ALLES, vorallem AUßERHALB JEDER KLAMMER folgenden TS im SETUP ein:

temp.PRINT = COA
temp.PRINT {
   wrap = <a href="|" name="Drucken" title="Drucken" target="_blank" class="print">Drucken</a>
   
   10 = TEXT
   10.data = getIndpEnv:REQUEST_URI
   10.listNum.splitChar = .
   10.listNum = 1
   10.wrap = |.98.html
}

[globalString = ENV:REQUEST_URI = *php?id*]
temp.PRINT.10 >
temp.PRINT {
   10 = TEXT
   10.data = getIndpEnv:REQUEST_URI
   10.wrap = |&type=98
}
[GLOBAL]

Und jetzt nochmal AUßERHALB JEDER KLAMMER genau drunter:

print = PAGE
print {
   typeNum = 98
   bodyTag =<body bgcolor="#ffffff" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onload="javascript:window.print()">

   10 < styles.content.getLeft
   20 < styles.content.get
   30 < styles.content.getRight
   40 < styles.content.getBorder
}

Nachdem man dies einfach alles eingefügt hat OHNE ES ZU ÄNDERN darf man jetzt anfangen zu denken, man muß den inhalt von "temp.PRINT" nun in einen Marker oder Subpart befördern... das macht man am besten indem man schaut wo man seine anderen marker hat die zb so ausschauen können:

marks.bild = IMAGE
marks.bild.file = ...

Genau unter so einen Eintrag schreiben wir dann:

marks.PRINT < temp.PRINT

Und im HTML-Template schreiben wir dann noch irgendwo (am besten auch ganz nah an irgendeinem vorhanden Marker damit wir auch ja nix falschmachen)

###PRINT###

rein!

Ich hoffe das war jetzt für alle verständlich!

Schlusswort:
Das was ihr 2 da anstellt hat 1. Jede Menge Klammern, ist 2. Kompliziert, 3. (in Folge) total unübersichtlich und 4. Ziemlich sinnlos^^

Ja genau ich habe extra drauf verzichtert anzufangen alles zu verschachteln und zusätzlich noch Templates einzubinden weil die meisten Typoanfänger mehr Ahnung von CSS haben wie von Typo und sich deshalb so viel einfacher tun!

Die größte Sinnlosigkeit die ich dabei gesehen habe ist allerdings:

marks{
      dein_marker = CONTENT
      dein_marker{
        table = tt_content
        select {
          where = colPos = 0
          orderBy = sorting
        }
      }
    }

Da 1. "styles.content (default)" diese Aufgabe für uns übernimmt, und mann 2. keinen Marker braucht wenn man nur 1 Element ausgeben will *g*

MFG Proximo

Edit: Nachdem ich gesehen hab wir der Aufbau und die Strukturierung mancher Haupttemplates und TS in diesem Forum aussieht habe ich mich entschlossen das nächste Tutorial über "Strukturierung von TS und TS-Templates" also genauergesagt "Effizients und Übersichtlichkeit" zu schreiben (coming soon)

Amelia ·

Einen wichtigen Punkt hast Du vergessen zu erwähnen oder ich übersehen:

man braucht eine Extension, welche sich plugin.alt.print nennt und vorinstalliert ist. Diese muss einfach im Template unter "include static" integriert werden und dann klappts auch. *juhu* :p

_o3_ ·

@proximo
nun meine version funzt.

da es natürlich cool ist wenn du mal nen "wie strukturiere ich TS" - tutorial erstellst, freue ich mich schon riesig was dazu zu lernen...da ich auch noch frischling bin...

😃

edit:
ohne das ich nen plugin dafür brauche...

Imagine ·

Hallo Proximo,

als Ergänzung hierzu

Als Erstes muß ich erwähnen das große Teile dieser Printversion irgendwo in Schnippseln im Buch "Typo3 Enterprise Content Management" der Open Source Press zu finden sind.

Es sind die Seiten 396 bis 399.

Gruß

Imagine

Imagine ·

man braucht eine Extension, welche sich plugin.alt.print nennt und vorinstalliert ist. Diese muss einfach im Template unter "include static" integriert werden und dann klappts auch.

Richtig, die kenne ich auch. Nur da habe ich dieses Problem hier
#27312

Die Seite wird zwar aufgerufen, allerdings nicht der Inhalt unter ###INHALT### eingefügt, obwohl dieser Marker bei den normalen Seiten funktioniert.
Wie hast Du das hinbekommen????

Imagine

Amelia ·

Einen Fehler gibt es übriegens noch:

Du schreibst:

"Als aller erstes füge ich nun ins Haupttemplate, UNTER ALLES, vorallem AUßERHALB JEDER KLAMMER folgenden TS im SETUP ein:"

"Unter Alles" ist falsch, es muss genau über allem stehen, da TS ja zeilenweise abgearbeitet wird! Und ich muss das Printing ja erst definieren, bevor ich es meinem Marker zuweise! Sonst passiert ja nix, gell ;o)

Und nun hätte ich noch eine Frage:
Wie bekomme ich die Print-Funktion nun meinem print-Template und meinem Print-CSS zugewiesen ?
Ich dachte, das würde reichen. Scheint aber nicht so:

plugin.alt.print.file.stylesheet = fileadmin/css/print_style.css
plugin.alt.print.file.template = fileadmin/templates/print.html
Moeffz ·

Dazu mal eine Frage:
Was ist für Dich das Print-Template? Bzw. wo und wie hast Du das in Dein Projekt eingebaut?
Du hast schon mehrere Basis-Templates, die Du per include einbindest, oder?

Amelia ·

Achso, stimmt hätte ich erwähnen sollen...

Mein print-Template ist eine HTML-Datei, welche definiert, wie die Printseite aussehen soll!
Ich fände es schon super,wenn er nicht einfach eine weisse Seite nimmt und dort den text reinhaut! :o)

@Moeffz:
Was meinst Du mit Basis-Templates ???

Proximo ·

*Kopfschüttel* ich hab mal Screens gemacht sonst glaubt man es mir wieder nicht...

"Unter Alles" ist falsch, es muss genau über allem stehen, da TS ja zeilenweise abgearbeitet wird! Und ich muss das Printing ja erst definieren, bevor ich es meinem Marker zuweise! Sonst passiert ja nix, gell ;o)

Tut mir Leid da liegst leider du falsch, wenn es nämlich wirklich zeilenweise gehen würde könntest du nicht kreuzreferenzieren und keine Verarbeitungen bzw Renderring wiederholen!

Auch veränderen von Temporärobjecten oder wiederholte Abarbeitung wäre umöglich!

temp.GIF = IMAGE
temp.GIF.file = GIFBUILDER
temp.GIF.file {
   XY = [10.w] + 6, [10.h] + 6
   backColor = #FFFFFF

   10.offset = 3, 3
   10 = TEXT
   10.text.field = subtitle // title
   10.textMaxLength = 200
   10.fontSize = 13
   10.fontFile = fileadmin/fonts/ARIALBD.TTF
   10.fontColor = #000000
   10.niceText = 0

Hast du dir schonmal überlegt warum DAS funktioniert?

Nach deiner Erklärung würde als 1. XY = [10.w] + 6, [10.h] + 6 abgearbeitet werden, dann 10.fontSize = 13, dies ist aber unmöglich, woher sollte er ohne die Schriftgröße die höhe und die Länge des Textes errechnen können? (Computer nun Hellseher?!)

Den 2. Beweiß dazu liefert mein TS vom Haupttemplate (ja das funktioniert!)

Bild: typo3.ideefix.net/…/ts_print_2.jpg

Wie man unschwer erkennen kann ist der Scrollbalken ganz unten... also Ende der Seite (das ist das Maintemplate)

Mit den Markern hast du allerdings recht, da die ausgelagert sind (ja das Haupttemplate ist so schon über 50 Zeilen expandiert) werden die vorher abgearbeitet... ich habe es allerdings getestet... solange ich temps habe kann ich die überall hinschieben sie werden so-wie-so abgearbeitet (marker allerdings müssen vorher eingebunden werden!)

Was das mit "plugin.alt.print"... das kann ich leider nicht bestätigen, bei mir sieht das so aus:

Bild: typo3.ideefix.net/…/ts_print_1.jpg

Ach ja das mit dem CSS:
Wie schon im oberen Bild zu sehen:

# Mein DIV-Layout
includeCSS.file1 = fileadmin/template/sub/res/layout_print.css
# Mein Style für Schrift, Tabellen und CO
includeCSS.file2 = fileadmin/template/sub/res/stylesheet_print.css

MFG Proximo

Moeffz ·

Das hatte ich befürchtet. Es geht um so etwas wie Punkt drei bei folgendem Beitrag:

http://www.typo3forum.de/forum/list/list_post//27411/

Wenn Du es nicht über die Ordnerstruktur lösen willst, machst Du das so:
- Links auf "Liste", dann auf die Seite, auf der Dein Haupttemplate (TS) liegt (meist der globus). Dann steht da auch die Rubrik "Template", in der Dein Template (TS) steht (Sonst bist Du falsch.) Dort stehen vielleicht aber auch noch mehr Templates (TS). Steht hier Dein Print-Template (TS) - nicht das Printtemplate (HTML), das wäre ja Blödsinn.
- Das Printtemplate (TS) kannst Du hier einfügen, indem Du den Button "Neuen Datensatz nach diesem anlegen" anklickst. Als Namen gibst Du meintewegen Print ein und als Setup den Code von Proximo (temp.Print=COA usw.). Speichern.
- Dann gehst Du in der Listenansicht auf das Bearbeitensymbol Deines MainTemplates (Steht in der Templateliste ganz oben) und schaust nach dem Kästchen "Include Basis Template". Ein Klick auf das Print und es steht in der Liste.
- Im Feld "Setup" Deines Maintemplates fügst Du zu dem TypoScript-Teil Deiner normalen Seite die Markerzuweisung hinzu (marks.DRUCKEN < temp.PRINT). Was passiert denn da? Der Marker ###DRUCKEN### wird angesprochen. Ihm wird der temp.PRINT-Teil zugewiesen. Den haben wir in einem anderen Template (daher das temp), welches wir einen Schritt zuvor als Basis-Template eingebunden haben.

- Ganz an das Ende außerhalb jeder Klammern fügst Du außerdem den Teil (print = PAGE - vgl. proximo-Code) hinzu.

Folgendes beachten:
- In Template(HTML) Deiner normalen Seite sollte der Marker "###DRUCKEN###" vorhanden sein.
- Nach dem Code von proximo benötigst Du keine eigene html-Vorlage für Deine Druckausgabe. Es wird automatisch vom Inhalt die linke Spalte sowie der normale Content übernommen (Ich lasse mich hier gerne berichtigen).

Dieses verteilen des Codes auf mehrere Templates(TS) ist elementar, wenn Du nicht im Code ersticken willst. Wenn Du das bisher noch nicht gemacht hast, hol' es nach und lies dazu, was Du finden kannst (Ist im Buch der Open Source Press sehr gut beschrieben.).

Amelia ·

@Proximo:

Mmhhh, also ich habe mir den Template-Analyzer angeguckt und danach war das die einzige Erklärung für mich. Wenn die Print-Fkt. bei mir ganz unten steht und ich vorher aber schon den Marker zuweise, funktioniert es nämlich nicht! Definiere ich die Funktion aber vorher (was ich auch logisch finde, weil nur dann hat er ja auch was zuzuweisen), dann klappt es alles wunderbar! #paralyzed#

Okay also das CSS bekomme ich included! Das klappt! 8-)
Aber wie schaffe ich es, dass er auch das richtige HTML-Template benutzt !? :/ Muss ich das über eine extra Seite machen, die ich anlege!?

Proximo ·

Danke ich brauch keine Hilfe bei der Ordnung meines TS-Codes #giggle# , ich habe darüber gerade ein Tutorial geschrieben *lol*

#27411

Das mit den Templates stimmt nur halb... meine Lösung war eine Lösung ohne Templates... einfach eine Leere Seite völlig ohne CODE oder Html-Template (ja genau garkeins)!

Ich weiß das viele Programmierer dazu neigen irgendwelche Templates in der Druckversion zu verwenden, aber genau das ist meistens der Fehler! Wenn jemand eine Seite ausdrucken will will er genau das was er da sieht... und zwar NUR den Text der informativ ist (meistens der in der Hauptspalte oder in mehrere aufgeteilt wenn nötig und dann untereinander oder per wrap nebeneinander)

Auf der Ausgedruckten Seite steht links oben der Titel der Webseite, Rechts oben der Link und auf der Seite in der Mitte der Informative Text der Seite!

Wenn man noch unbedingt Logos möchte, bindet diese mit einem netten COA ein und zwar als simples "Element". In diesem Fall ist 5, auf den Screen, die Beschreibung für den gesammten Inhalt. Eingebunden habe ich dabei noch das Firmenlogo in der Version mit weißem Hintergrund (auf Wunsch der Firma)

MFG Proximo

Amelia ·

@Moeffz:

Dann gehst Du in der Listenansicht auf das Bearbeitensymbol Deines MainTemplates (Steht in der Templateliste ganz oben) und schaust nach dem Kästchen "Include Basis Template". Ein Klick auf das Print und es steht in der Liste.

Ich kann es nicht finden:
Bild: 666kb.com/…/10lnvf2o0t6v4.jpg

Nach dem Code von proximo benötigst Du keine eigene html-Vorlage für Deine Druckausgabe. Es wird automatisch vom Inhalt die linke Spalte sowie der normale Content übernommen.

Ja das ist ja okay, nur möchte ich das trotzdem gern in meiner eigenen HTML-Vorlage haben ! #paralyzed#

Amelia ·

@Proximo:

Ja aber ich möchte doch zumindest die Strukturierung der Seite beibehlaten.
Es müssen ja keine Bild dabei sein - sollen es auch nicht in der Druckversion - das ist richtig!
Aber das Textfeld soll in meinem Fall nicht breiter als 561px sein und 50 px entfernt vom linken Rand stehen und genau dadrüber soll das Logo positioniert sein. Wie soll ich das denn sonst hinbekommen, wenn nich über ein HTMl-Template?

Bin doch noch ein kleines Newbie - noch nix wissen tun, aber lernwillig sein! ;o)

Moeffz ·

1. Listenansicht (links: Web -> Liste)
2. auf den Seitentitel des root _nicht_ das Symbol daneben klicken - dann erscheint
3. rechts eine Liste der Elemente, die sich auf dieser Seite befinden - da ist auch eine Liste der Templates, der Backenduser (z.B. der admins). Das müßtest Du doch kennen.

Ich weiß nicht, wie Du Dich in die Ansicht zum Bearbeiten der Seite verirrt hast.

Proximo ·

Ok probieren wirs 😉

Das is die ii-ekel-Ausführung einer Templateverarbeitung *g* aber sie ist sehr kurz:

print.10 = TEMPLATE
print.10 { 
template = FILE 
template.file = fileadmin/xyz.html 
workOnSubpart = DOKUMENT 
subparts.CONTENT < styles.content.get 
}

Probleme:

- SO nicht auslagerbar und bei diesem Beispiel auch nicht empfehlenswert
- Marker- bzw Subparteinsatz erforderlich
- workOnSubpart-Subparts müssen manuell platziert werden weil kein Autopharser dazwischensteht!
- Verführt zur Überausführung einer Druckfunktion

EDIT: Auch mit Wraps ist viel lösbar, auch ein kurzes Typotemplate wär vielleicht besser... (sowas wie die Standardtemplates die in Typo integriert sind... "glück" und co)

MFG Proximo

EDIT2: Oben ist nachzulesen wie das geht... oft reicht schon ein "5.wrap = <table..." (vorrausgesetzt 5 ist der gesammte inhalt der Seite)

Amelia ·

@Moeffz:

Dann gehst Du in der Listenansicht auf das Bearbeitensymbol Deines MainTemplates (Steht in der Templateliste ganz oben) und schaust nach dem Kästchen "Include Basis Template".

--> Also hab ich das getan!

@Proximo:
Also müsste ich das dann doch komplett auslagern !? *arg* das würd ich auch gern verhindern :/

EDIT2: ... "5.wrap = <table..." (vorrausgesetzt 5 ist der gesammte inhalt der Seite)

Wie meinst Du das "ist der gesamte Inhalt der Seite" !?

Jetzt aber erstmal STOP: Ich seh jetzt gar nicth mehr durch! Muss mich hier erstmal sortieren!!! :o

Proximo ·

Versuch doch einfach mal die ganz einfache variante und vergiss das ganze andere komplizierte:

Bei dir steht irgendwo sowas wie

print {
10 < styles.content.get
}

um ein Logo hinzuzufügen:

print {
5 = IMAGE
5.file = fileadmin/.../images/logo.gif
10 < styles.content.get
}

So war das nämlich eigendlich gedacht...

MFG Proximo

EDIT: Ich sagte oben das muß man NICHT auslagern.. aber vergiss das einfach, das ist BSP wie man eine HTML-Quelle (also ein HTML-Template) einbindet... ziemlich sinnlos für ne Druckversion...

Amelia ·

Ja das ist schon klar! Aber dann habe ich doch die Sachen alle noch nicht richtig positioniert! Also das Logo linksbüdnig (steht jetzt mittig) den Text nur 561 px breit (nicht 100%) und die Überschriften drüber (nicht mittig!)!