modifications_6-2-12.txt

GRiDDS GmbH, 2016-10-14 13:34

Download (21.3 KB)

 
1
diff --git a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php
2
index c3792f5..b8f46a2 100644
3
--- a/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php
4
+++ b/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php
5
@@ -823,7 +823,7 @@ class Typo3DbBackend implements BackendInterface, \TYPO3\CMS\Core\SingletonInter
6
 			) {
7
 				if (in_array($row[$GLOBALS['TCA'][$tableName]['ctrl']['languageField']], array(-1, 0))) {
8
 					$overlayMode = $querySettings->getLanguageMode() === 'strict' ? 'hideNonTranslated' : '';
9
-					$row = $pageRepository->getRecordOverlay($tableName, $row, $querySettings->getLanguageUid(), $overlayMode);
10
+					$row = $pageRepository->getRecordOverlayWithoutFallback($tableName, $row, $querySettings->getLanguageUid(), $overlayMode);
11
 				}
12
 			}
13
 			if ($row !== NULL && is_array($row)) {
14
diff --git a/typo3/sysext/frontend/Classes/ContentObject/ContentContentObject.php b/typo3/sysext/frontend/Classes/ContentObject/ContentContentObject.php
15
index dddd02e..a11fdc8 100644
16
--- a/typo3/sysext/frontend/Classes/ContentObject/ContentContentObject.php
17
+++ b/typo3/sysext/frontend/Classes/ContentObject/ContentContentObject.php
18
@@ -83,7 +83,19 @@ class ContentContentObject extends \TYPO3\CMS\Frontend\ContentObject\AbstractCon
19
 						if ($conf['table'] == 'pages') {
20
 							$row = $GLOBALS['TSFE']->sys_page->getPageOverlay($row);
21
 						} else {
22
-							$row = $GLOBALS['TSFE']->sys_page->getRecordOverlay($conf['table'], $row, $GLOBALS['TSFE']->sys_language_content, $GLOBALS['TSFE']->sys_language_contentOL);
23
+							$fallbackChain = NULL;
24
+							if (isset($conf['languageFallbackChain'])) {
25
+								$fallbackChain = \TYPO3\CMS\Core\Utility\GeneralUtility::intExplode(',', $conf['languageFallbackChain']);
26
+							}
27
+							$pageLanguageBinding = TRUE;
28
+							if (isset($conf['respectPageLanguageBinding']) &&
29
+								$conf['respectPageLanguageBinding'] == '0'
30
+							) {
31
+								$pageLanguageBinding = FALSE;
32
+							}
33
+							$row = $GLOBALS['TSFE']->sys_page->getRecordOverlayWithFallback(
34
+								$conf['table'], $row, $GLOBALS['TSFE']->sys_language_content, $GLOBALS['TSFE']->sys_language_contentOL, $fallbackChain, $pageLanguageBinding
35
+							);
36
 						}
37
 					}
38
 					// Might be unset in the sys_language_contentOL
