a:1:{s:4:"rows";a:9:{i:0;a:6:{s:8:"property";s:9:"directory";s:8:"datatype";s:304:"This will generate a menu of all pages with pid = 35 and pid = 56.<br>&nbsp;&nbsp;&nbsp;20 = HMENU<br>&nbsp;&nbsp;&nbsp;20.special = directory<br>&nbsp;&nbsp;&nbsp;20.special.value = 35, 56<br>&nbsp;<br>If .value is not set, the default pid is the current page.<br>&nbsp;<br>Support for Mount Pages: Yes.";s:11:"description";s:6:"&nbsp;";s:7:"default";N;s:12:"column_count";i:3;s:16:"is_propertyTable";i:1;}i:1;a:6:{s:8:"property";s:4:"list";s:8:"datatype";s:308:"This will generate a menu with the two pages (uid=35 and uid=36) listed:<br>&nbsp;&nbsp;&nbsp;20 = HMENU<br>&nbsp;&nbsp;&nbsp;20.special = list<br>&nbsp;&nbsp;&nbsp;20.special.value = 35, 56<br>&nbsp;<br>If .value is not set, the default uid is the .entryLevel uid.<br>&nbsp;<br>Support for Mount Pages: Yes.";s:11:"description";s:6:"&nbsp;";s:7:"default";N;s:12:"column_count";i:3;s:16:"is_propertyTable";i:1;}i:2;a:6:{s:8:"property";s:7:"updated";s:8:"datatype";s:2753:"This will generate a menu of the most recently updated pages from the branches in the tree starting with the uid&#039;s (uid=35 and uid=36) listed. Furthermore the field &quot;tstamp&quot; is used (default is SYS_LASTCHANGED) and the treedepth is 2 levels. Also there will be shown a maximum of 8 pages and they must have been updated within the last three days (3600*24*3):<br>&nbsp;&nbsp;&nbsp;20 = HMENU<br>&nbsp;&nbsp;&nbsp;20.special = updated<br>&nbsp;&nbsp;&nbsp;20.special.value = 35, 56<br>&nbsp;&nbsp;&nbsp;20.special {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mode = tstamp<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;depth = 2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxAge = 3600*24*3<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;limit = 8<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;<br>&nbsp;<b>Ordering </b>is by default done in reverse order (desc) with the field specified by &#x201c;mode&#x201d; , but setting &#x201c;alternativeSortingField&#x201d; for the menu object (eg GMENU, see later) will override that.<br>Properties &quot;mode&quot;, &quot;depth&quot;, &quot;maxAge&quot; and &quot;limit&quot; is only used with special=&quot;updated&quot;.<br>&nbsp;<b>mode:</b> Which field in the pages-table to use. Default is &quot;SYS_LASTCHANGED&quot; (which is updated when a page is generated to the youngest tstamp of the records on the page), &quot;manual&quot; or &#x201c;lastUpdated&#x201d; will use the field &quot;lastUpdated&quot; (set manually in the page-record) and &quot;tstamp&quot; will use the &quot;tstamp&quot;-field of the pagerecord, which is set automatically when the record is changed. &quot;crdate&quot; will use &quot;crdate&quot;-field of the pagerecord. &#x201c;starttime&#x201d; will use the starttime field.<br>Fields with zero value is not selected anyway.<br>&nbsp;<b>depth:</b> By default (if the value is not an integer) the depth is 20 levels. The range is 1-20. A depth of 1 means only the start id, depth of 2 means start-id + first level. NOTE: depth is relative to beginAtLevel.<br>&nbsp;<b>beginAtLevel</b>: Integer. Determines starting level for the pagetrees generated based on .value and .depth. Zero is default and includes the start id. 1=starts with the first row of subpages, 2=starts with the second row of subpages. Depth is relative to this starting point.<br>&nbsp;<b>maxAge:</b> Seconds+calc. Pages with update-dates older than currenttime minus this number of seconds will not be shown in the menu no matter what. Default is &quot;not used&quot;. You may use +-*/ for calculations.<br>&nbsp;<b>limit:</b> Max number of items in the menu. Default is 10, max is 100.<br>&nbsp;<b>excludeNoSearchPages:</b> Boolean. If set, pages marked &quot;No search&quot; is not included into special-menus.<br>&nbsp;<br>Support for Mount Pages: Yes.";s:11:"description";s:6:"&nbsp;";s:7:"default";N;s:12:"column_count";i:3;s:16:"is_propertyTable";i:1;}i:3;a:6:{s:8:"property";s:8:"rootline";s:8:"datatype";s:888:"Creates a menu with pages from the &quot;rootline&quot; (see earlier in this reference)<br>&nbsp;<b>.range</b> = [begin-level] | [end-level] (same way as you reference the .entryLevel for HMENU)<br>&nbsp;<b>.target_[0-x]</b> targets<br>&nbsp;<br>This...<br>&nbsp;<br>page.2 = HMENU<br>page.2.special = rootline<br>page.2.special.range = 1|-2<br>page.2.special.targets.3 = page<br>page.2.1 = TMENU<br>page.2.1.target = _top<br>page.2.1.wrap = &lt;HR&gt; | &lt;HR&gt;<br>page.2.1.NO {<br>&nbsp;&nbsp;&nbsp;linkWrap = | &gt; <br>}<br>&nbsp;<br>... creates a menu like this:<b><br>Page level 1 &gt; Page level 2 &gt; Page level 3 &gt; Page level 4 &gt;</b><br>(The menu starts at level 1 and does NOT link to the current page (-2 is the level before). Further all pages on level 3 will have &quot;page&quot; as target and all other &quot;_top&quot;)<br>&nbsp;<br>Support for Mount Pages: Yes.";s:11:"description";s:6:"&nbsp;";s:7:"default";N;s:12:"column_count";i:3;s:16:"is_propertyTable";i:1;}i:4;a:6:{s:8:"property";s:6:"browse";s:8:"datatype";s:3477:"This kind of menu is built of items given by a list from the property &quot;.item&quot;. Each element in the list (sep. by &quot;|&quot;) is either a reserved itemname (see list) with a predefined function or a userdefined name which you can assign a link to any page. Note that the current page cannot be the root-page of a site.<br>&nbsp;<br>Support for Mount Pages: No!<br>&nbsp;<b>.items </b>( &quot;|&quot; separated list of &quot;itemnames&quot;)<br>&nbsp;<b>.[itemnames].target </b>(target) - optional/alternative target of the item<br>&nbsp;<b>.[itemnames].uid </b>(uid of page) - optional/alternative page-uid to link to<br>&nbsp;<b>.[itemnames].fields.[fieldname]</b> (string) - override field &quot;fieldname&quot; in pagerecord.<br>&nbsp;<b>.items.prevnextToSection (boolean)</b> - if set, the &quot;prev&quot; and &quot;next&quot; navigation will jump to the next section when it reaches the end of pages in the current section<br>&nbsp;<b>.value</b> (page-uid) - default is current page id. Seldomly you might want to override this value with another page-uid which will then act as the basepoint for the menu and the predefined items.<br>&nbsp;<b>Ordering </b>is by default done in reverse order (desc) with the field specified by &#x201c;mode&#x201d; , but setting &#x201c;alternativeSortingField&#x201d; for the menu object (eg GMENU, see later) will override that.<i><br>&nbsp;</i><i><br>Reserved itemnames:</i><br>&nbsp;<b>next</b> / <b>prev</b> : links to next page / previous page. Next and previous pages are from the same &quot;pid&quot; as the current page id (or &quot;value&quot;) - that is the next item in a menu with the current page. Also referred to as current level. <br>If &quot;.prevnextToSection&quot; is set then next/prev will link to the first page of next section / last page of previous section.<br>&nbsp;<b>nextsection</b> / <b>prevsection</b> : links to next section / previous section. A section is defined as the subpages of a page on the same level as the parent (pid) page of the current page. Will not work if parent page of current page is the root page of the site.<br>&nbsp;<b>nextsection_last</b> | <b>prevsection_last</b>: Where nextsection/prevsection links to the first page in a section, these links to the last pages. If there is only one page in the section that will be both first and last. Will not work if parent page of current page is the root page of the site.<br>&nbsp;<b>first</b> / <b>last </b>: First / Last page on current level. If there is only one page on the current level that page will be both first and last.<br>&nbsp;<b>up</b> : Links to the parent (pid) page of the current page. (up 1 level) Will always be available<br>&nbsp;<b>index </b>: Links to the parent of the parent page of the current page (up 2 levels). May not be available if that page is out of the rootline.<br>&nbsp;<b><br>&nbsp;Examples:</b><br>If id=20 is current page then:<br>21= prev and first, 19 = next, 18 = last, 17 = up, 1=index, 10 = nextsection, 11 = nextsection_last<br>prevsection and prevsection_last is not present because id=3 has no subpages! <br>&nbsp;<b><br>TypoScript (only &quot;browse&quot;-part, needs also TMENU/GMENU):</b><br>xxx = HMENU<br>xxx.special = browse<br>xxx.special {<br>&nbsp;&nbsp;&nbsp;items = index|up|next|prev <br>&nbsp;&nbsp;&nbsp;items.prevnextToSection = 1<br>&nbsp;&nbsp;&nbsp;index.target = _blank<br>&nbsp;&nbsp;&nbsp;index.fields.title = INDEX<br>&nbsp;&nbsp;&nbsp;index.uid = 8<br>}";s:11:"description";s:6:"&nbsp;";s:7:"default";N;s:12:"column_count";i:3;s:16:"is_propertyTable";i:1;}i:5;a:6:{s:8:"property";s:8:"keywords";s:8:"datatype";s:1741:"Makes a menu of pages with one or more keywords also found on the current page.<br>&nbsp;<b>.value </b>= page for which keywords to find similar pages.<br>&nbsp;<b>.mode:</b> Which field in the pages-table to use for sorting. Default is &quot;SYS_LASTCHANGED&quot; (which is updated when a page is generated to the youngest tstamp of the records on the page), &quot;manual&quot; or &#x201c;lastUpdated&#x201d; will use the field &quot;lastUpdated&quot; (set manually in the page-record) and &quot;tstamp&quot; will use the &quot;tstamp&quot;-field of the pagerecord, which is set automatically when the record is changed. &quot;crdate&quot; will use &quot;crdate&quot;-field of the pagerecord. &#x201c;starttime&#x201d; will use the starttime field.<br>&nbsp;<b>.entryLevel </b>= where in the rootline the search begins. Standard rootline syntax (-x to x)<br>&nbsp;<b>.depth, .limit, .excludeNoSearchPages, .beginAtLevel </b>(like &quot;updated&quot; menu)<b><br>.setKeywords (/stdWrap) = lets you define the keywords manually by defining them as a commaseparated list. If this property is defined, it overrides the default, which is the keywords of the current page.</b><br>&nbsp;<b>.keywordsField</b> = defines the field in the pages-table in which to search for the keywords. Default is the fieldname &#x201c;keyword&#x201d;. No check is done to see if the field you enter here exists, so enter an existing field, OK?!<br>&nbsp;<b>.keywordsField.sourceField</b> = defines the field from the current page from which to take the keywords being matched. The default is &#x201c;keyword&#x201d;. (Notice that &#x201c;.keywordsField&#x201d; is only setting the page-record field to <i>search in</i> !)<br>&nbsp;<br>Support for Mount Pages: Yes.";s:11:"description";s:6:"&nbsp;";s:7:"default";N;s:12:"column_count";i:3;s:16:"is_propertyTable";i:1;}i:6;a:6:{s:8:"property";s:8:"language";s:8:"datatype";s:2678:"Creates a language selector menu. Typically this is made as a menu with flags for each language a page is translated to and when the user clicks any element the same page id is hit but with a change to the &#x201c;&amp;L&#x201d; parameter in the URL.<br>&nbsp;<br>The &#x201c;language&#x201d; type will create menu items based on the current page record but with the language record for each language overlaid if available. The items all link to the current page id and only &#x201c;&amp;L&#x201d; is changed.<br>&nbsp;<b><br>Item states:</b><br>When &#x201c;TSFE-&gt;sys_language_uid&#x201d; matches the sys_language uid for an element the state is set to &#x201c;ACT&#x201d;, otherwise &#x201c;NO&#x201d;. However, if a page is not available due to the pages &#x201c;Localization settings&#x201d; (which can disable translations) or if no Alternative Page Language record was found (can be disabled with &#x201c;.normalWhenNoLanguage&#x201d;, see below) the state is set to &#x201c;USERDEF1&#x201d; for non-active items and &#x201c;USERDEF2&#x201d; for active items. So in total there are four states to create designs for. It is recommended to disable the link on menu items rendered with &#x201c;USERDEF1&#x201d; and &#x201c;USERDEF2&#x201d; in this case since they are disabled exactly because a page in that language does not exist and might even issue an error if tried accessed (depending on site configuration).<br>&nbsp;<br>&nbsp;<b>.value</b> = comma list of sys_language uids to construct the menu with. The number of elements in this list determines the number of menu items.<br>&nbsp;<b>.normalWhenNoLanguage</b> = boolean, which if set will render the button for a language as a non-disabled button even if no translation is found for the language.<br>&nbsp;<b><br>Example:</b><br>Creates a language menu with flags (notice that some lines break):<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>lib.langMenu = HMENU<br>lib.langMenu.special = language<br>lib.langMenu.special.value = 0,1,2<br>lib.langMenu.1 = GMENU<br>lib.langMenu.1.NO {<br>&nbsp;&nbsp;&nbsp;XY = [5.w]+4, [5.h]+4<br>&nbsp;&nbsp;&nbsp;backColor = white<br>&nbsp;&nbsp;&nbsp;5 = IMAGE<br>&nbsp;&nbsp;&nbsp;5.file = media/flags/flag_uk.gif || media/flags/flag_fr.gif || media/flags/flag_es.gif <br>&nbsp;&nbsp;&nbsp;5.offset = 2,2<br>}<br>&nbsp;<br>lib.langMenu.1.ACT &lt; lib.langMenu.1.NO<br>lib.langMenu.1.ACT=1<br>lib.langMenu.1.ACT.backColor = black<br>&nbsp;<br>lib.langMenu.1.USERDEF1 &lt; lib.langMenu.1.NO<br>lib.langMenu.1.USERDEF1=1<br>lib.langMenu.1.USERDEF1.5.file = media/flags/flag_uk_d.gif || media/flags/flag_fr_d.gif || media/flags/flag_es_d.gif <br>lib.langMenu.1.USERDEF1.noLink = 1";s:11:"description";s:6:"&nbsp;";s:7:"default";N;s:12:"column_count";i:3;s:16:"is_propertyTable";i:1;}i:7;a:6:{s:8:"property";s:11:"userdefined";s:8:"datatype";s:2231:"Lets you write your own little PHP-script that generates the array of menuitems.<br>&nbsp;<b>.file</b> [resource] = filename of the php-file to include. (Just like cObject PHP_SCRIPT)<br>&nbsp;<b>.[any other key]</b> = your own variables to your script. They are all accessible in the array $conf in your script<br>&nbsp;<b><br>Howto:</b><br>You must populate an array called $menuItemsArray with page-records of the menuitems you want to be in the menu.<br>It goes like this:<br>&nbsp;<br>$menuItemsArray[] = pageRow1;<br>$menuItemsArray[] = pageRow2;<br>$menuItemsArray[] = pageRow3;<br>...<br>&nbsp;<br>A &#x201c;pageRow&#x201d; is a record from the table &#x201c;pages&#x201d; with all fields selected (SELECT * FROM...)<br>If you create fake page rows, make sure to add at least &#x201c;title&#x201d; and &#x201c;uid&#x201d; field values.<br>&nbsp;<b><br>Notice:</b><br>If you work with mount-points you can set the MP param which should be set for the page by setting the internal field &#x201c;_MP_PARAM&#x201d; in the page-record (xxx-xxx).<br>&nbsp;<b><br>Overriding URLs:</b><br>You can also use the internal field &quot;_OVERRIDE_HREF&quot; to set a custom href-value (eg. &quot;http://www.typo3.org&quot;) which will in any case be used rather than a link to the page that the page otherwise might represent. If you use &quot;_OVERRIDE_HREF&quot; then &quot;_OVERRIDE_TARGET&quot; can be used to override the target value as well (See example below).<br>&nbsp;<b><br>Other reserved keys:</b><br>&#x201c;_ADD_GETVARS&#x201d; can be used to add get parameters to the URL, eg. &#x201c;&amp;L=xxx&#x201d;.<br>&#x201c;_SAFE&#x201d; can be used to protect the element to make sure it is not filtered out for any reason.<br>&nbsp;<b><br>Creating submenus:</b><br>You can create submenus for the next level easily by just adding an array of menu items in the internal field &quot;_SUB_MENU&quot; (See example below).<br>&nbsp;<b><br>Presetting element state</b><br>If you would like to preset an element to be recognized as a SPC, IFSUB, ACT, CUR or USR mode item, you can do so by specifying one of these values in the key &#x201c;ITEM_STATE&#x201d; of the page record. This setting will override the natural state-evaluation.";s:11:"description";s:6:"&nbsp;";s:7:"default";N;s:12:"column_count";i:3;s:16:"is_propertyTable";i:1;}i:8;a:6:{s:8:"property";s:12:"userfunction";s:8:"datatype";s:184:"Calls a user function/method in class which should (as with &#x201c;userdefined&#x201d; above) return an array with page records for the menu.<br>&nbsp;<b>.userFunc</b> = function-name";s:11:"description";s:6:"&nbsp;";s:7:"default";N;s:12:"column_count";i:3;s:16:"is_propertyTable";i:1;}}}