[FEATURE] Add a TS option to disable body tag generation 85/14685/5
authorMichael Kunze <michael.kunze@netresearch.de>
Tue, 18 Sep 2012 08:25:52 +0000 (10:25 +0200)
committerDmitry Dulepov <dmitry@typo3.org>
Mon, 10 Dec 2012 11:53:14 +0000 (12:53 +0100)
When using TemplaVoila for page generation, you sometimes need to be
able to set classes directly on the body tag.

Unfortunately, TYPO3 itself generates the <body> tag, too - so we have 2
body tags in the HTML document. To solve this problem, TYPO3 needs a way
to not generate a <body> tag.

Therefore introduce the config.disableBodyTag TypoScript option. When it
is set, TYPO3's page generator does not generate a <body> tag at all.

Change-Id: Ifcbe67134a910cdf26075af45fbd2b2c0efe203b
Resolves: #40986
Releases: 6.1
Reviewed-on: https://review.typo3.org/14685
Reviewed-by: Christian Weiske
Tested-by: Christian Weiske
Reviewed-by: Dmitry Dulepov
Tested-by: Dmitry Dulepov
typo3/sysext/frontend/Classes/Page/PageGenerator.php
typo3/sysext/t3editor/res/jslib/parse_typoscript/tokenizetyposcript.js
typo3/sysext/t3editor/res/tsref/tsref.xml

index 068ebdd..aed4b1b 100644 (file)
@@ -891,28 +891,32 @@ class PageGenerator {
                        $pageRenderer->addBodyContent(LF . '<noframes>' . LF);
                }
                // Bodytag:
                        $pageRenderer->addBodyContent(LF . '<noframes>' . LF);
                }
                // Bodytag:
-               $defBT = $GLOBALS['TSFE']->pSetup['bodyTagCObject'] ? $GLOBALS['TSFE']->cObj->cObjGetSingle($GLOBALS['TSFE']->pSetup['bodyTagCObject'], $GLOBALS['TSFE']->pSetup['bodyTagCObject.'], 'bodyTagCObject') : '';
-               if (!$defBT) {
-                       $defBT = $GLOBALS['TSFE']->defaultBodyTag;
-               }
-               $bodyTag = $GLOBALS['TSFE']->pSetup['bodyTag'] ? $GLOBALS['TSFE']->pSetup['bodyTag'] : $defBT;
-               if ($bgImg = $GLOBALS['TSFE']->cObj->getImgResource($GLOBALS['TSFE']->pSetup['bgImg'], $GLOBALS['TSFE']->pSetup['bgImg.'])) {
-                       $bodyTag = preg_replace('/>$/', '', trim($bodyTag)) . ' background="' . $GLOBALS['TSFE']->absRefPrefix . $bgImg[3] . '">';
-               }
-               if (isset($GLOBALS['TSFE']->pSetup['bodyTagMargins'])) {
-                       $margins = intval($GLOBALS['TSFE']->pSetup['bodyTagMargins']);
-                       if ($GLOBALS['TSFE']->pSetup['bodyTagMargins.']['useCSS']) {
+               if ($GLOBALS['TSFE']->config['config']['disableBodyTag']) {
+                       $bodyTag = '';
+               } else {
+                       $defBT = $GLOBALS['TSFE']->pSetup['bodyTagCObject'] ? $GLOBALS['TSFE']->cObj->cObjGetSingle($GLOBALS['TSFE']->pSetup['bodyTagCObject'], $GLOBALS['TSFE']->pSetup['bodyTagCObject.'], 'bodyTagCObject') : '';
+                       if (!$defBT) {
+                               $defBT = $GLOBALS['TSFE']->defaultBodyTag;
+                       }
+                       $bodyTag = $GLOBALS['TSFE']->pSetup['bodyTag'] ? $GLOBALS['TSFE']->pSetup['bodyTag'] : $defBT;
+                       if ($bgImg = $GLOBALS['TSFE']->cObj->getImgResource($GLOBALS['TSFE']->pSetup['bgImg'], $GLOBALS['TSFE']->pSetup['bgImg.'])) {
+                               $bodyTag = preg_replace('/>$/', '', trim($bodyTag)) . ' background="' . $GLOBALS['TSFE']->absRefPrefix . $bgImg[3] . '">';
+                       }
+                       if (isset($GLOBALS['TSFE']->pSetup['bodyTagMargins'])) {
+                               $margins = intval($GLOBALS['TSFE']->pSetup['bodyTagMargins']);
+                               if ($GLOBALS['TSFE']->pSetup['bodyTagMargins.']['useCSS']) {
 
 
-                       } else {
-                               $bodyTag = preg_replace('/>$/', '', trim($bodyTag)) . ' leftmargin="' . $margins . '" topmargin="' . $margins . '" marginwidth="' . $margins . '" marginheight="' . $margins . '">';
+                               } else {
+                                       $bodyTag = preg_replace('/>$/', '', trim($bodyTag)) . ' leftmargin="' . $margins . '" topmargin="' . $margins . '" marginwidth="' . $margins . '" marginheight="' . $margins . '">';
+                               }
+                       }
+                       if (trim($GLOBALS['TSFE']->pSetup['bodyTagAdd'])) {
+                               $bodyTag = preg_replace('/>$/', '', trim($bodyTag)) . ' ' . trim($GLOBALS['TSFE']->pSetup['bodyTagAdd']) . '>';
+                       }
+                       // Event functions
+                       if (count($JSef[1])) {
+                               $bodyTag = preg_replace('/>$/', '', trim($bodyTag)) . ' ' . trim(implode(' ', $JSef[1])) . '>';
                        }
                        }
-               }
-               if (trim($GLOBALS['TSFE']->pSetup['bodyTagAdd'])) {
-                       $bodyTag = preg_replace('/>$/', '', trim($bodyTag)) . ' ' . trim($GLOBALS['TSFE']->pSetup['bodyTagAdd']) . '>';
-               }
-               // Event functions
-               if (count($JSef[1])) {
-                       $bodyTag = preg_replace('/>$/', '', trim($bodyTag)) . ' ' . trim(implode(' ', $JSef[1])) . '>';
                }
                $pageRenderer->addBodyContent(LF . $bodyTag);
                // Div-sections
                }
                $pageRenderer->addBodyContent(LF . $bodyTag);
                // Div-sections
