.. include:: /Includes.rst.txt
.. index::
PAGE
Top-level objects; page
.. _page:
.. _page-datatype:
.. _object-type-page:
====
PAGE
====
This defines what is rendered in the frontend.
PAGE is an object type. A good habit is to use :typoscript:`page` as the top-level object name for
the content-page on a website.
TYPO3 does not initialize :typoscript:`page` by default. You must initialize this
explicitly, for example:
.. code-block:: typoscript
:caption: EXT:site_package/Configuration/TypoScript/setup.typoscript
page = PAGE
Pages are referenced by two main values. The "id" and "type".
**The "id"** points to the uid of the page (or the alias). Thus the
page is found.
Most of this code is executed in the PHP script
:php:`\TYPO3\CMS\Frontend\Http\RequestHandler`.
.. _page_output:
Output of the PAGE object
=========================
An empty :typoscript:`PAGE` object without further configuration renders a HTML page
like the following:
.. code-block:: html
Page title
This default behaviour can be changed by setting the property
:ref:`setup-config-disableallheadercode`:
.. code-block:: typoscript
:caption: EXT:site_package/Configuration/TypoScript/setup.typoscript
page.config.disableAllHeaderCode = 1
If the output represents another format different from HTML the HTTP header
should also be set, for example:
.. code-block:: typoscript
:caption: EXT:site_package/Configuration/TypoScript/setup.typoscript
page.config.additionalHeaders.10.header = Content-type:application/json
.. index::
PAGE; typeNum
PAGE; Multiple pages
Multiple pages
==============
The **type** is used to define how the page should be rendered. This
is primarily used with different representations of the same content.
Your default page will most likely have type 0 while a JSON stream with the same
content could go with type 1.
When rendering pages in the frontend, TYPO3 uses the GET parameter **"type"**
to define how the page should be rendered. This
is primarily used with different representations of the same content.
Your default page will most likely have type 0 (which is the default) while a JSON
stream with the same content could go with type 1.
The property :ref:`typeNum ` defines for which type,
the page will be used.
Example:
.. code-block:: typoscript
:caption: EXT:site_package/Configuration/TypoScript/setup.typoscript
page = PAGE
page.typeNum = 0
page {
# set properties ...
}
json = PAGE
json.typeNum = 1
# ...
See :ref:`An example page type used for JSON data `
about an example for the latter page.
In the frontend, the original URLs that are generated will include the type and
an id parameter (for the page id), example (for json and page id 22):
:samp:`/index.php?id=22&type=1`
Guidelines
----------
Good, general PAGE object names to use are:
* **page** for the main page with content
* **json** for a json stream with content
* **xml** for a XML stream with content
These are just recommendations. However, especially the name page for the content bearing page
is very common and most documentation will imply that your main page object is called page.
Examples
========
Please see the dedicated example page about examples of how to use the
PAGE object: :ref:`page_examples`
.. index:: PAGE; Properties
Properties
==========
.. container:: ts-properties
============================== ===================================== ====================== ========================
Property Data Type :ref:`stdwrap` Default
============================== ===================================== ====================== ========================
`1,2,3,4...`_ :ref:`cObject `
`bodyTag`_ :t3-data-type:`tag`
`bodyTagAdd`_ :t3-data-type:`string`
`bodyTagCObject`_ :ref:`cObject `
`config`_ :ref:`->CONFIG `
`cssInline.[array]`_ :ref:`cObject `
`footerData.[array]`_ :ref:`cObject `
`headerData.[array]`_ :ref:`cObject `
`headTag`_ :t3-data-type:`tag` / :ref:`stdwrap`
`includeCSS.[array]`_ :t3-data-type:`resource`
`includeCSSLibs.[array]`_ :t3-data-type:`resource`
`includeJS.[array]`_ :t3-data-type:`resource`
`includeJSFooter.[array]`_ :t3-data-type:`resource`
`includeJSFooterlibs.[array]`_ :t3-data-type:`resource`
`includeJSLibs.[array]`_ :t3-data-type:`resource`
`inlineLanguageLabelFiles`_ (array of strings)
`inlineSettings`_ (array of strings)
`jsFooterInline.[array]`_ :ref:`cObject `
`jsInline.[array]`_ :ref:`cObject `
`meta`_ (array of strings)
`shortcutIcon`_ :t3-data-type:`resource`
`stdWrap`_ :ref:`stdwrap`
`typeNum`_ :t3-data-type:`integer` 0
`wrap`_ :t3-data-type:`wrap`
============================== ===================================== ====================== ========================
.. ### BEGIN~OF~TABLE ###
.. index:: PAGE; Content objects
.. _setup-page-1-2-3-4:
1,2,3,4...
==========
.. container:: table-row
Property
1,2,3,4...
Data type
:ref:`cObject `
Description
These properties can be used to define any number of objects,
just like you can do with a :ref:`COA content object `.
The content of these objects will be rendered on the page in the
order of the numbers, not in the order they get defined in the TypoScript
definition.
It is considered best practise to leave space between the numbers such
that it will be possible to place objects before and after other objects
in the future. Therefore you will often see that people use the number
10 and no number 1 is found.
Example
.. code-block:: typoscript
:caption: EXT:site_package/Configuration/TypoScript/setup.typoscript
page = PAGE
page.20 = TEXT
page.20.value = World
page.10 = TEXT
page.10.value = Hello
This renders to :html:`HelloWorld`.
.. index:: PAGE; bodyTag
.. _setup-page-bodytag:
bodyTag
=======
.. container:: table-row
Property
bodyTag
Data type
:t3-data-type:`tag`
Default
Description
Body tag on the page
Example
.. code-block:: typoscript
:caption: EXT:site_package/Configuration/TypoScript/setup.typoscript
# This will lead to
page.bodyTag =
.. index:: PAGE;
.. _setup-page-bodytagadd:
bodyTagAdd
==========
.. container:: table-row
Property
bodyTagAdd
Data type
:t3-data-type:`string`
Description
This content is added inside of the opening :html:`` tag right
before the :html:`>` character. This is mostly useful for adding
attributes to the :html:`` tag.
Example
.. code-block:: typoscript
:caption: EXT:site_package/Configuration/TypoScript/setup.typoscript
# This will lead to
page.bodyTagAdd = class="example"
.. index:: PAGE; bodyTagCObject
.. _setup-page-bodytagcobject:
bodyTagCObject
==============
.. container:: table-row
Property
bodyTagCObject
Data type
cObject
Description
This is the default body tag. It is overridden by :ref:`setup-page-bodyTag`,
if that is set.
**Note:** Additionally to the body tag properties noted here,
there also is the property :ref:`setup-config-disableBodyTag`,
which, if set, disables body tag generation independently
from what might be set here.
.. index:: PAGE; config
.. _setup-page-config:
config
======
.. container:: table-row
Property
config
Data type
:ref:`->CONFIG `
Description
Configuration for the page. Any entries made here override the same
entries in the top-level object :ref:`config`.
.. _setup-page-css-inlinestyle:
CSS\_inlineStyle
================
.. versionchanged:: 12.0
Using this setting has no effect anymore. Use
:ref:`page.cssInline ` instead.
.. index:: PAGE; cssInline.[array]
.. _setup-page-cssinline:
cssInline.[array]
=================
.. container:: table-row
Property
cssInline.[array]
Data type
:ref:`cObject `
Description
Allows to add inline CSS to the page :html:`` section.
The :typoscript:`cssInline` property contains any number of numeric keys, each representing one cObject.
Internally handled as PHP integer, maximum number is therefore restricted to :php:`PHP_INT_MAX`.
Example
.. code-block:: typoscript
:caption: EXT:site_package/Configuration/TypoScript/setup.typoscript
cssInline {
10 = TEXT
10.value = h1 {margin:15px;}
20 = TEXT
20.value = h1 span {color: blue;}
}
.. index:: PAGE; footerData.[array]
.. _setup-page-footerdata:
footerData.[array]
==================
.. container:: table-row
Property
footerData.[array]
Data type
:ref:`cObject `
Description
Same as :ref:`setup-page-headerData`,
except that this block gets included at the bottom of the page
(just before the closing :html:`` tag).
The :typoscript:`footerData` property contains any number of numeric keys, each representing one cObject.
Internally handled as PHP integer, maximum number is therefore restricted to :php:`PHP_INT_MAX`.
Example
.. code-block:: typoscript
:caption: EXT:site_package/Configuration/TypoScript/setup.typoscript
footerData {
3 = TEXT
3.value =
50 = TEXT
50.value =
}
.. index:: PAGE; headerData.[array]
.. _setup-page-headerdata:
headerData.[array]
==================
.. container:: table-row
Property
headerData.[array]
Data type
:ref:`cObject `
Description
Inserts custom content in the head section of the website.
While you can also use this to include stylesheet references or JavaScript,
you should better use :ref:`page.includeCSS `
and :ref:`page.includeJS ` for such files.
Features like file concatenation and file compression will not work on files,
which are included using :typoscript:`headerData`.
For meta tags, use the dedicated configuration :ref:`page.meta `.
By default, gets inserted after all the style definitions.
The :typoscript:`headerData` property contains any number of numeric keys, each representing one cObject.
Internally handled as PHP integer, maximum number is therefore restricted to :php:`PHP_INT_MAX`.
Example
.. code-block:: typoscript
:caption: EXT:site_package/Configuration/TypoScript/setup.typoscript
page.headerData {
3 = TEXT
3.value =
50 = TEXT
50.value =
}
.. index:: PAGE; headTag
.. _setup-page-headtag:
headTag
=======
.. container:: table-row
Property
headTag
Data type
:t3-data-type:`tag` / :ref:`stdwrap`
Default
Description
Head-tag if alternatives are wanted
.. index:: PAGE; includeCSS.[array]
.. _setup-page-includecss-array:
includeCSS.[array]
==================
.. container:: table-row
Property
includeCSS.[array]
Data type
:t3-data-type:`resource`
Description
Inserts a stylesheet (just like the :typoscript:`stylesheet` property), but allows
setting up more than a single stylesheet, because you can enter files
in an array.
The file definition must be a valid :t3-data-type:`resource` data type,
otherwise nothing is inserted.
Each file has *optional properties*:
**allWrap**: Wraps the complete tag, useful for conditional
comments.
**allWrap.splitChar**: Defines an alternative splitting character
(default is "\|" - the vertical line).
**alternate**: If set (boolean) then the rel-attribute will be
"alternate stylesheet".
**disableCompression**: If :typoscript:`config.compressCss` is enabled, this
disables the compression of this file.
**excludeFromConcatenation**: If :typoscript:`config.concatenateCss` is
enabled, this prevents the file from being concatenated.
**external**: If set, there is no file existence check. Useful for
inclusion of external files.
**forceOnTop**: Boolean flag. If set, this file will be added on top
of all other files.
**if**: Allows to define conditions, which must evaluate to TRUE for
the file to be included. If they do not evaluate to TRUE, the file
will not be included. Extensive usage might cause huge numbers of
temporary files to be created. See ->if for details.
**inline**: If set, the content of the CSS file is inlined using
:html:`