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


  • Amelia Amelia
    Jedi-Meister
    0 x
    327 Beiträge
    0 Hilfreiche Beiträge
    13. 07. 2005, 11:36

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

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

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

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

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

    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:

    1. 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:

    1. ###PRINT###

    ins Template-Setup der Print-Seite folgendes geschrieben:

    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. 10 < styles.content.getLeft
    6. 20 < styles.content.get
    7. }

    und ins Setup des Maintemplates dieses:

    1. # Print-Funktion #
    2. marks.PRINT = COA
    3. marks.PRINT {
    4. wrap = <!!=|====><img src="fileadmin/images/nav_print.gif" alt="" /></a>
    5. 10 = TEXT
    6. 10.data = getIndpEnv:REQUEST_URI
    7. 10.listNum.splitChar = .
    8. 10.listNum = 1
    9. 10.wrap = |.98.html
    10. }
    11.  
    12. marks.PRINT.10 >
    13. marks.PRINT {
    14. 10 = TEXT
    15. 10.data = getIndpEnv:REQUEST_URI
    16. 10.wrap = |&type=98
    17. }

    Was habe ich da falsch gemacht / falsch verstanden ?

  • _o3_ _o3_
    Jedi-Meister
    0 x
    505 Beiträge
    0 Hilfreiche Beiträge
    13. 07. 2005, 13:39

    1. page{
    2. ...
    3. #den marker setzen
    4. DRUCKEN = TEXT
    5. DRUCKEN{
    6. field = uid
    7. wrap = <!!=.?=|==>drucken</a>
    8. }
    9. ...
    10. }

    unterhalb der geschweiften klammern dann folgendes..
    1. #druckansicht
    2. druckversion = PAGE
    3. druckversion{
    4. typeNum = 98
    5. stylesheet = fileadmin/deine_druck.css
    6. 10 = TEMPLATE
    7. 10{
    8. template = FILE
    9. template.file = fileadmin/deine_druck.html
    10.  
    11. #marker ansprechen
    12. marks{
    13. dein_marker = CONTENT
    14. dein_marker{
    15. table = tt_content
    16. where = colPos = 0
    17. orderBy = sorting
    18. }
    19. }
    20. }
    21. }
    22. }

    that´s it...

  • Amelia Amelia
    Jedi-Meister
    0 x
    327 Beiträge
    0 Hilfreiche Beiträge
    13. 07. 2005, 13:57

    @ _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:

    1. # Print-Funktion #
    2. marks.PRINT = TEXT
    3. marks.PRINT {
    4. field = uid
    5. wrap = <!!=.?=|==><img src="fileadmin/images/nav_print.gif"</a>
    6. }
    7. #druckansicht
    8. druckversion = PAGE
    9. druckversion{
    10. typeNum = 98
    11. stylesheet = fileadmin/style.css
    12. 10 = TEMPLATE
    13. 10 {
    14. template = FILE
    15. #HTML für Druckausgabe
    16. template.file = fileadmin/index.html
    17. #marker ansprechen
    18. marks{
    19. PRINT = CONTENT
    20. PRINT {
    21. table = tt_content
    22. where = colPos = 0
    23. orderBy = sorting
    24. }#select
    25. }#print
    26. }#marks
    27. }#druckversion

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

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

    1. temp.PRINT = COA
    2. temp.PRINT {
    3. wrap = <!!=|====>Drucken</a>
    4.  
    5. 10 = TEXT
    6. 10.data = getIndpEnv:REQUEST_URI
    7. 10.listNum.splitChar = .
    8. 10.listNum = 1
    9. 10.wrap = |.98.html
    10. }
    11.  
    12. [globalString = ENV:REQUEST_URI = *php?id*]
    13. temp.PRINT.10 >
    14. temp.PRINT {
    15. 10 = TEXT
    16. 10.data = getIndpEnv:REQUEST_URI
    17. 10.wrap = |&type=98
    18. }
    19. [GLOBAL]

    Und jetzt nochmal AUßERHALB JEDER KLAMMER genau drunter:

    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. 30 < styles.content.getRight
    9. 40 < styles.content.getBorder
    10. }

    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:

    1. marks.bild = IMAGE
    2. marks.bild.file = ...

    Genau unter so einen Eintrag schreiben wir dann:
    1. 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)
    1. ###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:

    1. marks{
    2. dein_marker = CONTENT
    3. dein_marker{
    4. table = tt_content
    5. where = colPos = 0
    6. orderBy = sorting
    7. }
    8. }
    9. }

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

    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