@@ -1027,4 +1031,4 @@ class PageGenerator {
 }
 
 
 }
 
 
-?>
\ No newline at end of file
+?>
index 575207e..ce8d81b 100644 (file)
@@ -291,6 +291,7 @@ var typoscriptWords = {
        'disableAllHeaderCode': 'reserved',
        'disableAltText': 'reserved',
        'disableBigButtons': 'reserved',
        'disableAllHeaderCode': 'reserved',
        'disableAltText': 'reserved',
        'disableBigButtons': 'reserved',
+       'disableBodyTag': 'reserved',
        'disableCacheSelector': 'reserved',
        'disableCharsetHeader': 'reserved',
        'disabled': 'reserved',
        'disableCacheSelector': 'reserved',
        'disableCharsetHeader': 'reserved',
        'disabled': 'reserved',
@@ -1619,6 +1620,7 @@ var typoscriptWords = {
        'disableAllHeaderCode': 'reserved',
        'disableAltText': 'reserved',
        'disableBigButtons': 'reserved',
        'disableAllHeaderCode': 'reserved',
        'disableAltText': 'reserved',
        'disableBigButtons': 'reserved',
+       'disableBodyTag': 'reserved',
        'disableCacheSelector': 'reserved',
        'disableCharsetHeader': 'reserved',
        'disabled': 'reserved',
        'disableCacheSelector': 'reserved',
        'disableCharsetHeader': 'reserved',
        'disabled': 'reserved',
index c6fc3e7..5fd7937 100644 (file)
@@ -5917,6 +5917,10 @@ cssInline {
                        <default><![CDATA[
 ]]></default>
                </property>
                        <default><![CDATA[
 ]]></default>
                </property>
+               <property name="disableBodyTag" type="boolean">
+                       <description><![CDATA[This option disables <body> tag generation by the TYPO3 core. It is useful for extensions like TemplaVoila, which can produce its own <body> tag with additional attributes.]]></description>
+                       <default><![CDATA[0]]></default>
+               </property>
                <property name="extOnReady" type="CARRAY">
                        <description><![CDATA[ExtJS specific, adds inline javascript, wrapped in Ext.onReady.
 
                <property name="extOnReady" type="CARRAY">
                        <description><![CDATA[ExtJS specific, adds inline javascript, wrapped in Ext.onReady.