Zum Inhalt springen

Random und Fix Header

Erstellt am 24. Mai 2011 · 15 Antworten · letzte Antwort am 22. Juni 2011

Tags: Frage

Coreblade ·

Hallo zusammen

Seit kurzem bin ich auch unter den Typo3 Developer :-). Nun auch schon meine erste Frage.

Ich setze ein random Headerbild mit:

lib.headerbildhome < plugin.tx_ccrandomimage_pi1
lib.headerbildhome {
  path = fileadmin/header/
  fileExt = jpg,jpeg,gif,png
  renderObj = COA
  renderObj {
    wrap = |
    10 = TEXT
    10.value = <img height="350" width="800" src="###FILE_1###">
  }
}

Das fixe Headerbild setze ich so:

lib.headerbildhome = IMAGE
lib.headerbildhome {
  file.import = uploads/media/
  file.import.data = levelmedia: -1,slide
  file.import.listNum = 0
  file.width = 800px
  file.height = 350px
}

Wie kann ich nun realisieren, dass das fixe priorität hat. Also wenn bei Ressourcen ein Bild angegeben ist, wird dieses angezeigt, sonst random. Hoffe ihr könnt mir weiterhelfen.

Gruss Coreblade

Tosta ·

Hi Coreblade,

benutze override. Damit kannst du ein Default überschreiben:

lib.headerbildhome < plugin.tx_ccrandomimage_pi1
lib.headerbildhome {
  path = fileadmin/header/
  fileExt = jpg,jpeg,gif,png
  renderObj = COA
  renderObj {
    wrap = |
    10 = TEXT
    10 {
      value = <img height="350" width="800" src="###FILE_1###">
      override.cObject = IMAGE
      override.cObject {
        file {
          import = uploads/media/
          import.data = levelmedia: -1,slide
          import.listNum = 0
          width = 800px
          height = 350px
        }
      }
    }
  }
}

Wenn also ein Bild im Media-Feld gefunden wird (was übrigens durch das slide ziemlich wahrscheinlich ist – Absicht?), wird dieses Bild benutzt. Sonst das Bild, das über value spezifiziert ist.

Soweit meine Theorie… Den Code hab ich nicht getestet. Ich glaube nicht, dass er so funktioniert, aber so ähnlich sollte es gehen. Ich kenne ccrandomimage nicht und kann's darum nicht genau sagen. Wahrscheinlich musst du das override auf der Ebene von renderObj einsetzen. Hat plugin.tx_ccrandomimage_pi1 stdWrap-Funktionalität? Dann wird es gehen.

Tosta

Coreblade ·

Hallo Tosta

Absolut perfekt deine Lösung! Funktioniert 1a! Danke viel mals!

Eine allgemeine Frage hätte ich noch.

Unter Tab Ressourcen in den Seiteneigenschaften gebe ich das Headerbild an. Für was genau wären dort die Bilder gedacht? Was kann sonst noch gemacht werden mit diesen Bildern?
Würdest du besser ohne slide?

Gr. Coreblade

Tosta ·

Diese Bilder sind genau dafür gedacht, wofür du sie benutzt. Das Media-Feld gehört ja zu den Seiteneigenschaften. Das sind Daten, die der Seite einmal zugeordnet werden (nicht mehrmals wie Inhaltselemente), wie zum Beispiel das Bild im Seitenkopf. Abgesehen davon kannst du mit den Bildern (und den anderen Daten) machen, was du willst und was du mit TypoScript zuwege bringst.

Slide: Sorgt ja dafür, dass, wenn die aktuelle Seite kein Bild zugeordnet hat, das Bild der Elternseite benutzt wird bzw. das der Großelternseite u.s.w., bis bei einer der übergeordneten Seiten endlich ein Bild gefunden wird. Erst wenn auch deine Root-Seite keine Bild hat, kommt dein Random-Default zum Zuge, also möglicherweise gar nicht. Deshalb meine Frage, ob das deine Absicht war.

Tosta

Coreblade ·

Ah ok. In meinem Fall betrifft das die Startseite also die oberste Ebene. Von dem her spielts mit dem slide keine Rolle. Habe ihn jetzt trotzdem entfernt, da dieser keinen Sinn macht.
Danke viel mals für deine Hilfe Toasta!

Gr. Coreblade

Coreblade ·

Hallo zusammen, Hallo Toasta

Eine weitere Anforderung ist dazugekommen. Und zwar soll im Headerbild ein Batch eingebunden werden. Soll heissen ein Element, z.B. ein Stern mit Text als Inhalt, der zum Bild gerendert wird. Allerdings kriege ich das mit dem Random und fix nicht hin... Habe das Ganze über den GIFBUILDER versucht. ISt das der falsche Ansatz? Lediglich die overwrite Funktion funzt nicht mehr, da es diese beim IMAGE nicht gibt.

