Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Refer to media field of original language in TYPO3

In TYPO3 6.2 (just upgraded from 4.5) I have a TMENU with Images, using a cObject in NO to build the menu as desired.

It works in the main language, but in the second language's frontend, the images are not rendered - unless they are filled in in the second language's media field.

How do you force FILES to refer to the media field of the original language? In my case, always. In other cases, a fallback solution may be desired.

temp.menu = COA
temp.menu {
  wrap = <div class="teasermenu">|</div>
  15 = HMENU
  15 {
    special = list
    //special.value.cObject < temp.displayedpages
    // recieves a list, such as:
    special.value = 1,3,9
    1 = TMENU
    1 {
      noBlur = 1
      maxItems = 16
      wrap = <ul>|</ul>
      NO {
        wrapItemAndSub = <li>|</li>
        ATagBeforeWrap = 1
        ATagParams = || || || || class="red" |*| |*|

        stdWrap.cObject=COA
        stdWrap.cObject{

          10 = TEXT
          10.field = nav_title // title
          10.wrap = <strong class="teasermenu_header">|</span></strong>

          20=FILES
          20{
            if{
              isInList.field = uid
              //value.cObject < temp.displayedpages_wimage
              // receives another list, like:
              // value = 3,9
            }
            references {
              table=pages
              fieldName=media
            }
            renderObj=IMAGE
            renderObj{
              file{
                height=80
                maxH=80
                import.data=file:current:publicUrl
              }
              altText.field=title
              titleText.field=title    
              }
            }
          } 
        }
      }
    }
}

PS there are many media field / FAL fallback related bugs on forge, e.g. this one. But I have a feeling this might be a simpler issue.

like image 254
Urs Avatar asked Dec 05 '25 14:12

Urs


2 Answers

mergeIfNotBlank is gone now, the current solution (TYPO3 8.7) seems to be to set

$GLOBALS['TCA']['pages']['columns']['media']['config']['behaviour']['allowLanguageSynchronization'] = 1;

But based on https://forum.typo3.org/index.php/t/217033/-typo3-ug-freiburg-media-feld-in-den-seiteneigenschaften (thanks) there's this snippet. It also works with cropVariants:

temp.bgimg_wide = CONTENT
temp.bgimg_wide{
    table = sys_file_reference
    select{
        pidInList = {$pids.pidHome}
        where = tablenames='pages' AND fieldname='media'
        orderBy = sorting_foreign
        languageField = 0
        selectFields = uid_local
        max = 1
        begin = 0
    }
    renderObj = FILES
    renderObj{
        files.stdWrap.field = uid
        renderObj = IMG_RESOURCE
        renderObj {
                file {
                    import.data = file:current:uid
                    treatIdAsReference = 1 
                    width = 1600
                    cropVariant = bgimg_wide
                }
            }
        }
    }
}

This works!

like image 185
Urs Avatar answered Dec 07 '25 17:12

Urs


Based on Urs' answer, here comes a slight variation.

lib.getCurrentPageMedia = CONTENT
lib.getCurrentPageMedia {
    table = sys_file_reference
    select{
        pinInList = root, this
        where = tablenames='pages' AND fieldname='media' AND uid_foreign=###pid###
        orderBy = sorting_foreign
        languageField = 0
        selectFields = uid_local
        max = 1
        begin = 0
        markers {
            pid.data = TSFE:id
        }
    }
    renderObj = TEXT
    renderObj.stdWrap.field = uid
}

Fluid:

<f:image src="{f:cObject(typoscriptObjectPath:'lib.getCurrentPageMedia')}" alt="" width="400c" height="400c" treatIdAsReference="1" class="img-responsive" />

Advantage: you can define cropping, alt-text, etc. in your template.

like image 40
Markus Kappe Avatar answered Dec 07 '25 16:12

Markus Kappe



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!