Lernen am Beispiel: Printversion [Gelöst]

  • Proximo Proximo
    Jedi-Ratsmitglied
    0 x
    563 Beiträge
    0 Hilfreiche Beiträge
    13. 07. 2005, 11:20

    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:

    1. temp.PRINT= COA
    2. temp.PRINT {
    3. wrap = <!!=|====>Drucken</a>
    4.  
    5. # Diese Methode verwendet Typo wenn wir SimulateStaticHTML verwenden... sie fügt uns
    6. # den Type in die URL ein, und zwar so das SimulateStaticHTML damit zurechkommt
    7. 10 = TEXT
    8. 10.data = getIndpEnv:REQUEST_URI
    9. 10.listNum.splitChar = .
    10. 10.listNum = 1
    11. 10.wrap = |.98.html
    12. }
    13.  
    14. # Diese Methode verwendet Typo wenn wir kein SimulateStaticHTML verwenden
    15. [globalString = ENV:REQUEST_URI = /index.php*]
    16. temp.PRINT.10 >
    17. temp.PRINT {
    18. 10 = TEXT
    19. 10.data = getIndpEnv:REQUEST_URI
    20. 10.wrap = |&type=98
    21. }
    22. [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:

    1. print = PAGE
    2. print {
    3. typeNum = 98
    4. bodyTag =<body bgcolor="#ffffff" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" onload="javascript:window.print()">
    5.  
    6. 10 < styles.content.getLeft
    7. 20 < styles.content.get
    8. }

    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


  • Imagine Imagine
    Jedi-Ritter
    0 x
    95 Beiträge
    0 Hilfreiche Beiträge
    14. 07. 2005, 17:40

    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 Imagine
    Jedi-Ritter
    0 x
    95 Beiträge
    0 Hilfreiche Beiträge
    14. 07. 2005, 17:44

    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
    [url]http://typo3.net/forum/list/list_post//27312/?pid=last[/url]

    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 Amelia
    Jedi-Meister
    0 x
    327 Beiträge
    0 Hilfreiche Beiträge
    18. 07. 2005, 10:56

    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:
    [b]Wie bekomme ich die Print-Funktion nun meinem print-Template und meinem Print-CSS zugewiesen ?[/b]
    Ich dachte, das würde reichen. Scheint aber nicht so:

    1. plugin.alt.print.file.stylesheet = fileadmin/css/print_style.css
    2. plugin.alt.print.file.template = fileadmin/templates/print.html

  • Moeffz Moeffz
    Jedi-Meister
    0 x
    431 Beiträge
    0 Hilfreiche Beiträge
    18. 07. 2005, 11:23

    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 Amelia
    Jedi-Meister
    0 x
    327 Beiträge
    0 Hilfreiche Beiträge
    18. 07. 2005, 11:28

    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 Proximo
    Jedi-Ratsmitglied
    0 x
    563 Beiträge
    0 Hilfreiche Beiträge
    18. 07. 2005, 11:42

    *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!

    1. temp.GIF = IMAGE
    2. temp.GIF.file = GIFBUILDER
    3. temp.GIF.file {
    4. XY = [10.w] + 6, [10.h] + 6
    5. backColor = #FFFFFF
    6.  
    7. 10.offset = 3, 3
    8. 10 = TEXT
    9. 10.text.field = subtitle // title
    10. 10.textMaxLength = 200
    11. 10.fontSize = 13
    12. 10.fontFile = fileadmin/fonts/ARIALBD.TTF
    13. 10.fontColor = #000000
    14. 10.niceText = 0

    Hast du dir schonmal überlegt warum DAS funktioniert?

    Nach deiner Erklärung würde als 1. [b]XY = [10.w] + 6, [10.h] + 6[/b] abgearbeitet werden, dann [b]10.fontSize = 13[/b], 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!)

    [img]http://typo3.ideefix.net/chaos/langzeitdaten/ts_print_2.jpg[/img]

    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:

    [img]http://typo3.ideefix.net/chaos/langzeitdaten/ts_print_1.jpg[/img]

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

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

    MFG Proximo

  • Moeffz Moeffz
    Jedi-Meister
    0 x
    431 Beiträge
    0 Hilfreiche Beiträge
    18. 07. 2005, 11:55

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

    [url]http://www.typo3forum.de/forum/list/list_post//27411/[/url]

    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 Amelia
    Jedi-Meister
    0 x
    327 Beiträge
    0 Hilfreiche Beiträge
    18. 07. 2005, 11:56

    @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 Proximo
    Jedi-Ratsmitglied
    0 x
    563 Beiträge
    0 Hilfreiche Beiträge
    18. 07. 2005, 12:10

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

    [url]http://www.typo3.net/forum/list/list_post//27411/[/url]

    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