1414namespace Pimcore \Bundle \StudioBackendBundle \Grid \Util \Trait ;
1515
1616use Pimcore \Bundle \StudioBackendBundle \Grid \Schema \Column ;
17- use Pimcore \Model \DataObject \Localizedfield ;
1817use Pimcore \Model \Element \ElementInterface ;
18+ use Pimcore \Tool ;
1919
2020/**
2121 * @internal
@@ -26,12 +26,25 @@ private function getLocalizedValue(Column $column, ElementInterface $element): m
2626 {
2727 $ getter = $ this ->getGetter ($ column ->getKey ());
2828 if ($ column ->getLocale ()) {
29- if ($ column ->getApplyFallbackLanguages ()) {
30- Localizedfield::setGetFallbackValues (true );
31- $ value = $ element ->$ getter ($ column ->getLocale ());
32- Localizedfield::setGetFallbackValues (false );
33- } else {
34- $ value = $ element ->$ getter ($ column ->getLocale ());
29+ $ value = $ element ->$ getter ($ column ->getLocale ());
30+
31+ if ($ column ->getApplyFallbackLanguages () && $ this ->isEmptyValue ($ value )) {
32+ // Walk configured fallback languages, then the system default as last resort
33+ $ fallbackLocales = Tool::getFallbackLanguagesFor ($ column ->getLocale ());
34+ $ defaultLanguage = Tool::getDefaultLanguage ();
35+ if ($ defaultLanguage !== null
36+ && $ defaultLanguage !== $ column ->getLocale ()
37+ && !in_array ($ defaultLanguage , $ fallbackLocales , true )
38+ ) {
39+ $ fallbackLocales [] = $ defaultLanguage ;
40+ }
41+
42+ foreach ($ fallbackLocales as $ fallbackLocale ) {
43+ $ value = $ element ->$ getter ($ fallbackLocale );
44+ if (!$ this ->isEmptyValue ($ value )) {
45+ break ;
46+ }
47+ }
3548 }
3649
3750 return $ value ;
@@ -54,4 +67,9 @@ private function getGetter(string $key): string
5467 {
5568 return 'get ' . ucfirst ($ key );
5669 }
70+
71+ private function isEmptyValue (mixed $ value ): bool
72+ {
73+ return $ value === null || $ value === '' || $ value === [];
74+ }
5775}
0 commit comments