lib.headerbildhome < plugin.tx_ccrandomimage_pi1
lib.headerbildhome {
  path = fileadmin/headerimages/
  fileExt = jpg,jpeg,gif,png
  renderObj = COA
  renderObj {
    //wrap = |
    10 = IMAGE
    10 {
      file = GIFBUILDER
      file {
        XY = 800, 350
        format = jpg
        quality = 80
        niceText = 1
        10 = IMAGE
        10.file = ###FILE_1###
        10.file.width = 800
        10.file.height = 350
        
        20 = TEXT
        20.text = Test
        20.color = black
        20.fontSize = 20
        20.offset = 10, 30
        20.transparentColor = #ffffff
      }
    }
    
    override.cObject = IMAGE
    override.cObject {
      file {
        import = uploads/media/
        import.data = levelmedia: -1
        import.listNum = 0
        width = 800px
        height = 350px
      }
    }
  }
}

Hat da jemand Erfahrung mit?

Gr. Coreblade

Tosta ·

Da kann ich jetzt aber nichts mehr mit anfangen: »Allerdings kriege ich das mit dem Random und fix nicht hin…«. Bitte nicht posten, dass du ein Problem hast, sondern wie dein Problem beschaffen ist! Danke.

Wenn override nicht benutzt werden kann, versuch's mit den andern Bedingungs-Funktionalitäten: fieldRequired, if u.s.w.

Coreblade ·

Der erste Code Teil bis zum override klappt ohne Probleme. Nur das fixe Bild wird wenn vorhanden ignoriert und nicht gesetzt. Da das Override nicht funktioniert. Leider habe ich keine Ahnung wie das mit andern Funktionen wie fieldRequired etc. klappen könnte. Bin erst seit kurzem Typo3er ;-)

Tosta ·

Wenn du auf Bücher stehst: TYPO3 Kochbuch, O'Reilly-Verlag. Damit kannst du TypoScript lernen. Leicht ist das nicht; ich habe drei Projekte gebraucht um einigermaßen routiniert zu arbeiten und anspruchsvolle Aufgaben lösen zu können. Spaß macht TypoScript immer noch nicht (die Websites geschafft zu haben macht aber Spaß).

Wenn ich das richtig verstehe, ersetzt RandomImage den Marker ###FILE_1### durch einen Dateipfad. Und mit override willst du dafür noch ein Default zur Verfügung stellen. Also mach das override direkt beim file.import! Dabei sparst du dir auch die redundanten Einträge für width und height.

    ...
    10 = IMAGE
    10 {
      file = GIFBUILDER
      file {
        XY = 800, 350
        format = jpg
        quality = 80
        niceText = 1
        10 = IMAGE
        10.file {
          import.cObject = TEXT
          import.cObject {
            value = ###FILE_1###
            override.cObject = TEXT
            override.cObject {
              data = levelmedia: -1,slide
              listNum = 0
              wrap = uploads/media/
            }
          }
          width = 800
          height = 350
        }
        20 = TEXT
        20 {
          ...
        }
      }
    }
  }
}

Wie gehabt: keine Garantie, nichts getestet, eher als Anregung zu sehen.

Du solltest aber wirklich verstehen, was hier passiert; also lern TypoScript, aber zuerst mal einfachere Sachen! Viel Erfolg!

Tosta

Coreblade ·

Hi Tosta

Tosta schrieb

Wenn ich das richtig verstehe, ersetzt RandomImage den Marker ###FILE_1### durch einen Dateipfad. Und mit override willst du dafür noch ein Default zur Verfügung stellen. Also mach das override direkt beim file.import! Dabei sparst du dir auch die redundanten Einträge für width und

Mit Override will ich das fixe Bild darstellen. Sprich wenn in Media ein Bild eingetragen ist, nimm das. Sonst Random. Jetzt ist der Fall so: Wenn in Media kein Bild vorhanden ist, wird ein weisser Hintergrund dargestellt.

Gruss Coreblade

Tosta ·

In deinem vorletzen Post schreibst du: »Der erste Code Teil bis zum override klappt ohne Probleme«. Das ist ja wohl der Random-Teil. Der soll wirken, wenn in Media kein Bild eingetragen ist. Im letzten Post schreibst du: »Wenn in Media kein Bild vorhanden ist, wird ein weisser Hintergrund dargestellt«. Für mich heißt das, Random funktioniert doch nicht!

Und was meinst mit »weißer Hintergrund«? Nichts? Oder eine weiße Box (auf nicht weißem Untergrund)?

Bitte formuliere deine Fragen und Beschreibungen präzise, sonst können wir dir nicht helfen.

Tosta

