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

Proximo ·

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.

Der Grund für diese "Präsentation" ist die Tatsache das ich täglich Leute im Forum sehen die Neulingen erklären wollen das sie 2 Seiten Code in ihr eh meist schon ziemlich großes und unübersichtliches Project (das ist Tatsache wenn man eine Typoseite zum 1. oder 2. mal zusammenbastelt 😉 ) reinbasteln müssen, nur um eine Printversion zu gestalten.

Ich will beweisen das dies nicht der Fall ist:

Als 1. definieren wir also die Druckversion:

temp.PRINT= COA
temp.PRINT {
   wrap = <a href="|" name="Drucken" title="Drucken" target="_blank" class="print">Drucken</a>
   
# Diese Methode verwendet Typo wenn wir SimulateStaticHTML verwenden... sie fügt uns
# den Type in die URL ein, und zwar so das SimulateStaticHTML damit zurechkommt
   10 = TEXT
   10.data = getIndpEnv:REQUEST_URI
   10.listNum.splitChar = .
   10.listNum = 1
   10.wrap = |.98.html
}

# Diese Methode verwendet Typo wenn wir kein SimulateStaticHTML verwenden
[globalString = ENV:REQUEST_URI = /index.php*]
temp.PRINT.10 >
temp.PRINT {
   10 = TEXT
   10.data = getIndpEnv:REQUEST_URI
   10.wrap = |&type=98
}
[GLOBAL]

Nun haben wir einen Link geschaffen den wir irgendwo auf der Seite unserer Wahl einbauen können, zb im Marker "DRUCKEN" (###DRUCKEN###) also nicht vergessen dies auchnoch an der richtigen stelle mit

marks.DRUCKEN < temp.PRINT

einzubauen!

Als nächstes definieren wir noch "was ist eine Druckversion?".´

Nun das erklären wir Typo folgendermaßen:

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
}

Achtung! Dieser ganze Absatz darf nicht in irgendwelchen Klammern stehen (es ist ja ein Seitentype für sich alleine) UND er MUß im Haupttemplate stehen! (falls ihr mehrere habt)

Toll ist auch das dies nicht nur für 1 Seite sondern für alle funktioniert 😉 (das stimmt natürlich nur solange wie unser Inhalt ausschließlich in der Hauptspalte und der Linken zu finden ist 😉 )

So und nun... nein Spaß^^ das wars schon... einfach oder? (jaja das sagen sie alle 😉

MFG Proximo

Amelia ·

He Supi Tut, werde ich mir merken udn demnächst gleich ausprobieren!
DANKE!!! 🙂

..in ihr eh meist schon ziemlich großes und unübersichtliches Project...

recht hast Du! 8-)

Proximo ·

Danke 😉 aber ich glaub ich muß eher mal n Tutorial über "Sauberes TS-Templatemanagement", "TS-Templatedesign und Aufbau größerer TS-Projecte" oder "Modulare Programmierung von TS-Componenten" schreiben 😉 (soll ich?)

MFG Proximo

Amelia ·

Wenn Du langeweile hast, tu das!? Vielleicht kannst Du ja auch nen bissl Literatur empfehlen zu den Themen !? :p

Proximo ·

Das schlimme ist ja... es gibt kaum gute Literatur außer die TS-REF und das Buch von "Open Source Press"... das heißt "Typo3 Enterprise Content Management" von "Werner Altmann, René Fritz und Daniel Hinderink" (ISBN 3-937514-01-5) die 2 Sachen allerdings gehört zu jedem Typoprogrammierer dazu wie das Amen in der Kirche...

Und da gute Tutorials (vorallem aktuelle) ziemlich Rar sind werde ich warscheinlich nicht drumrum kommen selber welche zu schreiben 😉

MFG Proximo

Amelia ·

Hallo!
Habe mal gerade versucht, Deine Printversion nachzubauen. Zwei Fragen / Probleme habe ich aber noch:

1. Wie bekomme ich den Rahmen um den Link weg ?
Habs schonmal mit Stylesheet versucht, aber er bleibt hatrnäckig!? :/

2. Beim Aufruf bekomme ich folgende Meldung:

Error!The page is not configured! [type= 98][]

Ich glaube, mir ist nicht wirklich klar, wo welcher Code hin muss.
Habe es foldender maßen umgesetzt:

Als erstes habe ich eine neue Seite Print angelegt.

Im HTML einen Marker gesetzt:

###PRINT###

ins Template-Setup der Print-Seite folgendes geschrieben:

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
}

und ins Setup des Maintemplates dieses:

# Print-Funktion #
marks.PRINT = COA
marks.PRINT {
   wrap = <a href="|" name="Drucken" title="Drucken" target="_blank" class="print"><img src="fileadmin/images/nav_print.gif" alt="" /></a>
   10 = TEXT
   10.data = getIndpEnv:REQUEST_URI
   10.listNum.splitChar = .
   10.listNum = 1
   10.wrap = |.98.html
}

marks.PRINT.10 >
marks.PRINT {
   10 = TEXT
   10.data = getIndpEnv:REQUEST_URI
   10.wrap = |&type=98
}

Was habe ich da falsch gemacht / falsch verstanden ?

_o3_ ·
page{
...
#den marker setzen
DRUCKEN = TEXT
DRUCKEN{
  field = uid
  wrap = <a href="index.php?id=|&type=98" target="_new">drucken</a>
}
...
}

unterhalb der geschweiften klammern dann folgendes..

#druckansicht
druckversion = PAGE
druckversion{
  typeNum = 98
  stylesheet = fileadmin/deine_druck.css
  10 = TEMPLATE
  10{
    template = FILE
    template.file = fileadmin/deine_druck.html
  
    #marker ansprechen
    marks{
      dein_marker = CONTENT
      dein_marker{
        table = tt_content
        select {
          where = colPos = 0
          orderBy = sorting
        }
      }
    }
  }
}

that´s it...

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