39
diff --git a/typo3/sysext/frontend/Classes/ContentObject/Menu/AbstractMenuContentObject.php b/typo3/sysext/frontend/Classes/ContentObject/Menu/AbstractMenuContentObject.php
40
index 98b9dcf..182532d 100644
41
--- a/typo3/sysext/frontend/Classes/ContentObject/Menu/AbstractMenuContentObject.php
42
+++ b/typo3/sysext/frontend/Classes/ContentObject/Menu/AbstractMenuContentObject.php
43
@@ -990,7 +990,7 @@ class AbstractMenuContentObject {
44
 							$tok = TRUE;
45
 							// There is an alternative language active AND the current page requires a translation:
46
 							if ($GLOBALS['TSFE']->sys_language_uid && GeneralUtility::hideIfNotTranslated($data['l18n_cfg'])) {
47
-								if (!$data['_PAGES_OVERLAY']) {
48
+								if (!$data['_PAGES_OVERLAY'] || ($data['_PAGES_OVERLAY_LANGUAGE'] != $data['sys_language_uid'])) {
49
 									$tok = FALSE;
50
 								}
51
 							}
52
@@ -1871,7 +1871,7 @@ class AbstractMenuContentObject {
53
 		while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($resource)) {
54
 			$this->sys_page->versionOL('tt_content', $row);
55
 			if ($GLOBALS['TSFE']->sys_language_contentOL && $basePageRow['_PAGES_OVERLAY_LANGUAGE']) {
56
-				$row = $this->sys_page->getRecordOverlay('tt_content', $row, $basePageRow['_PAGES_OVERLAY_LANGUAGE'], $GLOBALS['TSFE']->sys_language_contentOL);
57
+				$row = $this->sys_page->getRecordOverlayWithFallback('tt_content', $row, $basePageRow['_PAGES_OVERLAY_LANGUAGE'], $GLOBALS['TSFE']->sys_language_contentOL);
58
 			}
59
 			if ($this->mconf['sectionIndex.']['type'] !== 'all') {
60
 				$doIncludeInSectionIndex = $row['sectionIndex'] >= 1;
61
diff --git a/typo3/sysext/frontend/Classes/ContentObject/RecordsContentObject.php b/typo3/sysext/frontend/Classes/ContentObject/RecordsContentObject.php
62
index e130814..b809c56 100644
63
--- a/typo3/sysext/frontend/Classes/ContentObject/RecordsContentObject.php
64
+++ b/typo3/sysext/frontend/Classes/ContentObject/RecordsContentObject.php
65
@@ -97,7 +97,19 @@ class RecordsContentObject extends AbstractContentObject {
66
 							if ($val['table'] === 'pages') {
67
 								$row = $GLOBALS['TSFE']->sys_page->getPageOverlay($row);
68
 							} else {
69
-								$row = $GLOBALS['TSFE']->sys_page->getRecordOverlay($val['table'], $row, $GLOBALS['TSFE']->sys_language_content, $GLOBALS['TSFE']->sys_language_contentOL);
70
+								$fallbackChain = NULL;
71
+								if (isset($conf['languageFallbackChain'])) {
72
+									$fallbackChain = \TYPO3\CMS\Core\Utility\GeneralUtility::intExplode(',', $conf['languageFallbackChain']);
73
+								}
74
+								$pageLanguageBinding = TRUE;
75
+								if (isset($conf['respectPageLanguageBinding']) &&
76
+									$conf['respectPageLanguageBinding'] == '0'
77
+								) {
78
+									$pageLanguageBinding = FALSE;
79
+								}
80
+								$row = $GLOBALS['TSFE']->sys_page->getRecordOverlayWithFallback(
81
+									$conf['table'], $row, $GLOBALS['TSFE']->sys_language_content, $GLOBALS['TSFE']->sys_language_contentOL, $fallbackChain, $pageLanguageBinding
82
+								);
83
 							}
84
 						}
85
 					}
86
diff --git a/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php b/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php
87
index 9116db7..8c24b86 100644
88
--- a/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php
89
+++ b/typo3/sysext/frontend/Classes/Controller/TypoScriptFrontendController.php
90
@@ -656,6 +656,20 @@ class TypoScriptFrontendController {
91
 	public $sys_language_content = 0;
92
 
93
 	/**
94
+	 * Contains the prioritized language fallback chain
95
+	 *
96
+	 * @var array
97
+	 */
98
+	public $languageFallbackChain = array();
99
+
100
+	/**
101
+	 * Contains the prioritized language fallback chain for the current page
102
+	 *
103
+	 * @var array
104
+	 */
105
+	public $languageFallbackChainWithPageLanguageBinding = array();
106
+
107
+	/**
108
 	 * Site content overlay flag; If set - and sys_language_content is > 0 - ,
109
 	 * records selected will try to look for a translation pointing to their uid. (If
110
 	 * configured in [ctrl][languageField] / [ctrl][transOrigP...]
111
@@ -2710,7 +2724,9 @@ class TypoScriptFrontendController {
112
 		// Get values from TypoScript:
113
 		$this->sys_language_uid = ($this->sys_language_content = (int)$this->config['config']['sys_language_uid']);
114
 		list($this->sys_language_mode, $sys_language_content) = GeneralUtility::trimExplode(';', $this->config['config']['sys_language_mode']);
115
+		$languageFallbackChain = GeneralUtility::intExplode(',', $this->config['config']['languageFallbackChain']);
116
 		$this->sys_language_contentOL = $this->config['config']['sys_language_overlay'];
117
+		$this->sys_language_content_list = array($this->sys_language_uid);
118
 		// If sys_language_uid is set to another language than default:
119
 		if ($this->sys_language_uid > 0) {
120
 			// check whether a shortcut is overwritten by a translated page
121
@@ -2731,11 +2747,21 @@ class TypoScriptFrontendController {
122
 								$this->pageNotFoundAndExit('Page is not available in the requested language (strict).');
123
 								break;
124
 							case 'content_fallback':
125
-								$fallBackOrder = GeneralUtility::intExplode(',', $sys_language_content);
126
-								foreach ($fallBackOrder as $orderValue) {
127
-									if ((string)$orderValue === '0' || count($this->sys_page->getPageOverlay($this->id, $orderValue))) {
128
-										$this->sys_language_content = $orderValue;
129
-										// Setting content uid (but leaving the sys_language_uid)
130
+								// default is to fallback to default language
131
+								$this->sys_language_content = 0;
132
+								foreach ($languageFallbackChain as $languageId) {
133
+								    // ignore default language
134
+									if ($this->sys_language_uid === $languageId || $languageId <= 0) {
135
+										continue;
136
+									}
137
+									$pageOverlay = $this->sys_page->getPageOverlay($this->id, $languageId);
138
+									if (count($pageOverlay)) {
139
+ 										// Setting content uid (but leaving the sys_language_uid)
140
+										$this->sys_language_content = $languageId;
141
+										// Remove all fields from page overlay which do not exist in $this->page
142
+										$pageOverlay = array_intersect_key($pageOverlay, $this->page);
143
+										// overlay page with existing page overlay
144
+										$this->page = array_merge($this->page, $pageOverlay);
145
 										break;
146
 									}
147
 								}
148
@@ -2750,8 +2776,25 @@ class TypoScriptFrontendController {
149
 					}
150
 				}
151
 			} else {
152
-				// Setting sys_language if an overlay record was found (which it is only if a language is used)
153
-				$this->page = $this->sys_page->getPageOverlay($this->page, $this->sys_language_uid);
154
+				// Remove all fields from page overlay which do not exist in $this->page
155
+				$olRec = array_intersect_key($olRec, $this->page);
156
+				// overlay page with existing page overlay
157
+				$this->page = array_merge($this->page, $olRec);
158
+			}
159
+			// calculate the language fallback chains
160
+			if ($this->sys_language_mode === 'content_fallback') {
161
+				$this->languageFallbackChain = $languageFallbackChain;
162
+				foreach ($languageFallbackChain as $languageId) {
163
+					// ignore default language
164
+					if ($this->sys_language_uid === $languageId) {
165
+						continue;
166
+					}
167
+					$this->languageFallbackChain[] = $languageId;
168
+					if (count($this->sys_page->getPageOverlay($this->id, $languageId))) {
169
+						$this->languageFallbackChainWithPageLanguageBinding[] = $languageId;
170
+					}
171
+				}
172
+
173
 			}
174
 		}
175
 		// Setting sys_language_uid inside sys-page:
176
diff --git a/typo3/sysext/frontend/Classes/Page/PageRepository.php b/typo3/sysext/frontend/Classes/Page/PageRepository.php
177
index 249f7f1..a5b7d74 100644
178
--- a/typo3/sysext/frontend/Classes/Page/PageRepository.php
179
+++ b/typo3/sysext/frontend/Classes/Page/PageRepository.php
180
@@ -326,7 +326,9 @@ class PageRepository {
181
 	 */
182
 	public function getPageOverlay($pageInput, $lUid = -1) {
183
 		// Initialize:
184
+		$noSpecialLanguageRequested = FALSE;
185
 		if ($lUid < 0) {
186
+			$noSpecialLanguageRequested = TRUE;
187
 			$lUid = $this->sys_language_uid;
188
 		}
189
 		$row = NULL;
190
@@ -351,7 +353,18 @@ class PageRepository {
191
 				// Was the id
192
 				$page_id = $pageInput;
193
 			}
194
-			if (count($fieldArr)) {
195
+			if (count($fieldArr)) {			
196
+				$languageList = array();
197
+				if ($noSpecialLanguageRequested) {
198
+					$languageList = array_unique(array_merge(
199
+						array($lUid),
200
+						$GLOBALS['TSFE']->languageFallbackChain,
201
+						array($GLOBALS['TSFE']->sys_language_content)
202
+					));
203
+					$languageIds = implode(',', array_map('intval', $languageList));
204
+					$languageClause = 'sys_language_uid IN (' . $languageIds . ') ';
205
+				}
206
+
207
 				// NOTE to enabledFields('pages_language_overlay'):
208
 				// Currently the showHiddenRecords of TSFE set will allow
209
 				// pages_language_overlay records to be selected as they are
210
@@ -359,9 +372,35 @@ class PageRepository {
211
 				// However you may argue that the showHiddenField flag should
212
 				// determine this. But that's not how it's done right now.
213
 				// Selecting overlay record:
214
-				$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(implode(',', $fieldArr), 'pages_language_overlay', 'pid=' . (int)$page_id . '
215
-								AND sys_language_uid=' . (int)$lUid . $this->enableFields('pages_language_overlay'), '', '', '1');
216
-				$row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
217
+				if (!in_array('sys_language_uid', $fieldArr)) {
218
+					$fieldArr[] = 'sys_language_uid';
219
+				}
220
+				$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
221
+					implode(',', $fieldArr),
222
+					'pages_language_overlay',
223
+					'pid=' . intval($page_id) .
224
+						' AND ' . $languageClause .
225
+						$this->enableFields('pages_language_overlay'),
226
+					'',
227
+					'',
228
+					2
229
+				);
230
+				if ($noSpecialLanguageRequested) {
231
+					// Fetch the row and prefer the most recent in the fallback priority list starting with the lUid
232
+					$firstRow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
233
+					$secondRow = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
234
+					foreach ($languageList as $languageId) {
235
+						if ($firstRow['sys_language_uid'] == $languageId) {
236
+							$row = $firstRow;
237
+							break;
238
+						} elseif ($secondRow['sys_language_uid'] == $languageId) {
239
+							$row = $secondRow;
240
+							break;
241
+						}
242
+					}
243
+				} else {
244
+					$row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res);
245
+				}
246
 				$GLOBALS['TYPO3_DB']->sql_free_result($res);
247
 				$this->versionOL('pages_language_overlay', $row);
248
 				if (is_array($row)) {
249
@@ -394,18 +433,75 @@ class PageRepository {
250
 	}
251
 
252
 	/**
253
-	 * Creates language-overlay for records in general (where translation is found
254
-	 * in records from the same table)
255
+	 * Creates a language overlay for records stored inside tables which contain the
256
+	 * translation information themselves. In addition to getRecordOverlay this method
257
+	 * also checks for specified content language fallbacks and includes them.
258
 	 *
259
 	 * @param string $table Table name
260
-	 * @param array $row Record to overlay. Must containt uid, pid and $table]['ctrl']['languageField']
261
-	 * @param integer $sys_language_content Pointer to the sys_language uid for content on the site.
262
+	 * @param array $row Record to overlay. Must contain uid, pid and $table]['ctrl']['languageField']
263
+	 * @param integer|null $sys_language_content Pointer to the sys_language uid for content on the site.
264
+	 * @param string|null $OLmode Overlay mode. If "hideNonTranslated" then records without translation will not be returned un-translated but unset (and return value is FALSE)
265
+	 * @param array|null $fallbackList ordered fallback list of language ids
266
+	 * @param bool $pageLanguageBinding use page language binding for the language fallback chain (only used if fallbackList is NULL)
267
+	 * @return mixed Returns the input record, possibly overlaid with a translation. But if $OLmode is "hideNonTranslated" then it will return FALSE if no translation is found.
268
+	 */
269
+	public function getRecordOverlayWithFallback(
270
+		$table, $row, $sys_language_content = NULL, $OLmode = NULL, $fallbackList = NULL, $pageLanguageBinding = TRUE
271
+	) {
272
+		/** @var TypoScriptFrontendController $tsfe */
273
+		$tsfe = $GLOBALS['TSFE'];
274
+		$sys_language_content = ($sys_language_content !== NULL ? $sys_language_content : $tsfe->sys_language_content);
275
+		$OLmode = ($OLmode !== NULL ? $OLmode: $tsfe->sys_language_contentOL);
276
+		if ($fallbackList === NULL) {
277
+			$fallbackList = $tsfe->languageFallbackChainWithPageLanguageBinding;
278
+			if (!$pageLanguageBinding) {
279
+				$fallbackList = $tsfe->languageFallbackChain;
280
+			}
281
+		}
282
+		$record = $this->getRecordOverlayWithoutFallback($table, $row, $sys_language_content, $OLmode);
283
+		if (!is_array($record) || !isset($record['_LOCALIZED_UID'])) {
284
+			if (count($fallbackList) && $sys_language_content && $OLmode !== 'hideNonTranslated') {
285
+				foreach ($fallbackList as $fallbackId) {
286
+					$record = $this->getRecordOverlayWithoutFallback($table, $row, $fallbackId, $OLmode);
287
+					if (is_array($record) && isset($record['_LOCALIZED_UID'])) {
288
+						break;
289
+					}
290
+				}
291
+			}
292
+		}
293
+		return $record;
294
+	}
295
+
296
+	/**
297
+	 * Creates a language overlay for records stored inside tables which contain the
298
+	 * translation information themselves.
299
+	 *
300
+	 * @param string $table Table name the record comes from
301
+	 * @param array $row Record to overlay. Must contain the columns uid, pid and $TCA[$table]['ctrl']['languageField']
302
+	 * @param integer $sys_language_content Pointer to the sys_language uid to use for content.
303
 	 * @param string $OLmode Overlay mode. If "hideNonTranslated" then records without translation will not be returned  un-translated but unset (and return value is FALSE)
304
 	 * @throws \UnexpectedValueException
305
 	 * @return mixed Returns the input record, possibly overlaid with a translation.  But if $OLmode is "hideNonTranslated" then it will return FALSE if no translation is found.
306
 	 * @todo Define visibility
307
+	 * @deprecated since 6.2; will be removed two versions later
308
 	 */
309
 	public function getRecordOverlay($table, $row, $sys_language_content, $OLmode = '') {
310
+		GeneralUtility::logDeprecatedFunction();
311
+		return $this->getRecordOverlayWithoutFallback($table, $row, $sys_language_content, $OLmode);
312
+	}
313
+
314
+	/**
315
+	 * Creates a language overlay for records stored inside tables which contain the
316
+	 * translation information themselves.
317
+	 *
318
+	 * @throws \UnexpectedValueException
319
+	 * @param string $table Table name the record comes from
320
+	 * @param array $row Record to overlay. Must contain the columns uid, pid and $TCA[$table]['ctrl']['languageField']
321
+	 * @param integer $sys_language_content Pointer to the sys_language uid to use for content.
322
+	 * @param string $OLmode Overlay mode. If "hideNonTranslated" then records without translation will not be returned translated but unset (and return value is FALSE)
323
+	 * @return mixed Returns the input record, possibly overlaid with a translation. But if $OLmode is "hideNonTranslated" then it will return FALSE if no translation is found.
324
+	 */
325
+	public function getRecordOverlayWithoutFallback($table, $row, $sys_language_content, $OLmode) {
326
 		if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_page.php']['getRecordOverlay'])) {
327
 			foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_page.php']['getRecordOverlay'] as $classRef) {
328
 				$hookObject = GeneralUtility::getUserObj($classRef);
329
diff --git a/typo3/sysext/frontend/Tests/Unit/ContentObject/Menu/AbstractMenuContentObjectTest.php b/typo3/sysext/frontend/Tests/Unit/ContentObject/Menu/AbstractMenuContentObjectTest.php
330
index b97d23e..c2cd160 100644
331
--- a/typo3/sysext/frontend/Tests/Unit/ContentObject/Menu/AbstractMenuContentObjectTest.php
332
+++ b/typo3/sysext/frontend/Tests/Unit/ContentObject/Menu/AbstractMenuContentObjectTest.php
333
@@ -92,7 +92,7 @@ class AbstractMenuContentObjectTest extends \TYPO3\CMS\Core\Tests\UnitTestCase {
334
 		$this->fixture->sys_page->expects($this->once())->method('getPage')->will($this->returnValue(array('_PAGES_OVERLAY_LANGUAGE' => 1)));
335
 		$this->fixture->parent_cObj->expects($this->once())->method('exec_getQuery')->will($this->returnValue(1));
336
 		$GLOBALS['TYPO3_DB']->expects($this->exactly(2))->method('sql_fetch_assoc')->will($this->onConsecutiveCalls($this->returnValue(array('uid' => 0, 'header' => 'NOT_OVERLAID')), $this->returnValue(FALSE)));
337
-		$this->fixture->sys_page->expects($this->once())->method('getRecordOverlay')->will($this->returnValue(array('uid' => 0, 'header' => 'OVERLAID')));
338
+		$this->fixture->sys_page->expects($this->once())->method('getRecordOverlayWithFallback')->will($this->returnValue(array('uid' => 0, 'header' => 'OVERLAID')));
339
 		$result = $this->fixture->_call('sectionIndex', 'field');
340
 		$this->assertEquals($result[0]['title'], 'OVERLAID');
341
 	}
342
diff --git a/typo3/sysext/t3editor/res/tsref/tsref.xml b/typo3/sysext/t3editor/res/tsref/tsref.xml
343
index d104d2d..941dcdc 100644
344
--- a/typo3/sysext/t3editor/res/tsref/tsref.xml
345
+++ b/typo3/sysext/t3editor/res/tsref/tsref.xml
346
@@ -1002,6 +1002,11 @@ ignore - The system will stay with the selected language even if the page is not
347
 			<default><![CDATA[
348
 ]]></default>
349
 		</property>
350
+		<property name="languageFallbackChain" type="string">
351
+			<description><![CDATA[Ordered Comma-separated list of language ids for the language fallback.]]></description>
352
+			<default><![CDATA[
353
+]]></default>
354
+		</property>
355
 		<property name="sys_language_overlay" type="string">
356
 			<description><![CDATA[boolean / keyword
357
 			If set, records from certain tables selected by the CONTENT cObject using the "languageField" setting will select the default language (0) instead of any language set by sys_language_uid / sys_language_mode. In addition the system will look for a translation of the selected record and overlay configured fields.
358
@@ -1195,6 +1200,14 @@ Use -1 in combination with collect.
359
 			<default><![CDATA[
360
 ]]></default>
361
 		</property>
362
+		<property name="languageFallbackChain" type="stringList">
363
+			<description><![CDATA[Ordered comma-separated list of language ids for the language fallback chain (not considered for pages)]]></description>
364
+			<default><![CDATA[If this is NOT defined, the rendering of the records is done like configured for the site!]]></default>
365
+		</property>
366
+		<property name="respectPageLanguageBinding" type="boolean">
367
+			<description><![CDATA[Set this to 0 to prevent the binding of the language fallback chain to the current page (not considered for pages)]]></description>
368
+			<default><![CDATA[If this is NOT defined, the rendering of the records is bound to the available page languages!]]></default>
369
+ 		</property>
370
 		<property name="stdWrap" type="stdWrap">
371
 			<description><![CDATA[
372
 ]]></description>
373
@@ -5536,6 +5549,14 @@ All measures is in pixels.]]></description>
374
 			<default><![CDATA[
375
 ]]></default>
376
 		</property>
377
+		<property name="languageFallbackChain" type="stringList">
378
+			<description><![CDATA[Ordered comma-separated list of language ids for the language fallback chain (not considered for pages)]]></description>
379
+			<default><![CDATA[If this is NOT defined, the rendering of the records is done like configured for the site!]]></default>
380
+		</property>
381
+		<property name="respectPageLanguageBinding" type="boolean">
382
+			<description><![CDATA[Set this to 0 to prevent the binding of the language fallback chain to the current page (not considered for pages)]]></description>
383
+			<default><![CDATA[If this is NOT defined, the rendering of the records is bound to the available page languages!]]></default>
384
+		</property>
385
 		<property name="source" type="stdWrap">
386
 			<description><![CDATA[List of record-id's, optionally with appended table-names.
387