1.. include:: ../../Includes.txt
2
3===================================
4Deprecation: #85902 - IMGMENU/GMENU
5===================================
6
7See :issue:`85902`
8
9Description
10===========
11
12Rendering a Hierarchical Menu via TypoScript previously allowed various rendering methods, namely textual (`TMENU`),
13but also rendering menu items as images (`GMENU`) or as a image map (`IMGMENU`). Both graphical possibilities
14have been marked as deprecated, as it is considered bad practice building websites
15nowadays - images with a fixed width, and text within images has various drawbacks in terms of accessibility and
16responsive renderings.
17
18The following PHP classes have been marked as deprecated:
19
20* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject`
21* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\ImageMenuContentObject`
22
23The related TypoScript menu objects `GMENU` and `GMENUITEM` as well as `IMGMENU` and `IMGMENUITEM` have been
24marked as deprecated.
25
26On top the following TypoScript options within a MENU item, regarding TMENU have been marked as deprecated:
27
28* imgNamePrefix
29* imgNameNotRandom
30
31The following TMENU item properties should not be used anymore.
32
33* RO_chBgColor
34* beforeImg
35* beforeImgTagParams
36* beforeImgLink
37* beforeROImg
38* RO
39* afterImg
40* afterImgTagParams
41* afterImgLink
42* afterROImg
43
44The following item states have been marked as deprecated ("RO" for "rollover" in graphics-related items).
45
46* IFSUBRO
47* ACTRO
48* ACTIFSUBRO
49* CURRO
50* CURIFSUBRO
51* USRRO
52* USERDEF1RO
53* USERDEF2RO
54
55The following previously public properties are now marked as internal and trigger a PHP :php:`E_USER_DEPRECATED` error,
56partly due to preparations of refactoring the PHP code once GMENU functionality is removed, and partly
57due to the highly connected functionality within the PHP classes:
58
59* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuNumber`
60* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->entryLevel`
61* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->spacerIDList`
62* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->doktypeExcludeList`
63* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->alwaysActivePIDlist`
64* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->imgNamePrefix`
65* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->imgNameNotRandom`
66* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->debug`
67* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->GMENU_fixKey`
68* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->MP_array`
69* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->conf`
70* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->mconf`
71* [not scanned] :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->tmpl`
72* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->sys_page`
73* [not scanned] :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->id`
74* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->nextActive`
75* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuArr`
76* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->hash`
77* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->result`
78* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->rL_uidRegister`
79* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->INPfixMD5`
80* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->I`
81* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMresult`
82* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMfreezePrefix`
83* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMmenuItems`
84* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMsubmenuObjSuffixes`
85* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMextraScript`
86* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->WMcObj`
87* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->alternativeMenuTempArray`
88* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->nameAttribute`
89
90The following methods have changed visibility:
91
92* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->subMenu()`
93* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->link()`
94* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->procesItemStates()`
95* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->changeLinksForAccessRestrictedPages()`
96* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isNext()`
97* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isActive()`
98* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isCurrent()`
99* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isSubMenu()`
100* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->isItemState()`
101* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->accessKey()`
102* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->userProcess()`
103* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->setATagParts()`
104* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getPageTitle()`
105* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getMPvar()`
106* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getDoktypeExcludeWhere()`
107* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->getBannedUids()`
108* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject->menuTypoLink()`
109
110* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_RO()`
111* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_init()`
112* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_beforeLinking()`
113* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_afterLinking()`
114* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_beforeAllWrap()`
115* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\GraphicalMenuContentObject->extProc_finish()`
116
117* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->getBeforeAfter()`
118* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_init()`
119* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_beforeLinking()`
120* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_afterLinking()`
121* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_beforeAllWrap()`
122* :php:`TYPO3\CMS\Frontend\ContentObject\Menu\TextMenuContentObject->extProc_finish()`
123
124The following functionality has been marked as deprecated as well:
125
126* :php:`TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController->setJS('mouseOver')`
127
128
129Impact
130======
131
132Instantiating any of the deprecated PHP classes, or calling any of the PHP methods will trigger a
133PHP :php:`E_USER_DEPRECATED` error, as well as setting any of the previously public properties.
134
135Using `GMENU` or `IMGMENU` or any of the TypoScript settings will also raise a PHP :php:`E_USER_DEPRECATED` error.
136
137
138Affected Installations
139======================
140
141TYPO3 installations using `GMENU` or `IMGMENU` TypoScript functionality, roll-over functionality within menus
142in Frontend, or image-related functionality related to `HMENU`, or extending `HMENU` with their custom menus.
143
144
145Migration
146=========
147
148Migrate to `TMENU` by using "before" and "after" functionality to effectively render images with `GIFBUILDER`.
149
150.. index:: Frontend, TypoScript, PartiallyScanned, ext:frontend
151