Coreblade ·

Ok. Mit meinem Code funktionierte das Override ja nicht. Somit aber das Random. Mit deinem Code funktioniert nur das fixe aber das Random nicht. Mit weissem Hintergrund meine ich nichts. Der Text (20) wird zwar darübergelegt, darunter ist aber kein Bild also nur weiss.
Sorry für die Umstände...

Coreblade ·

Hab's hinbekommen. Habe lediglich deinen Code im Override mit "required = 1" ergänzt! Danke Tosta.
Wie aufwändig ist es, denn Text nun ausserhalb von TS verwaltbar zu machen?
PS:Hoffe ich gehe da mit meiner Fragerei niemandem auf die Nerfen. Aber so habe ich bereits sehr viel gelernt und profitiert. Danke an der Stelle für die kompetenten Antworten!

Code:

lib.headerbildhome < plugin.tx_ccrandomimage_pi1
lib.headerbildhome {
  path = fileadmin/headerimages/
  fileExt = jpg,jpeg,gif,png
  renderObj = COA
  renderObj {
    10 = IMAGE
    10 {
      file = GIFBUILDER
      file {
        XY = 800, 350
        format = jpg
        quality = 80
        niceText = 1
        10 = IMAGE
        10.file {
          import.cObject = TEXT
          import.cObject {
            value = ###FILE_1###
            override.cObject = TEXT
            override.cObject {
              required = 1
              data = levelmedia: -1
              listNum = 0
              wrap = uploads/media/
            }
          }
          width = 800
          height = 350
        }
        20 = TEXT
        20.text = Test
        20.color = black
        20.fontSize = 20
        20.offset = 10, 30
        20.transparentColor = #ffffff
      }
    }
  }
}
Tosta ·
Coreblade schrieb

Wie aufwändig ist es, denn Text nun ausserhalb von TS verwaltbar zu machen?

Du kannst den Text als Seiteneigenschaft in der Tabelle pages speichern – entweder in einem Feld, das du nicht brauchst, oder in einem, das du mit einer eigenen Extension anlegst.

Coreblade schrieb

PS:Hoffe ich gehe da mit meiner Fragerei niemandem auf die Nerfen.

Tust du. Wenn deine Fragen klarer wären… Aber ich muss immer erst rätseln, was du meinst.

Coreblade schrieb

Aber so habe ich bereits sehr viel gelernt und profitiert.

Na immerhin. Dann lohnt sich ja die Arbeit.

Coreblade ·

Hallo

Im Anhang seht ihr mein Ergebnis. Allerdings ist der Weisse Text (Suspendisse...) nich wirklich Inhalt vom Bild im Hintergrund. Sprich mit offset kann ich es ausserhalb des Bildes schieben. Ist dies möglich, dass es quasi ein Element vom kleinen blauem Bild ist?

lib.headerbildhome < plugin.tx_ccrandomimage_pi1
lib.headerbildhome {
  path = fileadmin/headerimages/
  fileExt = jpg,jpeg,gif,png
  renderObj = COA
  renderObj {
    10 = IMAGE
    10 {
      file = GIFBUILDER
      file {
        XY = 990, 350
        10 = IMAGE
        10.file {
          import.cObject = TEXT
          import.cObject {
            value = ###FILE_1###
            override.cObject = TEXT
            override.cObject {
              required = 1
              data = levelmedia: -1
              listNum = 0
              wrap = uploads/media/
            }
          }
          width = 800
          height = 350
        }
        10.offset = 190,0
        
        20= IMAGE
        20 {
          file = GIFBUILDER
          file {
            XY = 190, 350
            //backColor = #000000
            //transparentBackground = 1
            10 = IMAGE
            10 {
              file = fileadmin/headerimages/picVisual.jpg
              file.width = 88
              file.height = 30
              offset = 92, 285
            }
            
            20 = IMAGE
            20 {
              file = fileadmin/headerimages/picVisual.jpg
              file.width = 88
              file.height = 30
              offset = 92, 320
            }
          }
        }
       
        30= IMAGE
        30 {
          file = GIFBUILDER
          file {
            XY = 250, 350
            backColor = #000000
            transparentBackground = 1
            offset = 50, 50
            10 = IMAGE
            10 {
              file = fileadmin/headerimages/picVisual.jpg
              file.width = 200
              file.height = 100
            }
            
            20 = TEXT
            20 {
              text.data = page:subtitle
              niceText = 1
              fontColor = white
              fontSize = 20
              offset = 5, 20
            }
          }
        }       
      }
    }
  }
}

Header.jpg

Coreblade ·

Habs hinbekommen.
Allerdings mit einem andernen Ansatz: zwei Div's welche die gerenderten Grafiken anzeigen.

Danke für eure Hilfe! 😃