Bild-Wahl mit Checkboxen

  • chrickenh chrickenh
    Jedi-Ritter
    0 x
    142 Beiträge
    0 Hilfreiche Beiträge
    12. 06. 2012, 11:37

    Hallo,
    ich habe hier ein Problem, weil ich zum ersten Mal mit If-Abfragen arbeiten muss und mir das Konzept nicht so recht einleuchtet.

    Ich habe mit Templavoila ein FCE eingerichtet, der erstmal nur eine Checkbox beinhaltet sowie ein Element mit Element Preset[i]Typoscript object path[/i].
    Wenn jetzt die Checkbox geklickt wird, dann soll ein Bild angezeigt werden.
    Wenn sie nicht geklickt wird, dann ein anderes.

    Mein TS ist bis jetzt nur Experimentierfeld, da komme ich nicht vorwärts.

    1. ## Medaillen
    2. lib.field_htmlbild = IMAGE
    3. lib.field_htmlbild {
    4. file = fileadmin/templates/medals/ida_off.jpg
    5. file {
    6. override = fileadmin/templates/medals/ida.jpg
    7. value = Wert1
    8. equals = Wert1
    9. }
    10. }
    11.  
    12. }

    Die Idee war, das Objekt [i]lib.field_htmlbild[/i] mit einem Bild zu füllen. Und falls das DB-Feld für die Checkbox [i]true[/i] ist, das Bild mit einem anderen zu überschreiben.

    Hoffentlich kann mir jemand helfen
    Lieben Gruß
    Chrickenh

    Dies ist mein Datastructure-XML, vielleicht hilft es ja:

    1. <?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
    2. <T3DataStructure>
    3. <meta type="array">
    4. <langDisable>1</langDisable>
    5. </meta>
    6. <ROOT type="array">
    7. <tx_templavoila type="array">
    8. <title>ROOT</title>
    9. <description>Select the HTML element on the page which you want to be the overall container element for the template.</description>
    10. </tx_templavoila>
    11. <type>array</type>
    12. <el type="array">
    13. <field_htmlbadge type="array">
    14. <tx_templavoila type="array">
    15. <title>HTML-check</title>
    16. <sample_data type="array">
    17. <numIndex index="0"></numIndex>
    18. </sample_data>
    19. <eType>check</eType>
    20. <TypoScript></TypoScript>
    21. <proc type="array">
    22. <int>0</int>
    23. <HSC>0</HSC>
    24. <stdWrap></stdWrap>
    25. </proc>
    26. <preview></preview>
    27. </tx_templavoila>
    28. <TCEforms type="array">
    29. <label>HTML-Badge</label>
    30. <config type="array">
    31. <type>check</type>
    32. <default type="integer">0</default>
    33. </config>
    34. </TCEforms>
    35. </field_htmlbadge>
    36. <field_htmlbild type="array">
    37. <tx_templavoila type="array">
    38. <title>htmlbild</title>
    39. <sample_data type="array">
    40. <numIndex index="0"></numIndex>
    41. </sample_data>
    42. <eType>TypoScriptObject</eType>
    43. <proc type="array">
    44. <int>0</int>
    45. <HSC>0</HSC>
    46. <stdWrap></stdWrap>
    47. </proc>
    48. <preview></preview>
    49. <TypoScriptObjPath>lib.field_htmlbild</TypoScriptObjPath>
    50. </tx_templavoila>
    51. </field_htmlbild>
    52. </el>
    53. </ROOT>
    54. </T3DataStructure>


  • 1
  • Julian.Hofmann Julian.Ho...
    Flash Gordon
    0 x
    3083 Beiträge
    132 Hilfreiche Beiträge
    13. 06. 2012, 09:20

    Hallo.

    die if-Abfragen sind tricky, aber mir scheint doch, dass Du es verstanden hast :-)

    Problem dürfte eher sein, dass das override nicht greift. Kann das sein? denn [i]file[/i] ist im IMAGE-Objekt vom Typ imgResource, welche IMHO keine stdWrap-Eigenschaft hat.

    Viele Grüße
    Julian

  • igorshmigor igorshmig...
    Jedi-Ratsmitglied
    0 x
    941 Beiträge
    0 Hilfreiche Beiträge
    13. 06. 2012, 11:46

    Ich denke Julian hat recht.
    Alternativ könntest Du es vielleicht in etwa so lösen:

    1. ## Medaillen
    2. lib.field_htmlbild = COA
    3. lib.field_htmlbild{
    4. 10=IMAGE
    5. 10 {
    6. file = fileadmin/templates/medals/ida.jpg
    7. value = Wert1
    8. equals = Wert1
    9. }
    10. }
    11. 20<.10
    12. 20.file = fileadmin/templates/medals/ida_off.jpg
    13. 20.stdWrap.if.negate=1
    14. }

  • Julian.Hofmann Julian.Ho...
    Flash Gordon
    0 x
    3083 Beiträge
    132 Hilfreiche Beiträge
    13. 06. 2012, 13:02

    Lieber ohne das "stdWrap.".

    Denn bei Deinem TS wird das IMAGE-Objekt beide Male erzeugt (und ggf. via GIFBUILDER odgl. ist auch einiges zu tun), um [i]danach[/i] via [i]stdWrap[/i] für einen Fall verworfen zu werden.
    Die reine [i]if[/i]-Eigenschaft wird hingegen [b]vor[/b] dem Verarbeiten geprüft, d.h. es findet nur eine Verarbeitung statt, wenn das Objekt auch wirklich Verwendung finden wird.

    1. class tslib_content_Image extends tslib_content_Abstract {
    2.  
    3. /**
    4. * Rendering the cObject, IMAGE
    5. *
    6. * @param array Array of TypoScript properties
    7. * @return string Output
    8. */
    9. public function render($conf = array()) {
    10. if ($this->cObj->checkIf($conf['if.'])) {
    11. $theValue = $this->cObj->cImage($conf['file'], $conf);
    12. if (isset($conf['stdWrap.'])) {
    13. $theValue = $this->cObj->stdWrap($theValue, $conf['stdWrap.']);
    14. }
    15. return $theValue;
    16. }
    17. }
    18.  
    19. }

  • igorshmigor igorshmig...
    Jedi-Ratsmitglied
    0 x
    941 Beiträge
    0 Hilfreiche Beiträge
    13. 06. 2012, 13:20

    Ach. Das hat mir meine O'Reilly TypoScript kurz&gut-Referenz gar nicht verraten, dass "if" auch direkt auf IMAGE angewandt werden kann. Vielleicht war das früher nicht so? Bei irgendeiner Version wurden ja viele Objekte nachträglich mit stdWrap-Funktionalitäten ausgestattet.

  • chrickenh chrickenh
    Jedi-Ritter
    0 x
    142 Beiträge
    0 Hilfreiche Beiträge
    20. 06. 2012, 09:44

    Hallo und vielen Dank für Eure Antworten.
    Ich habe es jetzt ähnlich wie igorshmigor gelöst.
    Damit wird zwar auch das IMAGE-Objekt zweimal erzeugt, aber im Rahmen des Projektes ist das kein Problem.
    Es gibt maximal 16 User, die gleichzeitig darauf zugreifen. Also kein Thema.

    Vielen Dank für Eure Hilfe
    Chrickenh

    1. ## Medaillen
    2. lib.field_html1_bild = COA
    3. lib.field_html1_bild {
    4. 5 = IMAGE
    5. 5 {
    6. file = fileadmin/templates/medals/html1.jpg
    7. file.width = 150
    8. file.height = 150
    9. }
    10. 5.if.isTrue.field = field_html1_check
    11.  
    12. 10 = IMAGE
    13. 10 {
    14. file = fileadmin/templates/medals/html1_off.jpg
    15. file.width = 150
    16. file.height = 150
    17. }
    18. 10.if.isFalse.field = field_html1_check
    19.  
    20. }

  • 1